Neo traderBot

Neo traderBot

Você sabia?

Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!

leaf leftleaf right
Notifications
Clear all

Stop Loss/Gain nao é acionado

7 Posts
4 Usuários
2 Reactions
238 Visualizações
(@rodrigo-lameiro)
Novo membro
Registrou: 2 anos atrás
Posts: 2
Iniciador do tópico  

Boa tarde, obrigado pelo espaço, com certeza esta ajudando muita gente.

Sou novo, nao sou programador, estou buscando aprender, se puderem me ajudar, por favor.

Os stops nao estao sendo acionados, coloquei a regra da seguinte forma:

 

if (IsBought) and (close-BuyPrice >= stopgain) then ClosePosition else
if (IsBought) and (BuyPrice-close >= stoploss) then ClosePosition else

if (IsSold) and (SellPrice-close >= stopgain) then ClosePosition else
if (IsSold) and (close-SellPrice >= stoploss) then ClosePosition;

 

Podem me ajudar, por favor?

 

Obrigado.


   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Olá @rodrigo-lameiro!

Cara, vou tentar te ajudar com o que forneceu, mas o problema pode estar em outras partes do seu código também.

  1. A forma como escreve o código depende de onde você irá executar. Por exemplo, o comando ClosePosition encerra posição apenas após o fechamento da barra. Se seu intuito é fazer backtesting, o ideal seria usar funções contendo a menção "ToCover". Utilizando as funções "ToCover" o módulo de automação cria ordens OCO.
  2. Imagino que tenha definido StopGain e StopLoss como valores posiivos e em relação ao preço. Por exemplo, se estiver operando dólar seria 5 pontos...índice 100 pontos, ações 1,5 reais.

 

A principio seu código pode funcionar, embora ele atue sempre no fechamento do Candle.

Compartilhe o restante que fica mais fácil de identicar o problema.

Abs!


   
ReplyCitar
(@alexandrecnunes)
Membro eminente
Registrou: 2 anos atrás
Posts: 16
 

Johnathas ainda me confundo com as várias formas de abertura e fechamento de posições. 

Lembrando que não executaria em backtesting e sim no modulo de automação,

Digamos que eu queira abrir uma posição de compra somente em um valor acima da máxima do candle anterior, neste caso eu abriria com BuyStop(valor maximo do candle anterior,valor maximo do candle anterior); Correto?

Mas digamos que nesta mesma situação, eu queira por segurança abrir uma ordem OCO, e posicionar uma ordem de fechamento, um stop de cobertura, neste caso eu usaria : SellToCoverStop(PrecoStop,PrecoStopOffset), correto?

E quando atingir um alvo fixo a ordem seria SellToCoverLimit(PrecoAlvo); , certo?

 

E como serial essas ordens no caso do backtesting?

 

 


   
ReplyCitar
(@rodrigo-lameiro)
Novo membro
Registrou: 2 anos atrás
Posts: 2
Iniciador do tópico  

@admin

Boa noite, Johnathas!

Claro, segue codigo completo. Seria para atua no WIN.

No caso do Stop Loss, Gain e Proteçao, nao precisaria ser no fechamento do Candle, teria que ser assim que atingisse os pontos pre-determinados.

 

Obrigado.

Input
MediaCurta(5);
MediaLonga(21);

StopLoss(300);
StopGain(1000);
Proteger(500);

Var
vMediaCurta, vMediaLonga: Float;

Begin

vMediaCurta := Media(MediaCurta, close);
vMediaLonga := Media(MediaLonga, close);

Plot(vmediaCurta);
Plot2(vmediaLonga);

begin

if (IsBought or IsSold) then

begin
if (IsBought) and (vMediaCurta < vMediaLonga) then ReversePosition
else
if (IsSold) and (vMediaCurta > vMediaLonga) then ReversePosition;

if (IsBought) and (close-BuyPrice >= stopgain) then ClosePosition else
if (IsBought) and (BuyPrice-close >= stoploss) then ClosePosition else

if (IsSold) and (SellPrice-close >= stopgain) then ClosePosition else
if (IsSold) and (close-SellPrice >= stoploss) then ClosePosition;

if (IsSold) and (SellPrice-close >= proteger) and (close > close[5]) then ClosePosition else
if (IsBought) and (close-BuyPrice >= proteger) and (close < close[5]) then ClosePosition;

end
else

begin
if (vMediaCurta > vMediaLonga) and (vMediaCurta[1] < vMediaLonga[1]) then BuyAtMarket

else

if (vMediaCurta < vMediaLonga) and (vMediaCurta[1] > vMediaLonga[1]) then SellShortAtMarket;
end;
end;

End;


   
ReplyCitar
masker
(@masker)
Membro confiável
Registrou: 2 anos atrás
Posts: 41
 

@rodrigo-lameiro pra mim está funcionando normal, tanto o SL, como o TP, como a proteção.


   
Johnathas reacted
ReplyCitar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Olá @alexandrecnunes!

Seu raciocínio está todo correto! A Nelógica vem atualizando o backtesting para ficar mais próximo do Módulo de Automação, de tal forma que você pode usar as ordens ToCover nos dois contextos sem problemas agora.

Minha única observação é quanto à abertura da posição. Acho que convém você verificar se o preço atual está maior ou menor que o desejado. Exemplo, se quer comprar e o preço está maior que o desejado, talvez você queira colocar uma ordem limitada no book, se estiver menor, então seria uma ordem stop. Exemplo de código:

if bSinalCompra then
begin
   if Close >= precoDesejado then buyLimit(precoDesejado, quantidade)
   else buyStop(precoDesejado, precoDesejado+offset, quantidade);
end;

Ou de maneira mais simples, poderia fazer a entrada a mercado se assim desejar, estando sujeito a slippage (ordem limitada não teria essa questão).

if bSinalCompra then BuyAtMarket(quantidade);

Para liquidação de posição é exatamente o que disse. Uma vez posicionado, seu código tem que ter um bloco de verificação e, dentro dele, as ordens de stop e de alvo.

Uma vez posicionado, as ordens que reduzem posição serão tratadas como ordens OCO. É o caso das ordens de alvo e stop. Há pouco tempo a documentação da Nelogica foi atualizada nas páginas 42 e 43, explicando melhor sobre esse tratamento dado no Módulo de Automação. 

 

if isBought then
begin
    SellToCoverStop(precoStop, precoStopOffset, quantidade);
    SellToCoverLimit(precoAlvo, quantidade);
end;

 

Grande abs!

 


   
ReplyCitar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Olá @rodrigo-lameiro!

Como o @masker já confirmou que o código está funcionando, vou apenas pontuar sobre ReversePosition.

Tal comando funciona no Backtesting (Editor de Estratégias)...PORÉM,  o Profit não faz reversão de posição no Módulo de Automação.

A Nelogica diz que é para dar mais segurança...mas isso acaba restringindo muito alguns setups que exigem reversão.

 

Grande abs!


   
ReplyCitar