Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 112

 
Alexey Kozitsyn:
Можно код увидеть?
...
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[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
Первое, что я бы сделал - добавил #property strict, поправил бы все ошибки/предупреждения (если появятся) и заменил функцию init() и start() на OnInit() и OnTick(). 
 
Alexey Kozitsyn:
Первое, что я бы сделал - добавил #property strict, поправил бы все ошибки/предупреждения (если появятся) и заменил функцию init() и start() на OnInit() и OnTick(). 
Спасибо!

Вылезло 5 ошибок и 83 предупреждения )))
 
Maksym Mudrakov:
Спасибо!

Вылезло 5 ошибок и 83 предупреждения )))
Старайтесь писать на "новом" языке и трудноуловимых ошибок будет меньше.
 
Alexey Kozitsyn:
Старайтесь писать на "новом" языке и трудноуловимых ошибок будет меньше.
В учебнике по MQL4 встретил такую конструкцию:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
на "новом" языке можно тоже применить или есть уже более современное решение?
 
Maksym Mudrakov:
В учебнике по MQL4 встретил такую конструкцию:

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
на "новом" языке можно тоже применить или есть уже более современное решение?
Это в скрипте или эксперте?
 
Alexey Kozitsyn:
Это в скрипте или эксперте?
в эксперте
 
Maksym Mudrakov:
в эксперте
Эм... тогда смотря что там происходит в основном коде. Если отправка ордера - плохой вариант!
 
Alexey Kozitsyn:
Эм... тогда смотря что там происходит в основном коде. Если отправка ордера - плохой вариант!
да, отправка ордера происходит. Только мне не до конца понятно, нужно ли обновлять принудительно котировки в случае, если эксперт запущен в окне одного торгового инструмента, а отправляет ордер по другому торговому инструменту. Если, например, по EURUSD котировки не обновляются, а в это время котировки по GBPUSD поступают новые. И если эксперт запущен на EURUSD и я не делаю RefreshRates(), то эксперт не будет посылать ордер по  GBPUSD, пока не обновятся котировки по EURUSD?
 
Maksym Mudrakov:
да, отправка ордера происходит. Только мне не до конца понятно, нужно ли обновлять принудительно котировки в случае, если эксперт запущен в окне одного торгового инструмента, а отправляет ордер по другому торговому инструменту. Если, например, по EURUSD котировки не обновляются, а в это время котировки по GBPUSD поступают новые. И если эксперт запущен на EURUSD и я не делаю RefreshRates(), то эксперт не будет посылать ордер по  GBPUSD, пока не обновятся котировки по EURUSD?

Есть несколько способов получить текущие цены:

1. Для любого символа: если хотите получить гарантировано текущие цены - перед их использованием вызывайте функцию SymbolInfoDouble() c нужными идентификаторами.

2. Для текущего символа также можно получить текущие цены через предопределенные переменные Bid и Ask. Вот как раз они могут устареть, поэтому если долго выполняется функция OnTick() - то их следует обновить посредством RefreshRates().

Причина обращения: