Executando mais de uma EA de cada vez - página 2

 

Primeiro, certifique-se de ter inicializado todas as variáveis com algumas defaults significativas. Por exemplo, você está usando o BuyTicket antes que ele seja inicializado, para que ele possa ser qualquer valor na primeira execução .

Trecho do arquivo de referência MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

Portanto, na parte seguinte, adicione os padrões às variáveis:

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

E sim, a MQL4 tem bugs e peculiaridades, mas a maioria dos erros poderia ser evitada apenas pela leitura do básico no manual de referência.

Há também um artigo sobre bugs comuns nos programas MQL4. Verifique no topo do fórum, você encontrará o link.

 
drazen64:

Primeiro, certifique-se de ter inicializado todas as variáveis com algumas defaults significativas. Por exemplo, você está usando o BuyTicket antes que ele seja inicializado, para que ele possa ser qualquer valor na primeira execução .

Trecho do arquivo de referência MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

Portanto, na parte seguinte, adicione os padrões às variáveis:



Isso é verdade, no entanto, depende do uso. Às vezes você só quer declará-lo porque sabe de onde o valor será retirado, e às vezes você precisa inicializá-lo com algo, pois pode não funcionar corretamente se não for inicializado com valores padrão específicos.
 
deysmacro:

Isto é verdade, no entanto, depende do uso. Às vezes você só quer declará-lo porque sabe de onde o valor será tirado, e às vezes você precisa inicializá-lo com algo, pois pode não funcionar corretamente se não for inicializado com valores padrão específicos.


Ele não precisa inicializar as variáveis no local da definição, mas definitivamente deve inicializar as variáveis com algum valor antes de usá-las.

Se ele as usa antes da inicialização, o valor é imprevisível. Assim como seus erros. Antes de qualquer análise de código mais profunda, ele deve cuidar deste problema.

Os compiladores modernos levantam erros se você tentar usar variáveis não inicializadas. A MQL4 infelizmente não o faz, portanto o codificador deve ter certeza de que tudo está devidamente inicializado.

 
Você poderia apontar para ele 1 coisa que ele usa a var sem as devidas inicializações.
 
deysmacro:
Você poderia apontar para ele 1 coisa que ele usa a var sem as devidas inicializações.


Leia a segunda frase da primeira linha de https://www.mql5.com/en/forum/151167/page2#954612

Você poderia ler a resposta antes de criticá-la.

BTW, como você está ajudando aqui? Observações "inteligentes" não ajudam muito.

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

Eu li antes de postar o meu. Quero dizer, mostre-lhe uma coisa que se relaciona com a var e que a var não é inicializada corretamente.


Hehe. GumRai é melhor que isso. XD

 

Se entendi bem, você está dizendo que o fato de ele usar variáveis não inicializadas não é algo com que se preocupar só porque eu não indiquei exatamente o que poderia acontecer porque o BuyTicket e algumas outras variáveis contêm alguns valores desconhecidos quando o programa começa?

Bem, que assim seja. Deixe-o usar variáveis não-inicializadas. O que poderia dar errado?

 
Inicializei todas as variáveis como sugerido, bem como removi "==verdadeiro" das booleanas. Também removi todo o espaço do banco de dentro das linhas de código. Testei-o usando o depurador em dois símbolos diferentes - um no laptop e outro no PC por aproximadamente 2 horas e ambos funcionaram bem, vendendo, comprando e fechando nos horários corretos sem nenhum erro. Entretanto, acrescentei o EA aos outros 3 símbolos tanto no PC quanto no laptop, de modo que todos os 4 estavam trabalhando em ambos os terminais e todos começaram a falhar entradas e saídas a partir de então. No final do teste, em um terminal eu removi os EAs antes de fechar as posições abertas e no outro terminal eu removi os EAs após fechar as posições abertas. O terminal que ainda tinha posições abertas demorou muito tempo para remover os EAs, mas o terminal sem posições abertas removeu todos os 4 EAs imediatamente. O código revisado é afixado separadamente abaixo.
Razão: