Индексация массивов - просто жуть какая-то... Копирование одних и тех же данных в цикле... Создание новых хэндлов в цикле - слов нет...
Остальное даже глядеть расхотелось, извините
Про индексацию массивов не понял, в каких массивах вам не понравилась индексация? Данные в строчке 43 функцией CopyBuffer копируются хендлы на разных таймфреймах, с 1мин. по 4Н. Всего копируется 5 цен индикатора МА, по первым 5 барам, причём на каждой итерации как хендл, так и массив с 5 барами, обнуляется
ArrayFree(bufer_MA);
и хендл удаляется
IndicatorRelease(MA200); //Удаление хендла
. Если вы можете предложить алгоритм обработатки 274 инструментов и каждый из них на 6 таймфреймах как то иначе, буду рад Просто ветка вроде как называется -- Вопросы от начинающих. Будь я профи, наверное и вопросов у меня не возникало бы.
создание хендлов при различных ситуациях вроде не затратная, это просто указатель без предзагрузок? основная работа идет с CopyBuffer
нет необходимости удалять хендл в цикле, проверять может и нужно, у меня лично только при создании первого постоянно проблема, решается она Sleep(), чтобы подгрузился график или функцией предварительной подгрузки котировок
разработчикам стоило бы самим это решить, в OnInit не важна скорость, речь про первый индикатор с перебором 7 символов, ошибка всегда на разных итерациях выскакивает
----------
как работает создание хендла, в специально сработанном цикле необходима проверка наличия или просто очередное создание достаточно(т.е. перезапись)?
создание хендлов при различных ситуациях вроде не затратная, это просто указатель без предзагрузок? основная работа идет с CopyBuffer
нет необходимости удалять хендл в цикле, проверять может и нужно, у меня лично только при создании первого постоянно проблема, решается она Sleep(), чтобы подгрузился график или функцией предварительной подгрузки котировок
разработчикам стоило бы самим это решить, в OnInit не важна скорость, речь про первый индикатор с перебором 7 символов, ошибка всегда на разных итерациях выскакивает
----------
как работает создание хендла, в специально сработанном цикле необходима проверка наличия или просто очередное создание достаточно(т.е. перезапись)?
Это вы мне? Или это ваш вопрос к знатакам здешним?)))
voidOnStart()
{
int Target=6; //Количество тайм-фреймовint Counter_UP=0; //Счетчик нахождения цены над МАint Counter_DOWN=0;
int MA = 200; //Период МАdouble bufer_MA[]; //Буфер для хендлаENUM_TIMEFRAMES frame1[10]; //Битная маска тайм-фреймов//___________________int битная маска ENUM Массив таймфреймов__________________________________________
frame1[1]=1;
frame1[2]=5;
frame1[3]=15;
frame1[4]=30;
frame1[5]=16385;
frame1[6]=16388;
frame1[7]=16408;
frame1[8]=32769;
frame1[9]=49153;
//____________________________________________________________________________________________________________int KollSymbols = SymbolsTotal(true); //Колл. символов в маркет вотчAlert("Колл.Инстр = ",KollSymbols);
//---int MA200; //Переменная для хендлаfor(int i=0; i<KollSymbols; i++) //Перебераем все символы из маркет вотч
{
string symbol = SymbolName(i,true); //Выбираем имя символа из маркет вотч// Alert("symbol = ",symbol,"i= ",i);for(int I=1; I<=Target; I++) //Перебераем таймфреймы
{
MA200 = iMA(symbol,frame1[I],MA,0,MODE_EMA,PRICE_MEDIAN); //хендл на выбранном таймеCopyBuffer(MA200,0,TimeCurrent(),5,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного таймаArraySetAsSeries(bufer_MA,true); //Разворачиваем массив как в тайм-серии//Alert("Символ - ",symbol,"i= ",i);// Alert("Simbol = ",symbol," bufer_MA[1] = ",bufer_MA[1]);if(iClose(symbol,frame1[I],1) > bufer_MA[1]) //Если цена 1 баре, на выбранном символе и тайме, БОЛЬШЕ цены скользяхи на 1 баре
{
//Alert("iClose= ",iClose(symbol,frame1[I],1), " bufer_MA[1]= ",bufer_MA[1]);
Counter_UP++;
if(Counter_UP==Target)
Alert("Инструмент для наблюдения в покупки - ",symbol);
ArrayFree(bufer_MA); //Очистка буфера индикатора
}
else
{
ArrayFree(bufer_MA); //Очистка буфера индикатора
}
IndicatorRelease(MA200); //Удаление хендла
}
Counter_UP=0;
Counter_DOWN=0;
}
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
работает норм. И список из 22 инстр. обрабатывает достаточно долго мин 5. Хотя это странно. Основное время он тратит на запись хендла в массив. Итог профилирования
Вопрос. Почему так затратно по времени копирование 5 значений из хендла в массив, хотя копирование происходит 132 раза для 22инструментов из списка. То-есть для 273 инструментов понадобится копировать 1632 раза, причём с подгрузкой истории по всем инструментам на хард компа.
работает норм. И список из 22 инстр. обрабатывает достаточно долго мин 5. Хотя это странно. Основное время он тратит на запись хендла в массив. Итог профилирования
Вопрос. Почему так затратно по времени копирование 5 значений из хендла в массив, хотя копирование происходит 132 раза для 22инструментов из списка. То-есть для 273 инструментов понадобится копировать 1632 раза, причём с подгрузкой истории по всем инструментам на хард компа.
Если ничего не напутал.
Вроде работает нормально, если котировки закачаны, то не тормозит. Первый запуск очень долгий, видимо котировки скачивает.
//+------------------------------------------------------------------+voidOnStart()
{
int Target = 6; //Количество тайм-фреймовint Counter_UP = 0; //Счетчик нахождения цены над МАint Counter_DOWN = 0;
int MA = 200; //Период МАdouble bufer_MA[]; //Буфер для хендлаint MA200[][9]; //Переменная для хендлаstring symbol[];
ENUM_TIMEFRAMES frame1[9]; //Битная маска тайм-фреймов//___________________int битная маска ENUM Массив таймфреймов__________________________________________
frame1[0] = 1;
frame1[1] = 5;
frame1[2] = 15;
frame1[3] = 30;
frame1[4] = 16385;
frame1[5] = 16388;
frame1[6] = 16408;
frame1[7] = 32769;
frame1[8] = 49153;
//____________________________________________________________________________________________________________int KollSymbols = SymbolsTotal(true); //Колл. символов в маркет вотчPrint("Колл.Инстр = ", KollSymbols);
int res = 0;
for(int i = 0; i < KollSymbols; i++)
{
for(int I = 0; I < 9; I++) //Перебераем таймфреймы
{
ArrayResize(MA200, i + 1);
ArrayResize(symbol, i + 1);
symbol[i] = SymbolName(i, true); //Выбираем имя символа из маркет вотч
MA200[i][I] = iMA(symbol[i], frame1[I], MA, 0, MODE_EMA, PRICE_MEDIAN); //хендл на выбранном таймеif(MA200[i][I] == INVALID_HANDLE)
PrintFormat("Инвалид хэндл, символ %s, тайм %d", symbol[i], frame1[I]);
res++;
}
}
Print("Создано хэндлов = " + (string)res);
//---for(int i = 0; i < KollSymbols; i++)
{
for(int I = 0; I < 9; I++) //Перебераем таймфреймы
{
int size = CopyBuffer(MA200[i][I], 0, 1, 1, bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного таймаPrintFormat("Скопировано %d, символ %s, тайм %d", size, symbol[i], frame1[I]);
if(size > 0)
if(iClose(symbol[i], frame1[I], 1) > bufer_MA[0]) //Если цена 1 баре, на выбранном символе и тайме, БОЛЬШЕ цены скользяхи на 1 баре
{
Counter_UP++;
}
}
}
Print("Counter_UP = " + (string)Counter_UP);
}
//+------------------------------------------------------------------+
Смысл скрипта, перебрать каждый инструмент из маркет вотч на таймфреймах с 1мин до 4Н
Если бы я делал такое, то создал бы массив и хранил в нём прошлые данные, обновляя текущие. Это позволит избежать тяжёлые циклы и CopyBuffer. Всё будет летать.
Вроде работает нормально, если котировки закачаны, то не тормозит. Первый запуск очень долгий, видимо котировки скачивает.
Спасибо за отклик, и ваш вариант исполнения, поэксперементирую с ним)! Не понял только почему перед завершением программы не удаляете хендлы? Или они при завершении проги сами автоматом удаляются. Хотя оператива не освобождается судя по диспетчеру задач.
Если бы я делал такое, то создал бы массив и хранил в нём прошлые данные, обновляя текущие. Это позволит избежать тяжёлые циклы и CopyBuffer. Всё будет летать.
Индексация массивов - просто жуть какая-то... Копирование одних и тех же данных в цикле... Создание новых хэндлов в цикле - слов нет...
Остальное даже глядеть расхотелось, извините
Про индексацию массивов не понял, в каких массивах вам не понравилась индексация? Данные в строчке 43 функцией CopyBuffer копируются хендлы на разных таймфреймах, с 1мин. по 4Н. Всего копируется 5 цен индикатора МА, по первым 5 барам, причём на каждой итерации как хендл, так и массив с 5 барами, обнуляется
ArrayFree(bufer_MA);и хендл удаляется
. Если вы можете предложить алгоритм обработатки 274 инструментов и каждый из них на 6 таймфреймах как то иначе, буду рад Просто ветка вроде как называется -- Вопросы от начинающих. Будь я профи, наверное и вопросов у меня не возникало бы.
создание хендлов при различных ситуациях вроде не затратная, это просто указатель без предзагрузок? основная работа идет с CopyBuffer
нет необходимости удалять хендл в цикле, проверять может и нужно, у меня лично только при создании первого постоянно проблема, решается она Sleep(), чтобы подгрузился график или функцией предварительной подгрузки котировок
разработчикам стоило бы самим это решить, в OnInit не важна скорость, речь про первый индикатор с перебором 7 символов, ошибка всегда на разных итерациях выскакивает
----------
как работает создание хендла, в специально сработанном цикле необходима проверка наличия или просто очередное создание достаточно(т.е. перезапись)?
создание хендлов при различных ситуациях вроде не затратная, это просто указатель без предзагрузок? основная работа идет с CopyBuffer
нет необходимости удалять хендл в цикле, проверять может и нужно, у меня лично только при создании первого постоянно проблема, решается она Sleep(), чтобы подгрузился график или функцией предварительной подгрузки котировок
разработчикам стоило бы самим это решить, в OnInit не важна скорость, речь про первый индикатор с перебором 7 символов, ошибка всегда на разных итерациях выскакивает
----------
как работает создание хендла, в специально сработанном цикле необходима проверка наличия или просто очередное создание достаточно(т.е. перезапись)?
Это вы мне? Или это ваш вопрос к знатакам здешним?)))
Это вы мне? Или это ваш вопрос к знатакам здешним?)))
про создание и удаление хендлов,
это работает, интересует как будет правильней, надеюсь разработчики скажут
работает норм. И список из 22 инстр.
обрабатывает достаточно долго мин 5. Хотя это странно. Основное время он тратит на запись хендла в массив. Итог профилирования 
Вопрос. Почему так затратно по времени копирование 5 значений из хендла в массив, хотя копирование происходит 132 раза для 22инструментов из списка. То-есть для 273 инструментов понадобится копировать 1632 раза, причём с подгрузкой истории по всем инструментам на хард компа.
про создание и удаление хендлов,
это работает, интересует как будет правильней, надеюсь разработчики скажут
Вот я как раз этим занимаюсь, в коде выше посмотрите, тоже есть вопросы))
Итак, оказалось что скрипт
работает норм. И список из 22 инстр. обрабатывает достаточно долго мин 5. Хотя это странно. Основное время он тратит на запись хендла в массив. Итог профилирования
Вопрос. Почему так затратно по времени копирование 5 значений из хендла в массив, хотя копирование происходит 132 раза для 22инструментов из списка. То-есть для 273 инструментов понадобится копировать 1632 раза, причём с подгрузкой истории по всем инструментам на хард компа.
Если ничего не напутал.
Вроде работает нормально, если котировки закачаны, то не тормозит. Первый запуск очень долгий, видимо котировки скачивает.
Смысл скрипта, перебрать каждый инструмент из маркет вотч на таймфреймах с 1мин до 4Н
Если бы я делал такое, то создал бы массив и хранил в нём прошлые данные, обновляя текущие. Это позволит избежать тяжёлые циклы и CopyBuffer. Всё будет летать.
Если ничего не напутал.
Вроде работает нормально, если котировки закачаны, то не тормозит. Первый запуск очень долгий, видимо котировки скачивает.
Спасибо за отклик, и ваш вариант исполнения, поэксперементирую с ним)! Не понял только почему перед завершением программы не удаляете хендлы? Или они при завершении проги сами автоматом удаляются. Хотя оператива не освобождается судя по диспетчеру задач.
Если бы я делал такое, то создал бы массив и хранил в нём прошлые данные, обновляя текущие. Это позволит избежать тяжёлые циклы и CopyBuffer. Всё будет летать.
Спасибо! Подумаю и в этом направлении)