Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 17

 
Muito bom! Obrigado!
 

Baixei o arquivo e Depurei o codigo, e apresentou esse warning alguem poderia me dar uma ajuda quanto a isso ?


return value of 'OrderSend' should be checked


 

Olá, sou novato e também estou testando o Robô

Tente isso:

 //    OrderSend(mrequest,mresult);

     

         bool res=OrderSend(mrequest,mresult);

         // get the result code

         if(res && (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;

           }

Se eu estiver errado, alguem me corrija por favor!

Fonte de pesquisa: https://www.mql5.com/en/forum/23663

return value of 'OrderSend' should be checked
return value of 'OrderSend' should be checked
  • 2014.05.03
  • www.mql5.com
Hi ! I'm wondering how to do that ...:/ the warning appeared @ the last update...
 

Quando estou depurando sempre da erro na hora de enviar a ordem. Eu pensei que fosse meu código, mas mesmo testando o arquivo mql5 pra download da erro também.



 
northedan:

Quando estou depurando sempre da erro na hora de enviar a ordem. Eu pensei que fosse meu código, mas mesmo testando o arquivo mql5 pra download da erro também.



Eu acho que no exemplo é em moedas, então a variavel lot que está 0.1 não serve pra seu teste, tente mudar assim (mudando a variavel mrequest.volume):


         double minSymbolLot =  SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);

         

         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 = minSymbolLot;                                            // 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;  

 
Alguém sabe se posso utilizar esse EA para mini-índice ou mini-dólar ?
 
Sella170:
Alguém sabe se posso utilizar esse EA para mini-índice ou mini-dólar ?

Você compreendeu a estratégia? Está ciente dos riscos? Analisou os níveis de SL e TP? Conhece os indicadores técnicos utilizados? Sabe parametrizá-los? Sabe personalizar as variáveis para cada ativo (WIN e WDO)?

O código em si foi desenvolvido para qualquer ativo e pode identificar isso através do "_Symbol" e para qualquer tempo gráfico "_Period".

Agora é importante que você saiba o que está fazendo ao colocar o EA para rodar. Se optar por fazê-lo, sugiro que opere apenas em contas demo até dominar a ferramenta e ter maior conhecimento de mercado de capitais.

[ ]´s

 

Pessoal,

Este é um código simples e rapidamente modificado se você tiver um erro com a abertura de várias ordens ao mesmo tempo.

Substitua este código: da linha 167 -177

   if(PositionSelect(_Symbol)==true) // temos uma posição aberta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //É uma compra
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // É uma venda
        }
     }

por este:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //É uma compra
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // É uma venda
           }
        }
      }

Obrigado @Samuel Olowoyo

 
Korobejnik:

Por favor, informe como resolver o problema. O Expert Advisor abre várias posições em uma linha para comprar, o mesmo para vender.

O Expert Advisor não vê que já existem posições de compra e venda abertas e abre novas posições, apesar do fato de haver uma verificação no código.

para posições já abertas. Por algum motivo, a verificação não funciona.

Como não há ajuda dos moderadores trolls aqui, copiarei a resposta do fórum em inglês:

Pessoal, este é um código simples e rapidamente modificável, se vocês tiverem um erro com várias ordens sendo abertas ao mesmo tempo. Substituam este código: da linha 167 -177

   if(PositionSelect(_Symbol)==true) // temos uma posição aberta
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //É uma compra
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // É uma venda
        }
     }

Por este:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //É uma compra
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // É uma venda
           }
        }
      }
 
Locus_Neminis:

Como não consigo obter ajuda dos moderadores de trolls aqui, copiarei a resposta do fórum em inglês:

Pessoal, este é um código simples e rápido que pode ser modificado se você tiver um erro com várias ordens abertas ao mesmo tempo. Substituam este código: da linha 167 -177

Por este:

Isso não ajudará. Tenho um tópico em meu perfil sobre isso. Lá estão a causa e a solução do problema.
Não entendo sobre os trolls.