Цитата Сообщение от daolien@mail.ru Посмотреть сообщение
У меня проблема в том, что в скрипте нельзя реализовать потиковые функции, какие используются в советниках и индикаторах. Поэтому функция для получения данных, которая должна исполняться потиково у меня просто void, исполняется 1 раз при работе скрипта и выглядит просто вот так:
void CheckVOLUMES ()
{
VOLUMES_SetData();
VOLUMES_GetData();
if (VOLUMES_INIT) {Alert(Time[3]," ",DELTA_by_index(3));} // <-- for testing purposes
// VOLUMES_INIT is a signal that we have first package of volumes
}
Конструкции while, for для получения данных входят в бесконечную петлю или вызывают краш (зависит от задержки в 5 сек). VOLUMES_INIT всегда возвращает false. Вопросы: как должна выглядеть функция получения данных для скрипта, если нельзя использовать в нем потиковые функции? Где прописывать параметр под поиск конкретного бара в истории? Я предположил, что это указывается в массиве Time[], и во всех функциях описанных Вами меняю Time[0] на нужное мне число, для эксперимента Time[3].
Volumes_SetData - дает задачу для DLL скачать данные для данного индикатора

Volumes_GetData - опрашивает DLL на предмет того, скачаны ли данные из предыдущего запроса, и если скачаны установит volumes_init в значение True. Volumes_GetData действует асинхронно, то есть после _SetData надо опрашивать DLL каждые 100-200 милисекунд на предмет получения данных. Сами данные в индикатор не появятся, - только через функцию опроса DLL (Volumes_GetData). Формально Вы можете это делать потиково.

Делать потиково SetData не нужно.

p.s. для отсылки и опроса данных Вы должны обязательно установить indicator_client

indicator_client - состоит из букв CDPA и четыре цифры которые дают уникальный идентификатор индикатора. Теоретически, при известном идентификаторе, можно SetData делать в одном индикаторарое, а получать данные в другом.

// DO NOT CHANGE THIS CODE & DATA
do
{
indicator_client = "CDPA" + StringSubstr(DoubleToString(TimeLocal(),0),7,3)+"" +DoubleToStr(MathAbs((MathRand()+3)%10),0);
} while (GlobalVariableCheck(indicator_client));
GlobalVariableTemp(indicator_client);