A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias
//Compra// if compra and not IsBought and not isSold then BuyLimit(close); //Se Estiver Comprado - Buscar Saída// if (isBought) then Begin vStop := minima; SellToCoverStop(vStop,vStop); SellToCoverLimit(BuyPrice-vStop*2); end; //Venda// if venda and not IsBought and not isSold then SellShortLimit(close); //Se Estiver Vendido - Buscar Saída// if (isSold) then Begin vStop := maxima; BuyToCoverStop(vStop,vStop); BuyToCoverLimit(SellPrice+vStop*2; end; //Horario Final para Day-Trade if (time>=1730) then ClosePosition; end;
Criei essa regra, onde o StopLoss abaixo do candle sinal e Gain 2x o risco, porém o StopLoss esta com "TrailingStop" e alvo não esta saindo 2x o risco. Como faço para travar esse StopLoss?
//Bloco de Entrada// if (time>=0905) and (time<=1730) then //Compra// if compra and not IsBought and not isSold then Begin amp := abs(maxima-minima); vStop := minima-(1*MinPriceIncrement); AlvoC := maxima+amp*2; BuyLimit(close); SellToCoverStop(vStop,vStop); end; //Se Estiver Comprado - Buscar Saída// if (isBought) then Begin SellToCoverLimit(AlvoC); SellToCoverStop(vStop,vStop); End; //Venda// if venda and not IsBought and not isSold then Begin amp := abs(maxima-minima); vStop := maxima-(1*MinPriceIncrement); AlvoV := minima-amp*2; SellShortLimit(close); BuyToCoverStop(vStop,vStop); end; //Se Estiver Vendido - Buscar Saída// if (isSold) then Begin BuyToCoverLimit(AlvoV); BuyToCoverStop(vStop,vStop); End; //Horario Final para Day-Trade if (time>=1750) then ClosePosition; end;
Consegui fazer dessa maneira. Espero que possa ajudar outros membros.
Oi @jonatasdias!
Cara, até já respondi pra você no Chat lá do Profit. Mas vou repetir aqui para ficar de histórico porque é uma dúvida recorrente para quem está iniciando no mundo da programação no Profit em NTSL.
Recomendo assistir o vídeo da Comunidade NeoTraderBot chamado: O QUE PRECISA SABER SOBRE ROBÔS. Vou explicar uma das coisas que falo nesse vídeo abaixo:
Um primeiro ponto a entender é como funciona a execução de um código fonte no Profit (e isso é assim em praticamente todas as plataformas). O código que escrevemos é processado toda vez que surge um novo dado. Em backtesting isso é quando uma barra (seja candle ou box) é encerrado. Ao executar em replay ou tempo real (seja em um gráfico ou no módulo de automação), o código é processado tick a tick.
Pensando assim, fica evidente, que no seu código a variável vStop é alterada sempre que tem um novo dado e consequente o seu alvo (pois depende dela).
Você precisa criar uma variável auxiliar, que servirá para definir o stop e alvo uma única vez quando você abrir uma posição. Vamos chamar de bConfigurouRisco, do tipo Boolean. Assim a ideia é que essa variável assuma o valor falso enquanto você não estiver posicionado. Se tornará verdadeira na primeira vez que a condição isBought ou isSold for verdadeira, e retornará para falso quando você não tiver mais posição.
Assim, vou incluir essa lógica na sua estratégia.
PS: A partir de uma determinada versão do Profit, as variáveis booleanas passaram a não reter valor entre processamentos. pois isso incluo a linha de bConfigurouRisco := bConfigurouRisco[1]. Alterei seu código sem rodar novamente no Profit, depois veja se deu certo!
Outra dica: evite fazer conta como parâmetro das funções de roteamento. Crie uma variável, atribua valor a ela e depois passe essa variável. Já houve bugs no passado em relação a este ponto.
var bConfigurouRisco: boolean; vStop, vAlvo: float; begin bConfigurouRisco := bConfigurouRisco[1]; //Compra// if compra and not IsBought and not isSold then BuyLimit(close); //Se Estiver Comprado - Buscar Saída// if (isBought) then Begin if Not bConfigurouRisco then begin vStop := minima; vAlvo := BuyPrice-vStop*2; bConfigurouRisco := true; end; SellToCoverStop(vStop,vStop); SellToCoverLimit(vAlvo); end; //Venda// if venda and not IsBought and not isSold then SellShortLimit(close); //Se Estiver Vendido - Buscar Saída// if (isSold) then Begin if Not bConfigurouRisco then begin vStop := maxima; vAlvo := SellPrice+vStop*2; bConfigurouRisco := true; end; BuyToCoverStop(vStop,vStop); BuyToCoverLimit(vAlvo ); end; if Not hasPosition then bConfigurouRisco := false; //Horario Final para Day-Trade if (time>=1730) then ClosePosition; end; end;
Olá, boa tarde. É possivel pegar informação de um candle do dia anterior? Por exemplo, gostaria que rotornasse o valor da abertura do candle 100 e plotasse uma linha para o dia atual. Estou fazendo dessa forma, porém plota em ondas: Close[14].