Некорректная котировка из терминала

 

Уважаемые форумчане, помогите, пожалуйста, разобраться!

Имеется скрипт и вот такой простой кусок кода:

open_real = iOpen( MAIN[zz], PERIOD_H1, iBarShift(MAIN[zz], PERIOD_H1, (StrToTime(str_data) + broker_sdvig)));

Скрипт запускается 1 раз в сутки.

При ПЕРВОМ запуске скрипта котировка в open_real всегда приходит неправильная, близкая к реальной, но неправильная. Откуда она берется - загадка...

При ВТОРОМ и всех последующих запусках котировка правильная.

Такое ощущение, что терминал просто "не успевает" за скриптом.

Может кто сталкивался с подобным? Подскажите, плиз, а то я уже всю голову сломал...

 
zayatsikot:

Уважаемые форумчане, помогите, пожалуйста, разобраться!

Имеется скрипт и вот такой простой кусок кода:

Скрипт запускается 1 раз в сутки.

При ПЕРВОМ запуске скрипта котировка в open_real всегда приходит неправильная, близкая к реальной, но неправильная. Откуда она берется - загадка...

При ВТОРОМ и всех последующих запусках котировка правильная.

Такое ощущение, что терминал просто "не успевает" за скриптом.

Может кто сталкивался с подобным? Подскажите, плиз, а то я уже всю голову сломал...


Значит, код неправильный, но он не виноват! Обращайтесь к автору скрипта, если сами не можете!
 
borilunad:

Значит, код неправильный, но он не виноват! Обращайтесь к автору скрипта, если сами не можете!


Значит, Вы просто не сталкивались с подобным. Код неправильный? ))) Ну-ну...

 
zayatsikot:


Значит, Вы просто не сталкивались с подобным. Код неправильный? ))) Ну-ну...

Вероятно, долго инициализируется,- не успевает до поступления нового тика. Не смертельно:)
 
tara:
Вероятно, долго инициализируется,- не успевает до поступления нового тика. Не смертельно:)


А можно как-то это вылечить?

Я пробовал делать небольшой цикл с паузами по 1 секунде. Не помогает...

Ощущение такое, что терминал не успевает "отдать" запрашиваемую котировку.

Есть какое-нибудь готовое решение, чтобы терминал отдавал котировку только когда они полностью загрузились?

 
zayatsikot:

Уважаемые форумчане, помогите, пожалуйста, разобраться!

Имеется скрипт и вот такой простой кусок кода:

Скрипт запускается 1 раз в сутки.

При ПЕРВОМ запуске скрипта котировка в open_real всегда приходит неправильная, близкая к реальной, но неправильная. Откуда она берется - загадка...

При ВТОРОМ и всех последующих запусках котировка правильная.

Такое ощущение, что терминал просто "не успевает" за скриптом.

Может кто сталкивался с подобным? Подскажите, плиз, а то я уже всю голову сломал...

Определить причину по одной строчке кода не представляется возможным (для нетелепатов). Поиск ВСЕГДА начинается с распринтовки передаваемых значений - этим и займитесь для начала.
 
А у вас график на H1 открыт? или как должны подгрузиться котировки.
 
TarasBY:
Определить причину по одной строчке кода не представляется возможным (для нетелепатов). Поиск ВСЕГДА начинается с распринтовки передаваемых значений - этим и займитесь для начала.


Спасибо за ответ.

Если я напишу 10 строчек, например так:

int start()
  {
   string MAIN[zz] = ...
   string str_data = ...
   int broker_sdvig = ...

   double open_real = iOpen( MAIN[zz], PERIOD_H1, iBarShift(MAIN[zz], PERIOD_H1, (StrToTime(str_data) + broker_sdvig)));

   print (open_real);
   return(0);
  }

то сразу станет легче?

Была у меня такая история с моим авто лет 15 назад. Разные "мастера" что-то тестировали, долго вели ПОИСК, небесплатно кстати... А потом появился чел, который с проблемой сталкивался. Через 5 минут проблемы не стало.

Я знаю как вести поиск и проблему в принципе смогу решить сам, только:

1) зачем изобретать велосипед?

2) зачем нужен форум?

 
splxgf:
А у вас график на H1 открыт? или как должны подгрузиться котировки.


Нет, не открыт. Так ведь я не для текущего графика котировку запрашиваю (для этого есть массив Open[]), а для указанного параметром MAIN[zz].

Хотя какая-то логика в этом есть. Фактически, если предположить, что есть некое место (типа буфера), куда подгружаются котировки, то первый проход скрипта их туда подгружает (но не считывает), а второй - считывает.

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

 

Котировки начинают подгружаться только в момент первого обращения... Так что первое возвращаемое значение может быть не совсем корректным.

Из простых подручных вариантов держать на графике мультитаймфреймный/валютный индикатор, за счет его работы котировки будут в актуальном состоянии и полной готовности.

либо ловить и обрабатывать ошибку

4066

ERR_HISTORY_WILL_UPDATED

Запрошенные исторические данные в состоянии обновления

 
splxgf:

Котировки начинают подгружаться только в момент первого обращения... Так что первое возвращаемое значение может быть не совсем корректным.

Из простых подручных вариантов держать на графике мультитаймфреймный/валютный индикатор, за счет его работы котировки будут в актуальном состоянии и полной готовности.

либо ловить и обрабатывать ошибку

4066

ERR_HISTORY_WILL_UPDATED

Запрошенные исторические данные в состоянии обновления


Разумно. Первый вариант не мой случай, т.к. графиков много, а скрипт может обратиться к любому. Держать все графики открытыми с запущенным индикатором нмв не совсем красивое решение.

А второй вариант обязательно попробую и напишу что из этого вышло.

Спасибо.

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