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

 

Подскажите как справиться с зависанием терминала

код простой, но сильно грузит

   for(int i=limit;i>=0;i--)
     {
      RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i);
      RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,MA_Period,0,MODE_SMA,i);
     }
 
@Alexey Viktorov@Igor Makanu спасиб
 
Alexey Viktorov:

Проще и надёжней поставить флаг первого запуска в OnTick()

Надо чтоб расчеты и отрисовку делал сразу, даже, к примеру, в выходной.

 
Igor Makanu:

что произойдет не буду гадать, первое, что вижу - вот Вы сделали паузу чтобы получить в OnInit() значения индикатора - что будет если в это время юзер переключит ТФ?

ЗЫ: а как поведет себя Ваш код если запустить эксперт, затем закрыть терминал и опять открыть терминал с уже запущенным советником?

эти варианты учитываю

 

прошу напомнить банальную вещь. У меня советник в тестер нормально открывает-закрывает ордера. Сейчас на демо тоже неделю уже гоняю в целом всё как надо. Но в двух случаях при открытии второго ордера(мартинского) не закрыл оба при достижении положительного баланса, а только один, второй балтался пока тейк не поймал. Посмотрел журнал - там была "реквотирована" цена. Не должно вроде быть проблем и должно все равно закрыть, но вот так, не закрыл. 

Так вот,  не доводилось писать функцию ОТПРАВКИ (ПОВТОРНОЙ ОТПРАВКИ) ПОДТВЕРЖДЕНИЯ ЗАКРЫТИЯ ОРДЕРОВ в случае наступления условия. Накиньте, пожалуйста как эту банальность прописать. Спасибо. 

 
Порт-моне тв:

прошу напомнить банальную вещь. У меня советник в тестер нормально открывает-закрывает ордера. Сейчас на демо тоже неделю уже гоняю в целом всё как надо. Но в двух случаях при открытии второго ордера(мартинского) не закрыл оба при достижении положительного баланса, а только один, второй балтался пока тейк не поймал. Посмотрел журнал - там была "реквотирована" цена. Не должно вроде быть проблем и должно все равно закрыть, но вот так, не закрыл. 

Так вот,  не доводилось писать функцию ОТПРАВКИ (ПОВТОРНОЙ ОТПРАВКИ) ПОДТВЕРЖДЕНИЯ ЗАКРЫТИЯ ОРДЕРОВ в случае наступления условия. Накиньте, пожалуйста как эту банальность прописать. Спасибо. 

if(GetLastError()==138)OrderClose(...);
 или увеличь проскальзывание
 
MakarFX:
 или увеличь проскальзывание

благодарю за ответ. А почему 138???? Это номер ошибки? И на сколько увеличить проскальзывание (поясните пожалуйста смысл увелечения). Спасибо

 
Порт-моне тв:

А почему 138???? Это номер ошибки?

Да

Порт-моне тв:

И на сколько увеличить проскальзывание (поясните пожалуйста смысл увелечения).

решать тебе, чем больше slippage меньше реквотов

 
MakarFX:

Подскажите как справиться с зависанием терминала

код простой, но сильно грузит

Странно...

Сделал через int start() вместо OnCalculate и не виснет вообще

Почему???

 
Andrey Sokolov:

Надо чтоб расчеты и отрисовку делал сразу, даже, к примеру, в выходной.

Индикаторы работают в одном потоке, если один ждет, то и все остальные ждут, вполть до зависания терминала.
При старте МТ, инициализация индикатора (-ов), может происходить до инициализации переменных терминала, то есть зависание поймать раз плюнуть.

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