Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)
Alguem conseguiu fazer a Automação fazer uma venda no rompimento de minima ou fechamento do candle anterior?
Ou então Compra no rompimento da maxima ou abertura do candle anterior?
Tambem estou tentando fazer a compra no topo do corpo do candle e venda na parte inferior do corpo de candle.
Olá. Tenho muito pouca experiência nesse tipo de programação mas até onde entendi, o código é executado apenas ao final de cada candle. Dessa forma, me parece que só será possível enviar uma ordem stop no preço desejado (p.ex. máxima/mínima de um candle anterior) e aguardar que ordem seja executada.
Postado por: @dfrobinsonOlá. Tenho muito pouca experiência nesse tipo de programação mas até onde entendi, o código é executado apenas ao final de cada candle. Dessa forma, me parece que só será possível enviar uma ordem stop no preço desejado (p.ex. máxima/mínima de um candle anterior) e aguardar que ordem seja executada.
@dfrobinson foi direto na questão! É isso aí!
Eu fiz o código abaixo com entradas utilizando ordens stop para que você possa evoluir da maneira que entender ser melhor (recomendo assistir esse vídeo, no qual eu explico um roteiro para melhor implementações). Observe que a estratégia tem 3 parâmetros.
OBS:
1) Devido a forma como o Módulo de Automação funciona, peço que configure a quantidade máxima da posição 2 vezes o valor da sua posição. Ex: se vai fazer operações com apenas 1 contrato, deixe na configuração da automação o valor de 2 na quantidade máxima de posição. Isso é para garantir que a ordem de takeprofit vai aparecer corretamente no primeiro candle após a abertura (momento no qual é necessário cancelar a ordem stop de abertura que não foi executada).
2) Não esqueça de configurar também o parâmetro de pModuloAutomacao para true na hora de criar a automação.
Abs e boa programação ai!
input pRiscoGanho(3.0); pTriggerEmTicks(2); pModuloAutomacao(false); var fPrecoAlvo, fPrecoStop, fPrecoStopOffset: float; fPrecoVenda, fPrecoCompra: float; fRange: float; begin if not hasPosition then begin fPrecoVenda := Low - pTriggerEmTicks*MinPriceIncrement; fPrecoCompra := High + pTriggerEmTicks*MinPriceIncrement; fRange := Range; SellShortStop(fPrecoVenda); BuyStop(fPrecoCompra); end; if isBought then begin fPrecoStop := buyPrice - fRange; fPrecoStopOffset := fPrecoStop - 10*MinPriceIncrement; fPrecoAlvo := buyPrice + pRiscoGanho*fRange; CancelPendingOrders; if pModuloAutomacao then begin SellShortStop(fPrecoStop, fPrecoStopOffset); SellShortLimit(fPrecoAlvo); if isBought and (Close <= fPrecoStopOffset) then ClosePosition; end else begin SellToCoverStop(fPrecoStop, fPrecoStopOffset); SellToCoverLimit(fPrecoAlvo); if isBought and (Close <= fPrecoStopOffset) then ClosePosition; end; end; if isSold then begin fPrecoStop := sellPrice + fRange; fPrecoStopOffset := fPrecoStop + 10*MinPriceIncrement; fPrecoAlvo := sellPrice - pRiscoGanho*fRange; CancelPendingOrders; if pModuloAutomacao then begin BuyStop(fPrecoStop, fPrecoStopOffset); BuyLimit(fPrecoAlvo); if isSold and (Close >= fPrecoStopOffset) then ClosePosition; end else begin BuyToCoverStop(fPrecoStop, fPrecoStopOffset); BuyToCoverLimit(fPrecoAlvo); if isSold and (Close >= fPrecoStopOffset) then ClosePosition; end; end; end;
Bom dia @alexandre-ferreira-cardoso! Tudo bem?
O código seria simples...seria até melhor já inserir no seu código direto...mas vou explicar aqui a ideia, pra você incluir aí:
É isso! Grande abs!
Bom dia @anaxmando!
Vou te falar dois ajustes bem pontuais para fazer o que deseja. Mas recomendo sempre ter uma relação risco/ganho maior do que um. A sua elaboração por construção já tem uma relação de risco/ganho de 0,4...o que vai exigir que sua estratégia tenha um alto nível de acerto para ser lucrativa.
const fRange = 2;
input pRiscoGanho(2.5);
Assim, seu stop será de dois pontos atrás da entrada e o take profit 2.5 vezes o stop, ou seja, 5 pontos.
Abs e bons trades!
E aí, @anaxmando!
O raciocínio é análogo. Bastaria configurar fRange para 5 (que seria o stop) e a relação pRiscoGanho para 0.4.
Só reforço que projetar uma estratégia com risco ganho menor que 1 não é interessante...você vai ter que compensar com uma taxa de acerto alta para a estratégias ser lucrativa.
Abs!
Boa tarde! Estou começando nesse meio da programação.
Eu criei uma estrategia... mas gostaria que a estratégia funcionasse como se estivesse uma ordem OCO apregoada, para que eu possa ter uma estatística, saberia informar o que poderá modificar na estratégia abaixo para conseguir deixar fixo o alvo de Stop gain e Stop Loss, do jeito que esta... só rompe máxima e mínima, mas não coloca a saída... se conseguir ajudar ficarei muito grato.
Input
Alvo(2.0);
Stop(5.0);
ct(1);
Inicio
//Pergunta se esta comprado
Se (Isbought) entao
Inicio
//Buscar o alvo
buylimit(ct);
SellToCoverLimit(buyprice+alvo,ct); //Alvo da compra
SellToCoverStop(buyprice-stop, buyprice-stop-1,ct); //Alvo do Stop
Fim;
//Pergunta se esta vendido
Se (IsSold) entao
Inicio
BuyToCoverLimit(sellprice-alvo,ct); //Alvo da Venda
buytocoverstop(sellprice+stop, sellprice+stop+1,ct); //Alvo do Stop
Fim;
Inicio
Se (HasPosition = False) entao
Inicio
BuyStop(maxima+0.5, maxima+0.5+1);
Fim;
Se (HasPosition = False) entao
Inicio
SellShortStop(Minima-0.5, minima-0.5-1);
Fim;
Se (Hasposition = true) entao
CancelPendingOrders;
Fim;
Fim;
@anaxmando veja se assim funciona como vc gostaria:
Input Alvo(2.0); Stop(5.0); ct(1); Inicio Se (Isbought) entao Inicio buylimit(ct); SellToCoverLimit(buyprice+alvo); SellToCoverStop(buyprice-stop, buyprice-stop-1); Fim; Se (IsSold) entao Inicio BuyToCoverLimit(sellprice-alvo); buytocoverstop(sellprice+stop, sellprice+stop+1); Fim; Inicio Se (HasPosition = False) entao Inicio BuyStop(maxima+0.5, maxima+0.5+1); Fim; Se (HasPosition = False) entao Inicio SellShortStop(Minima-0.5, minima-0.5-1); Fim; Se (Hasposition = true) entao CancelPendingOrders; Fim; Fim;
Resumindo, nunca teremos ordens executadas antes da finalização de um Candle? É isso?
Complicado...
Principalmente pros stops. Podemos ter slippages enormes que inviabilizam os referidos robôs
Abs
Oi @mfpublicos! Seu resumo não está correto...
Ordens de alvo e stop, que são consideradas ordens OCO, uma vez criadas serão executadas quando forem acionadas (e não no fechamento do Candle). Ou seja, podem ser acionadas durante a formação da barra porque já estão lá colocadas quando se abre a posição e seu código trata isso de maneira adequada.
A atualização das ordens OCO ocorrem só no fechamento do candle/barra.
Grande abs!