testador de estratégia

 

  Bom dia a todos, 

 

  Elaborei um EA e quando jogo no testador de estratégia ele parece estar rodando normalmente, mas o testador só me dá resultados dos primeiros períodos no restante há a exibição de uma msg de erro de negociação "Alert the Sell order request could not be completed: error - 4756. Para exemplificar melhor joguei o EA em um período desde o início do ano os 3 primeiros meses o testador deu o resultado de todos os trades depois passou a emitir essa msg. 

 Alguém teria ideia de qual motivo para o erro?

 
adriano.barbosa:

  Bom dia a todos, 

 

  Elaborei um EA e quando jogo no testador de estratégia ele parece estar rodando normalmente, mas o testador só me dá resultados dos primeiros períodos no restante há a exibição de uma msg de erro de negociação "Alert the Sell order request could not be completed: error - 4756. Para exemplificar melhor joguei o EA em um período desde o início do ano os 3 primeiros meses o testador deu o resultado de todos os trades depois passou a emitir essa msg. 

 Alguém teria ideia de qual motivo para o erro?

Olá adriano.barbosa,

Para uma lista completa dos códigos de erro por favor dê uma olhada nesse link

O erro 4756 é um erro de falha no envio da ordem, provavelmente causado por um retorno igual a 'false' da função OrderSend.

Logo, como a função OrderSend só tem dois argumentos, a saber MqlTradeRequest e MqlTradeResult, provavelmente seu problema está localizado dentro de MqlTradeRequest.

Entretanto, sem mais informações não é possível deduzir onde, exatamente, está ocorrendo o erro.

Seria interessante você nos reportar quais os parâmetros que você está usando dentro da struct MqlTradeRequest para que possamos identificar o erro com precisão.

Abraços,
Malacarne 

 

Entendo perfeitamente, 

Mas o que poderia justificar a entrada de dados sem erro nos primeiros meses? 

Segue parâmetros:  

MqlTick latest_price; 

      MqlTradeRequest mrequest; 

      MqlTradeResult mresult; 

      MqlRates mrates[];

      ZeroMemory (mrequest);

       

 

 ZeroMemory(mrequest);

         mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution

         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price

         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss

         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit

         mrequest.symbol = _Symbol;                                            // currency pair

         mrequest.volume = LOT;                                                 // number of lots to trade

         mrequest.magic = EA_Magic;                                             // Order Magic Number

         mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order

         mrequest.type_filling = ORDER_FILLING_FOK;                             // Order execution type

         mrequest.deviation=100;                                                // Deviation from current price

         //--- send order

         OrderSend(mrequest,mresult);

         // get the result code

         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed

           {

            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");

           }

         else

           {

            Alert("The Buy order request could not be completed -error:",GetLastError());

            ResetLastError();

            return;

           }

     } 
 
adriano.barbosa:

Entendo perfeitamente, 

Mas o que poderia justificar a entrada de dados sem erro nos primeiros meses? 

Segue parâmetros:  

Olá adriano.barbosa,

tive que editar o seu post. Da próxima vez por favor não esqueça de usar o botão SRC para colar partes de código no post ... ;-) 

Você está tentando enviar essa ordem em que tipo de ativo? Mercado futuro ou mercado à vista?

Abraços,
Malacarne 

 

Opa Obrigado! Não sabia dessa função!

 

O teste foi realizado no mercado futuro com série contínua no mini-índice!

 

Att. Adriano Barbosa 

 
adriano.barbosa:

Opa Obrigado! Não sabia dessa função!

O teste foi realizado no mercado futuro com série contínua no mini-índice!

Att. Adriano Barbosa 

Qual série contínua exatamente? 

 
Malacarne:

Qual série contínua exatamente? 

WIN$
 
adriano.barbosa:
WIN$

Experimente trocar pela série WIN$D e por favor reporte os resultados.

Abraços,
Malacarne 

 
Malacarne:

Experimente trocar pela série WIN$D e por favor reporte os resultados.

Abraços,
Malacarne 

Opa Malacarne, 

 

Obrigado pela atenção! Infelizmente ainda estou caindo no mesmo erro. Estou achando estranho, pois se fosse algo no envio de ordens o EA daria o erro desde o início , porém só começa a dar o erro depois que já temos vários dados armazenados, testei tb em ativos bovespa e deu a mesma coisa. 

 
adriano.barbosa:

Opa Malacarne, 

 

Obrigado pela atenção! Infelizmente ainda estou caindo no mesmo erro. Estou achando estranho, pois se fosse algo no envio de ordens o EA daria o erro desde o início , porém só começa a dar o erro depois que já temos vários dados armazenados, testei tb em ativos bovespa e deu a mesma coisa. 

Olá adriano.barbosa,

Minha sincera suspeita é que você está utilizando da maneira errada a variável _Point.

Ao invés de utilizar _Point você deveria colocar em seu código uma variável que capturasse corretamente o "tick size" do ativo onde você está querendo enviar suas ordens...

Experimente dar uma olhada nesse post.

Depois de ler o post acima, por favor dê uma lida na documentação, especificamente na função SymbolInfoDouble e sua opção SYMBOL_TRADE_TICK_SIZE.

Abraços,
Malacarne 

 
adriano.barbosa :

Entendo perfeitamente, 

Mas o que poderia justificar a entrada de dados sem erro nos primeiros meses? 

Segue parâmetros:  

Você sempre tem que verificar o código de erro de negociação, não só GetLastError ().

O que é o valor de

mresult.retcode
Razão: