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

 

Olá a todos,

Sou novato em MQL5 (e em FOREX), mas programador há muito tempo. Abri o arquivo My_First_EA.mq5 e compilei, mas não estou obtendo as funções de depuração. Se eu abrir qualquer um dos arquivos de script de exemplo, obtenho a opção Debug. Também recebi um aviso de que o valor de retorno de 'OrderSend' deve ser verificado. O que devo fazer para obter a funcionalidade Debug?

Louis

 
louisd:

Olá a todos,

Sou novato em MQL5 (e em FOREX), mas programador há muito tempo. Abri o arquivo My_First_EA.mq5 e compilei, mas não estou obtendo as funções de depuração. Se eu abrir qualquer um dos arquivos de script de exemplo, obtenho a opção Debug. Também recebi um aviso de que o valor de retorno de 'OrderSend' deve ser verificado. O que devo fazer para obter a funcionalidade Debug?

Louis

Olá a todos,

Descobri meu próprio problema. Criei um novo projeto com o Expert Advisor Wizard e, em seguida, copiei o arquivo My_First_EA.mq5 e obtive a funcionalidade de depuração.

Louis

 
louisd:

Olá a todos,

Descobri meu próprio problema. Criei um novo projeto com o Expert Advisor Wizard e, em seguida, copiei o arquivo My_First_EA.mq5 e obtive a funcionalidade de depuração.

Louis

Mas você corrigiu o aviso "OrderSend should be checked"?
 
Boobwood:

Recebi o erro 4756, vi a solução na página 2 e verifiquei o código original, havia ZeroMemory(mrequest); na própria linha 218, mas continuo com o erro 4756.


Também continuo com esse erro depois de fazer as duas correções sugeridas:

ZeroMemory(mrequest);

e também

if(Buy_opened || Sell_opened)

Alguém pode me ajudar com o erro 4756? Parece que não é possível fazer uma ordem de compra.

 
Tchuso:

Olá, estou recebendo um erro:

O valor de retorno de 'OrderSend' deve ser verificado nas linhas 213 e 259.


Você conseguiu resolver o problema?

Bom dia Tchuso,

Aconteceu a mesma coisa comigo. Resolvi o problema substituindo essas linhas em ambas as operações por isto.

if(!OrderSend(mrequest,mresult))
PrintFormat("OrderSend error %d",GetLastError());

Se precisar de ajuda, me avise, pois também sou novato.

Atenciosamente!

 

Gostei muito do código de exemplo, também sou novato nisso. Corrigi o código como aparece nos comentários e ele não apresenta mais erros.

O problema é que o robô não abre negociações, ele nem mesmo abre uma negociação.

Alguém conseguiu resolver esse problema?


Estou usando a opção "Unico" do testador de estratégias: é um erro meu?


Obrigado por seu tempo e apoio
 


Percebi que o robô tenta abrir as ordens, mas sempre dá um erro:


Exit:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Eu mudei várias coisas no código, mas não funciona, adicionei o código que tenho:


Original: mrequest.type_filling = "Eu o coloquei das três maneiras que estão na documentação".

 mrequest.action = TRADE_ACTION_DEAL;                                  // execução imediata da ordem
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // último preço de venda
         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;                                            // par de moedas
         mrequest.volume = Lot;                                                 // número de lotes a serem negociados
         mrequest.magic = EA_Magic;                                             // Número mágico do pedido
         mrequest.type = ORDER_TYPE_BUY;                                        // Ordem de compra
         mrequest.type_filling = ORDER_FILLING_RETURN;                             // Tipo de execução da ordem
         mrequest.deviation=100;                      
        



Tambien he probado este codigo:

 //--- declaração e inicialização da solicitação e do resultado
               MqlTradeRequest request={0};
               MqlTradeResult  result={0};
            //--- parâmetros do aplicativo
               request.action   =TRADE_ACTION_DEAL;                     // tipo de operação comercial
               request.symbol   =Symbol();                              // símbolo
               request.volume   =0.1;                                   // volume de 0,1 lote
               request.type     =ORDER_TYPE_BUY;                        // tipo de ordem
               request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // preço de abertura
               request.deviation=5;                                     // desvio de preço permitido
               request.magic    =EA_Magic;                          // Número mágico do pedido

               //--- enviando o aplicativo
               if(!OrderSend(request,result))
               PrintFormat("OrderSend error %d",GetLastError());     // se a solicitação não puder ser enviada, digite o código de erro
               //--- informações sobre a operação
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
 
Libni Colina:


Percebi que o robô tenta abrir as ordens, mas sempre dá um erro:


Exit:

2020.05.06 20:35:16.141 Core 1 2020.04.20 20:25:00 failed market sell 0.10 EURUSD sl: 1.08965 tp: 1.07665 [Invalid request].


Eu mudei várias coisas no código, mas não funciona, eu adiciono o código que tenho:


Original: mrequest.type_filling = "Eu o coloquei das 3 maneiras que estão na documentação".


Adicione isso na parte superior do código:

#include <Trade\Trade.mqh>

E, para abrir uma operação, basta digitar isso:

double volumen= 0.01; // Ou o volume que você quiser

CTrade m_trade;

m_trade.Buy(volumen); // Compra

m_trade.Sell(volumen); // Vende
 
Olá, obrigado pelo tutorial, ele foi muito útil. Mas tenho um mal-entendido, as variáveis New_Time foram declaradas e inicializadas com a função CopyTimes, mas Old_Time foi declarada, mas não inicializada no início e, em seguida, foi comparada com a variável New_Time para verificar se há uma nova barra. A Old_Time deveria estar vazia. Não sei se descrevi bem o problema, mas obrigado pela leitura.
 

Hi,


Da mesma forma, tenho o código de erro 4756 ao executar o teste e diz: "A solicitação de ordem de venda não pôde ser concluída".

Por favor, informe como resolver isso.


Muito obrigado