[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 534

 
Alex007:
Dato che sei stato cacciato da un thread separato, provo a chiederti qui, perché non ho trovato una domanda simile:

Faccio trading con il mio Expert Advisor su MT4. Tutto andava bene prima di questo post. Oggi ho deciso di disabilitare l'EA, ho premuto l'apposito pulsante sulla Toolbar e invece dello smiley c'era una croce sul grafico. E all'improvviso si è aperto un accordo. Uno, due... sempre di più. Ho aperto le impostazioni dell'expert advisor e ho abilitato OnlyBuy nella finestra corrispondente (l'EA è ancora disabilitato). L'affare è stato fatto di nuovo, ed è stata una vendita inversa! Poi riapro le impostazioni e disabilito la sua capacità di commerciare (deselezionata). Anche questo non funziona. L'Expert Advisor vive una specie di vita propria. Contatto il supporto e ottengo la seguente risposta: " Questo è molto probabilmente un problema con il tuo Expert Advisor. Per favore, cancella il tuo terminale e installane uno nuovo dal nostro sito senza installare altri EA.
Cari consiglieri esperti, potreste per favore dirci la vostra opinione su questo argomento, specialmente sulla parte evidenziata. Soprattutto mi piace la chiara dicitura "molto probabilmente". Come può essere e qual è il problema?

Non sei stato cacciato, ho gentilmente accennato al fatto che non c'erano abbastanza dati.

"La mia macchina non parte. Ho chiamato il concessionario dove l'ho comprata, mi hanno detto di chiamare il produttore" - sembra giusto

 
Alex007:
Dato che sono stato cacciato da un thread separato, proverò a chiederlo qui, perché non ho trovato una domanda simile:

Faccio trading con il mio Expert Advisor su MT4. Tutto andava bene prima di questo post. Oggi ho deciso di disabilitare l'EA, ho premuto l'apposito pulsante sulla Toolbar e invece dello smiley c'era una croce sul grafico. E all'improvviso si è aperto un accordo. Uno, due... sempre di più. Ho aperto le impostazioni dell'expert advisor e ho abilitato OnlyBuy nella finestra corrispondente (l'EA è ancora disabilitato). L'affare è stato fatto di nuovo, ed è stata una vendita inversa! Poi riapro le impostazioni e disabilito la sua capacità di commerciare (deselezionata). Anche questo non funziona. L'Expert Advisor vive una specie di vita propria. Contatto il supporto e ottengo la seguente risposta: " Questo è molto probabilmente un problema con il tuo EA. Per favore, cancella il tuo terminale e installane uno nuovo dal nostro sito senza installare altri EA.
Cari consiglieri esperti, potreste per favore dirci la vostra opinione su questo argomento, specialmente sulla parte evidenziata. Soprattutto mi piace la chiara dicitura "molto probabilmente". Come può essere e qual è il problema?
Non si può dire cosa c'è di sbagliato senza rivedere il codice. La prima cosa che mi viene in mente è che deinit() ha una condizione per aprire un trade dopo che il programma è stato chiuso. Da dove hai preso una tale EA?
 
Mi dispiace - non ci sono miracoli! Non ho notato come due MT hanno aperto. Uno dei due era in commercio e l'altro era in commercio in pace. È una sfortuna anche per i vecchi tempi - sembra che io sia bravo con i computer, ed ecco qualcosa come questo ....
 
VladislavVG:

Nota - in MKL4 le priorità sono leggermente diverse da quelle in C, leggi comune. Pertanto - è meglio mettere le parentesi.

Grazie! Ora capisco perché le parentesi.

Ecco una vecchia storia. Ho finito il robot con una canzone di mia composizione. Spero che funzioni. E improvvisamente '\fine_del_programma' - parentesi sinistra sbilanciata C:\TeleTRADE\experts\variantprogram.mq4 (365, 1)

Come sempre, ho guardato tra le parentesi, mi dispiace. Non mi sembra di vedere nulla. Cosa può essere ancora?

int Profit=0;                                
    for (i=0; i<OrdersHistoryTotal(); i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
   {
    if(OrderSymbol()!= Symbol()) continue;
    if(OrderType()>=2)continue;
    Profit+=OrderProfit();     }}
    
 
 
 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol(!= Symbol()) continue;
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
//+------------------------------------------------------------------+

//------- :  Коды ошибок
string ErrorDescript(int error_code){string error_string;switch(error_code){
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                               
 

Ugh! ! Penso di aver tolto la parentesi in più.

 
Dimka-novitsek:

Grazie! Ora so perché le parentesi.

...

Gente, potete dirmi se questo è permesso o mi sono perso qualcosa?

if(OrderType()>=2)continue;
 
paladin80:

Gente, potete dirmi se questo è permesso o mi sono perso qualcosa?


Perché no, è un normale int

Un'altra questione è che in qualsiasi build successiva i codici per BUY e SELL potrebbero cambiare e il codice smetterà di funzionare improvvisamente

 
ilunga:

Perché no, è un normale int

Un'altra questione è che in qualsiasi build successiva i codici per BUY e SELL potrebbero cambiare e il codice smetterà di funzionare improvvisamente

Sì, questo è logico. Così va meglio:

if(OrderType()=OP_BUY || OrderType()=OP_SELL) continue;
Dimych, se il compilatore mostra un posto dove manca una parentesi, non significa che è il posto dove cercare. A volte se una parentesi è posizionata erroneamente (o manca) all'inizio del codice, l'errore apparirà alla fine. Quindi potete cercarlo nel commento /* ... */.
 
paladin80:

Sì, questo ha senso. Allora è meglio così:

Dimy, se il compilatore mostra un posto dove manca una parentesi, non significa che dobbiamo guardare lì. A volte se una parentesi è posizionata erroneamente (o manca) all'inizio del codice, l'errore apparirà alla fine. Quindi cercatelo commentando il codice /* ... */.

Solo non così-) "=" non è una condizione, ma un'operazione di assegnazione.

Allora dovrebbe essere così:

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;

o meglio ancora così (per non doverlo usare due volte)

int type = OrderType(); 
if(type!=OP_BUY && type!=OP_SELL) continue;
 
ilunga:

Non come questo-) "=" non è una condizione, ma un'operazione di assegnazione.

Allora fai così:

O meglio ancora, come questo (così non dovrai andarci due volte).

Il tuo è meglio, ho dimenticato di mettere !) Probabilmente dovrebbe essere "||" invece di "&&".
Motivazione: