Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 880

 
Mikhail Rudyk:

o robô só está neste gráfico, mas negocia as mesmas opções que eles para os robôs

Insira esta linha.

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

colocar

mas não creio que reinicializar o erro ajude.

 
Mikhail Rudyk:

mas não creio que reinicializar o erro ajude.

Também.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 // eror=Trade.Buy(lot,symbolName,bid,0,0,comment); // закомментировать
                                 eror=OrderSend(symbolName, OP_BUY, lot, bid, 0, 0, 0, comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

Eu já fiz isso e funcionou.

Mas o fato do erro ainda não foi resolvido.

muito obrigado por sua ajuda

while(eror===falso&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError();
eror=Comércio.Comprar(lote,símboloNome,oferta,0,0,comentário);
passo++;
Sleep(200);
if(eror===falso)
{
Imprimir("erro - ",GetLastError());
if(GetLastError()==4754){OnInit();}
}
}

 
Mikhail Rudyk:

o fato do erro não está resolvido.

Foi por isso que sugeri esta opção.

 
fxsaber:

Foi por isso que sugeri esta opção.

Bem, vou tentar.

Mas por que a classe padrão não funciona?

 
Mikhail Rudyk:

Bem, vou tentar.

Mas por que a classe padrão não funciona?

Se a biblioteca alternativa funcionar, ficará claro onde cavar.

Não consigo reproduzir o problema com cada uma das bibliotecas.

 
Mikhail Rudyk:

Eu já fiz isso e funcionou.

while(eror===falso&&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
ResetLastError();
eror=Comércio.Comprar(lote,símboloNome,oferta,0,0,comentário);
passo++;
Sleep(200);
if(eror===falso)
{
Imprimir("erro - ",GetLastError());
if(GetLastError()==4754){OnInit();}
}
}

Isto não deve funcionar. 4754 ocorre quando o OrderTotal é maior que zero, mas o OrderSelect ou OrderGetTicket é estragado.

Isto é muito raro, mas não neste caso. O servidor/símbolo é tão específico aqui que a mesma coisa acontece com as posições, apenas com erro 4753.

Já preparado para ter que fazer ajustes na Bíblia alternativa, já que as situações que surgem puxam muita lógica para baixo. Para lá você envia uma ordem de mercado, ela chega ao servidor, cria uma posição e a fecha no mesmo milissegundo. E o terminal recebe informações retroativamente por causa do ping.

Fiquei agradavelmente surpreso por tudo ter funcionado perfeitamente.


Servidor/símbolo em si dodosil, não ocorreu erro.


SZY A pose não pode ser aberta manualmente, somente através da MQL.

 

Eu quis dizer que ajudou que o robô não foi enforcado

 
Mikhail Rudyk:

Eu quis dizer que isso ajudou o robô a não ser enforcado.

Em seguida, mostre o OnInit. Neste momento, parece um disparate.

Razão: