Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 112
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Можно код увидеть?
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[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
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().
Вылезло 5 ошибок и 83 предупреждения )))
Спасибо!
Вылезло 5 ошибок и 83 предупреждения )))
Старайтесь писать на "новом" языке и трудноуловимых ошибок будет меньше.
start() // Специальная функция start()
{
while(!IsStopped()) // До тех пор, пока пользователь..
{ // ..не прекратит исполнение программы
RefreshRates(); // Обновление данных
//......................Здесь указывается основной код программы
Sleep(5); // Небольшая пауза
}
return; // Управление возвращается терминалу
}
//--------------------------------------------------------------------
В учебнике по MQL4 встретил такую конструкцию:
start() // Специальная функция start()
{
while(!IsStopped()) // До тех пор, пока пользователь..
{ // ..не прекратит исполнение программы
RefreshRates(); // Обновление данных
//......................Здесь указывается основной код программы
Sleep(5); // Небольшая пауза
}
return; // Управление возвращается терминалу
}
//--------------------------------------------------------------------
Это в скрипте или эксперте?
в эксперте
Эм... тогда смотря что там происходит в основном коде. Если отправка ордера - плохой вариант!
да, отправка ордера происходит. Только мне не до конца понятно, нужно ли обновлять принудительно котировки в случае, если эксперт запущен в окне одного торгового инструмента, а отправляет ордер по другому торговому инструменту. Если, например, по EURUSD котировки не обновляются, а в это время котировки по GBPUSD поступают новые. И если эксперт запущен на EURUSD и я не делаю RefreshRates(), то эксперт не будет посылать ордер по GBPUSD, пока не обновятся котировки по EURUSD?
Есть несколько способов получить текущие цены:
1. Для любого символа: если хотите получить гарантировано текущие цены - перед их использованием вызывайте функцию SymbolInfoDouble() c нужными идентификаторами.
2. Для текущего символа также можно получить текущие цены через предопределенные переменные Bid и Ask. Вот как раз они могут устареть, поэтому если долго выполняется функция OnTick() - то их следует обновить посредством RefreshRates().