SL e TP

 

Galera, to aprendendo ainda.

Fiz um robozinho, ele ta abrindo a ordem qnd eu quero td certinho, porem qnd o preço chega no Stop Loss ou no Take Profit a ordem não fecha.

trade.Buy(1, NULL, ask, ask - 45, ask + 155, "COMPRA em: " + ask);

O que preciso fazer?

 
Claudio Prado:

Galera, to aprendendo ainda.

Fiz um robozinho, ele ta abrindo a ordem qnd eu quero td certinho, porem qnd o preço chega no Stop Loss ou no Take Profit a ordem não fecha.

trade.Buy(1, NULL, ask, ask - 45, ask + 155, "COMPRA em: " + ask);

O que preciso fazer?

Olá Claudio Prado, acredito que seu problema é o fato de não estares considerando que deves passar o preço absoluto de SL/TP, e não o relativo, em pontos.

Para facilitar o entendimento disso e correção, recomendo analisares o código em https://www.mql5.com/pt/articles/481 que separei abaixo, que também já leva em consideração a normalização do preço:

//--- 3. example of buying at the specified symbol with specified SL and TP
   double volume=0.1;         // specify a trade operation volume
   string symbol="GBPUSD";    //specify the symbol, for which the operation is performed
   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // number of decimal places
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // point
   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);             // current price for closing LONG
   double SL=bid-1000*point;                                   // unnormalized SL value
   SL=NormalizeDouble(SL,digits);                              // normalizing Stop Loss
   double TP=bid+1000*point;                                   // unnormalized TP value
   TP=NormalizeDouble(TP,digits);                              // normalizing Take Profit
//--- receive the current open price for LONG positions
   double open_price=SymbolInfoDouble(symbol,SYMBOL_ASK);
   string comment=StringFormat("Buy %s %G lots at %s, SL=%s TP=%s",
                               symbol,volume,
                               DoubleToString(open_price,digits),
                               DoubleToString(SL,digits),
                               DoubleToString(TP,digits));
   if(!trade.Buy(volume,symbol,open_price,SL,TP,comment))
     {
      //--- failure message
      Print("Buy() method failed. Return code=",trade.ResultRetcode(),
            ". Descrição do código: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }

Espero que esse código ajude na definição de SL/TP, mas tenha cuidado quanto ao fato de que ele foi desenvolvido como exemplo para o mercado FX.
Sds.,
Rogério Figurelli

Operações de negócios no MQL5 - São fáceis
Operações de negócios no MQL5 - São fáceis
  • www.mql5.com
Quase todos os negociadores chegam ao mercado para fazer dinheiro, mas alguns também apreciam o processo em si. No entanto, não é apenas a negociação manual que pode lhe proporcionar uma experiência emocionante. O desenvolvimento de sistemas automatizados de negociação também pode ser bastante impressionante. Criar uma negociação automática...
 
Claudio Prado:

Galera, to aprendendo ainda.

Fiz um robozinho, ele ta abrindo a ordem qnd eu quero td certinho, porem qnd o preço chega no Stop Loss ou no Take Profit a ordem não fecha.

trade.Buy(1, NULL, ask, ask - 45, ask + 155, "COMPRA em: " + ask);

O que preciso fazer?

1. Verifique na aba "diário" (journal) se há alguma mensagem de erro, tanto na colocação da ordem quanto na execução.

2. Se houver erro, deve ser tratado. Isso resolverá o problema;

3. Verifique na aba histórico se os valores TP e SL foram atribuídos corretamente;

4. Se não conseguir resolver insira imagens aqui das abas diário e histórico, para que os colaboradores do Fórum consigam te ajudar.

Importante destacar que após o trade.buy ser executado é importante tratar eventuais erros de envio de ordens.

[ ]´s

 
Joscelino Celso de Oliveira:

1. Verifique na aba "diário" (journal) se há alguma mensagem de erro, tanto na colocação da ordem quanto na execução.

2. Se houver erro, deve ser tratado. Isso resolverá o problema;

3. Verifique na aba histórico se os valores TP e SL foram atribuídos corretamente;

4. Se não conseguir resolver insira imagens aqui das abas diário e histórico, para que os colaboradores do Fórum consigam te ajudar.

Importante destacar que após o trade.buy ser executado é importante tratar eventuais erros de envio de ordens.

[ ]´s

Então, realmente não sei o pq... O TP e o SL estão nos preços certinhos. Porém o preço passa la e não dispara os SL nem o TP.

Segue as imagens

Arquivos anexados:
Capturar.JPG  37 kb
Capturar2.JPG  178 kb
 
Rogerio Figurelli:

Olá Claudio Prado, acredito que seu problema é o fato de não estares considerando que deves passar o preço absoluto de SL/TP, e não o relativo, em pontos.

Para facilitar o entendimento disso e correção, recomendo analisares o código em https://www.mql5.com/pt/articles/481 que separei abaixo, que também já leva em consideração a normalização do preço:

Espero que esse código ajude na definição de SL/TP, mas tenha cuidado quanto ao fato de que ele foi desenvolvido como exemplo para o mercado FX.
Sds.,
Rogério Figurelli

Então Rogério, o SL e o TP aparece certinho no preço que eu quero, o problema é só que realmente qnd o preço passa la não fecha a posição
 
Claudio Prado:

Então, realmente não sei o pq... O TP e o SL estão nos preços certinhos. Porém o preço passa la e não dispara os SL nem o TP.

Segue as imagens

Boa tarde Claudio,

veja se acontece a mesma coisa com a série WIN$N, em outras palavras, veja se dá certo usando a série WIN$N.

 
Claudio Prado:
Então Rogério, o SL e o TP aparece certinho no preço que eu quero, o problema é só que realmente qnd o preço passa la não fecha a posição

Olá Claudio Prado, se aparecem as linhas de SL/TP corretamente no gráfico realmente o problema é outro.
Minha maior suspeita, nesse caso, é a volatilidade e spread.
Qual mercado/ativo você está testando? Você tem certeza que está visualizando corretamente o preço para execução de SL/TP na corretora?
Obs: note que você deve ativar manualmente a linha Ask para ela aparecer no gráfico, pois o default é aparecer apenas a linha Bid.
Sds.,
Rogério Figurelli

Razão: