Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 112

 
Alexey Kozitsyn:
Posso vedere il codice?
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
 
Maksym Mudrakov:
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
La prima cosa che farei è aggiungere #property strict, correggere qualsiasi errore/avvertimento (se c'è) e sostituire init() e start() con OnInit() e OnTick().
 
Alexey Kozitsyn:
La prima cosa che farei è aggiungere #property strict, correggere qualsiasi errore/avvertimento (se c'è) e sostituire init() e start() con OnInit() e OnTick().
Grazie!

Ho 5 errori e 83 avvertimenti ))))
 
Maksym Mudrakov:
Grazie!

Sono usciti 5 errori e 83 avvertimenti ))))
Provate a scrivere in una lingua "nuova" e ci saranno meno errori difficili da trovare.
 
Alexey Kozitsyn:
Provate a scrivere in una lingua "nuova" e ci saranno meno errori difficili da trovare.
Mi sono imbattuto in una costruzione simile nel tutorial di MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
Possiamo usare anche la "nuova" lingua o c'è una soluzione più moderna?
 
Maksym Mudrakov:
Mi sono imbattuto in una costruzione simile nel tutorial di MQL4:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
può essere applicato anche nella "nuova" lingua o c'è una soluzione più moderna?
È in uno script o in un Expert Advisor?
 
Alexey Kozitsyn:
È nella sceneggiatura o nell'esperto?
Nell'esperto
 
Maksym Mudrakov:
nell'esaminatore.
Ehm... poi dipende da cosa sta succedendo lì nel codice principale. Se inviare un ordine è una cattiva opzione!
 
Alexey Kozitsyn:
Ehm... allora dipende da cosa sta succedendo nel codice principale. Se inviare un ordine è male!
Sì, l'invio di un ordine avviene. Non mi è chiaro se le quotazioni debbano essere aggiornate forzatamente, nel caso in cui l'Expert Advisor sia in esecuzione nella finestra di uno strumento di trading, ma invii un ordine per un altro strumento di trading. Se, per esempio, le quotazioni per EURUSD non vengono aggiornate, e allo stesso tempo si ricevono le nuove quotazioni per GBPUSD. E se il mio Expert Advisor viene eseguito su EURUSD, e non eseguoRefreshRates(), allora l'Expert Advisor non invierà un ordine su GBPUSD, finché le quotazioni su EURUSD non saranno aggiornate?
 
Maksym Mudrakov:
Sì, l'ordine è stato inviato. Non mi è chiaro se le quotazioni devono essere aggiornate obbligatoriamente nel caso in cui l'EA venga lanciato nella finestra di un simbolo ma venga inviato un ordine per un altro simbolo. Se, per esempio, le quotazioni per EURUSD non vengono aggiornate, e allo stesso tempo si ricevono le nuove quotazioni per GBPUSD. E se il mio Expert Advisor viene eseguito su EURUSD, e non eseguoRefreshRates(), allora l'Expert Advisor non invierà un ordine su GBPUSD, finché le quotazioni su EURUSD non saranno aggiornate?

Ci sono diversi modi per ottenere i prezzi attuali:

1. Per qualsiasi simbolo: se volete ottenere prezzi correnti garantiti, chiamate SymbolInfoDouble() con gli identificatori corretti prima di usarli.

2. Per il simbolo corrente, puoi anche ottenere i prezzi attuali attraverso le variabili predefinite Bid e Ask. Questi possono diventare obsoleti, quindi se la funzione OnTick() è in esecuzione da molto tempo, dovreste aggiornarli usando RefreshRates().

Motivazione: