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

 
Preciso de ajuda, não consigo corrigir um bug no Expert Advisors, quero escrever o tempo para entrar no mercado e sair para poder alterar as configurações,
Arquivos anexados:
 
michael sedgley:
Com todas as alterações na programação MQL5, é necessária uma versão atualizada desse código passo a passo. Se eu copiar esse código, ele não será mais compilado.

Olá, Michael,

Obrigado por seu comentário. Analisarei sua sugestão e, se for necessária alguma atualização dos códigos, ela será disponibilizada em breve.

 

Por que o código de erro de saída :10030?

Arquivos anexados:
2.png  74 kb
 

ajuda, alguém aqui ?


Por que o código de erro de saída :10030?

 

Primeiramente, obrigado pelo artigo, ele está me ajudando a começar a programar com o mql5.

Experimentei seu código e há uma parte do código no OnInit() que não entendo a finalidade:

//--- Vamos lidar com pares de moedas com preços de 5 ou 3 dígitos em vez de 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

Essa parte modifica os valores dos pibs de take profit e stop loss, causando uma diferença entre os valores de entrada e os que realmente estão sendo usados.

No entanto, se eu remover as duas linhas dentro do if, frequentemente receberei o erro 10016 (paradas inválidas) ao enviar a ordem para o servidor. A primeira tentativa de colocar uma ordem funciona bem e recebo o erro 10009, mas na maioria das vezes seguinte recebo o erro 10016. Depurei o EA e todos os stop loss e take profit parecem estar corretos, com a diferença de serem stop loss 30 ou 300 e take profit 100 ou 1000 pibs acima ou abaixo do preço atual.

Não consigo encontrar o motivo pelo qual o servidor apresenta o erro 10016 quando o STP e o TKP não são multiplicados por 10.

Alguém pode me explicar por que o erro acontece ou o propósito de multiplicar por 10 quando _Digits é 5 ou 3?

Obrigado por sua ajuda.

 
an you please guguqiaqia:

ajuda, alguém aqui ?


Por que o código de erro de saída :10030?

Olá,

Você pode nos informar como o erro ocorre?

 

eshelios.sr:


Antes de mais nada, obrigado pelo artigo, ele está me ajudando a começar a programar o mql5.

Experimentei seu código e há uma parte do código no OnInit() que não entendo a finalidade:

//--- Vamos lidar com pares de moedas com preços de 5 ou 3 dígitos em vez de 4

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

Essa parte modifica os valores dos pibs de take profit e stop loss, causando uma diferença entre os valores de entrada e os que realmente estão sendo usados.

No entanto, se eu remover as duas linhas dentro do if, frequentemente receberei o erro 10016 (paradas inválidas) ao enviar a ordem para o servidor. A primeira tentativa de colocar uma ordem funciona bem e recebo o erro 10009, mas na maioria das vezes seguinte recebo o erro 10016. Depurei o EA e todos os stop loss e take profit parecem estar corretos, com a diferença de serem stop loss 30 ou 300 e take profit 100 ou 1000 pibs acima ou abaixo do preço atual.

Não consigo descobrir o motivo pelo qual o servidor apresenta o erro 10016 quando o STP e o TKP não são multiplicados por 10.

Alguém pode me explicar por que o erro acontece ou o propósito de multiplicar por 10 quando _Digits é 5 ou 3?

Obrigado por sua ajuda.

Olá,

Primeiro, de acordo com sua explicação, quando você removeu essas linhas de código, obteve um erro e quando não multiplicou os valores de stop loss/takeprofit por 10, obteve um erro? Acredito que isso tenha explicado que essas linhas de código são muito importantes.

Voltando ao artigo, ele explicou que essas linhas de código são necessárias se você estiver usando um gráfico com 5 dígitos decimais (0,XXXXX) ou 3 dígitos decimais (0,XXX) de pares de moedas.

Digits ou Digits()retorna o número de dígitos decimais que determinam a precisão do preço do símbolo do gráfico atual. Para um gráfico de preços de 5 ou 3 dígitos, multiplicamos o Stop Loss e o Take Profit por 10.

Veja os exemplos abaixo:

Preço com 5 dígitos decimais

5 - Preço com dígitos decimais

3 - Preço com dígitos decimais

3 - Preço com dígitos decimais

Espero que isso tenha respondido sua pergunta.

 
Samuel Olowoyo:

Olá,

Você pode nos informar como está ocorrendo o erro?

Etapa 1: faça o download desse código de amostra.

Etapa 2: compile-o no mql5.

Etapa 3: no mt5, abra o gráfico eurusd 1m e, em seguida, clique em "auto trading".

Etapa 4: defina o símbolo de quebra na linha de código 223, 224 etc...

Etapa 5: clique no botão "start debugging" (iniciar depuração) no mt5 e, em seguida, mostre esse erro.

 
 guguqiaqia:

Etapa 1: faça o download desse código de amostra.

Etapa 2: compile-o no mql5.

Etapa 3: no mt5, abra o gráfico eurusd 1m e, em seguida, clique em "auto trading".

Etapa 4: defina o símbolo de interrupção na linha de código 223, 224 etc...

Etapa 5: clique no botão iniciar depuração no mt5 e, em seguida, mostre esse erro.

Olá,

Obrigado por compartilhar suas etapas. Se eu puder levá-lo de volta ao código,

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());    // line 223
   ResetLastError();                                                                // line 224
   return;

Até onde sei, o código fez o que deveria fazer. Você recebeu o erro porque a ordem que tentou colocar NÃO FOI BEM SUCEDIDA e é isso que a linha 223 deveria fazer. Leia isto - https://www.mql5.com/pt/docs/constants/errorswarnings/enum_trade_return_codes - para saber o que significa o erro (na verdade, 10030 significa Invalidorder filling type ).

Para entender o que significa o tipo de preenchimento de ordem -ORDER_FILLING_FOK -

mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type  ( line 213 )

significa, leia https://www.mql5.com/pt/docs/constants/tradingconstants/orderproperties#enum_order_type_filling

Espero que isso tenha respondido sua pergunta.

 

Olá, Samuel,

Baixei o código, instalei-o e executei-o. Percebi que ele está abrindo ordens de compra e venda principalmente em todos os candles que atendem aos critérios (estou usando o H1 como timeframe).

Não fiz a depuração e percebi que algumas partes dos códigos não são acionadas. Vocês conseguem executar o EA corretamente com o código disponível para download?

Arquivos anexados:
screen.jpg  417 kb