1247099400 - это соответствует времени 1 бара в окне истории котировок EURUSD M1. В тесторе, когда расчет индикатора достигает предпоследнего бара т.е. 1 по индексации терминала (1247099400== Time[0]), перед тем, как тестор остановится, это условие должно срабатывать, и до того, как индикатор отключится, сохранить сформированный массив. И как Вы поступаете в подобных случаях и сохраняете расчетные значения при работе в тесторе?
Не знаю как реализовано в МТ, но если компилятор пропускает, наверное, допустимо. НО в языках программировани есть понятие lvalue & rvaluе - то бишь "левого" и "правого" значения. Это берется относительно оператора присваивания. То есть, выражение
1247099400 = Time[0];
будет неверным в том смысле, что константе нельзя присвоить значение, которое хранится в элементе массива Time[0].
Выражение же Time[0] = 1247099400; в общем смысле (без учета специфики переменной Time[]) будет корректно: значение можно сохранить в элементе массива. Это лирическое отступление в том смысле, что, общности ради, стоит придерживаться правил и в операторах сравнения.
По поводу сохранения значений перед завершением работы индикатора - есть функция деинит, которая вызывается один раз перед выгрузкой индикатора/советника/скрипта - сохраняю в ней все, что мне необходимо.
Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.
По поводу сохранения значений перед завершением работы индикатора - есть функция деинит, которая вызывается один раз перед выгрузкой индикатора/советника/скрипта - сохраняю в ней все, что мне необходимо.
Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.
Удачи.
Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?
Что касается проблемы обрыва связи, то в соответствии с создаваемой стратегией мне нужен именно такой вариант, а не полный пересчет по приходу нового бара. Если такого варианта нет, придется пока делать индикатор без учета разрыва связи.
Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.
Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?
Что касается проблемы обрыва связи, то в соответствии с создаваемой стратегией мне нужен именно такой вариант, а не полный пересчет по приходу нового бара. Если такого варианта нет, придется пока делать индикатор без учета разрыва связи.
Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.
У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.
У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.
Вопрос касается индикатора при визуализации его работы, а не эксперта, у меня эксперт, в этом случае, включен только для работы тестора, и не связан с индикатором который я отлаживаю.
Может быть кто-то выводил коэффициент соотношения инструментов и таймфреймов?
Я пробовал работать над этой областью,.... и столкнулся с неимоверной проблеммой..... даже не одной,... при таком глобальном анализе комп просто зависает с записью в файл,... а что косаеться инструментов,... на разных парах и разных таймах, то тут еще хуже,... дело в том что на каждой паре инструмент работает по своему,.. и отсюда значения коэффициента практически невозможно подобрать правильно, ну мне пока не удалось,..... только с расхождениями коэф.одних и тех же инструментов по разным парам.
Что-то у меня никак не получается сохранить массив при работе тестора.
Загружаю индикатор в режиме визуализации,
устанавливаю счетчик баров mc=0; при каждом новом баре занашу в массив последнее расчетное значение одной из индикаторных линий:
TS[mc]= GM2[nq]; по комменту вижу, что накопление значений в массив производится.
Далее на предпоследнем баре графика пытаюсь сохранить массив
но ничего не получается. Подскажите, пожалуйста, как мне это сделать!
попробуйте вот такую конструкцию:
double TS[];string files="имя";int han,mc=0;int init(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
han =FileOpen(files+".csv", FILE_WRITE,",");return(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+int deinit(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~if(han>0){for(int i=0;i<mc;i++)FileWrite(han, TS[i]);FileClose(han);}return(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+int start(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ArrayResize(TS, mc+1);int i=mc;while(i>=0){TS[i+1]=TS[i];
i--;}
mc++;//................................//// .. высчитываем новый TS[0] .. X ////................................
TS[0]= X;// FileWrite(han, TS[0]); // другой вариант записи при нём содержимое // deinit() нужно удалитьreturn(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+
в принципе открывать файл можно и в deinit()
но такая конструкция универсальна, можно писать в файл и в промежутке между init() и deinit() тобиш в start() не мучаясь с сохранением предидущего значения.
Потом ещё можно не сохранять значения в буфер, а сохранять в переменные и переменные записывать в файл в конце start().
В общем вариантов много выбирайте какой вам больше подходит.
double TS;// переменная для хранения текущего параметраstring files="имя";int han;int init(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
han =FileOpen(files+".csv", FILE_WRITE,",");return(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+int deinit(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~if(han>0)FileClose(han);return(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+int start(){//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// .. высчитываем новый TS .. X
TS= X;if(han>0)FileWrite(han, TS);// другой вариант записиreturn(0);}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+------------------------------------------------------------------+
1247099400 - это соответствует времени 1 бара в окне истории котировок EURUSD M1. В тесторе, когда расчет индикатора достигает предпоследнего бара т.е. 1 по индексации терминала (1247099400== Time[0]), перед тем, как тестор остановится, это условие должно срабатывать, и до того, как индикатор отключится, сохранить сформированный массив. И как Вы поступаете в подобных случаях и сохраняете расчетные значения при работе в тесторе?
Не знаю как реализовано в МТ, но если компилятор пропускает, наверное, допустимо. НО в языках программировани есть понятие lvalue & rvaluе - то бишь "левого" и "правого" значения. Это берется относительно оператора присваивания. То есть, выражение
1247099400 = Time[0];
будет неверным в том смысле, что константе нельзя присвоить значение, которое хранится в элементе массива Time[0].
Выражение же Time[0] = 1247099400; в общем смысле (без учета специфики переменной Time[]) будет корректно: значение можно сохранить в элементе массива. Это лирическое отступление в том смысле, что, общности ради, стоит придерживаться правил и в операторах сравнения.
По поводу сохранения значений перед завершением работы индикатора - есть функция деинит, которая вызывается один раз перед выгрузкой индикатора/советника/скрипта - сохраняю в ней все, что мне необходимо.
Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.
Удачи.
По поводу сохранения значений перед завершением работы индикатора - есть функция деинит, которая вызывается один раз перед выгрузкой индикатора/советника/скрипта - сохраняю в ней все, что мне необходимо.
Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.
Удачи.
Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?
Что касается проблемы обрыва связи, то в соответствии с создаваемой стратегией мне нужен именно такой вариант, а не полный пересчет по приходу нового бара. Если такого варианта нет, придется пока делать индикатор без учета разрыва связи.
Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.
Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?
Что касается проблемы обрыва связи, то в соответствии с создаваемой стратегией мне нужен именно такой вариант, а не полный пересчет по приходу нового бара. Если такого варианта нет, придется пока делать индикатор без учета разрыва связи.
Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.
У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.
У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.
Вопрос касается индикатора при визуализации его работы, а не эксперта, у меня эксперт, в этом случае, включен только для работы тестора, и не связан с индикатором который я отлаживаю.
Может быть кто-то выводил коэффициент соотношения инструментов и таймфреймов?
Я пробовал работать над этой областью,.... и столкнулся с неимоверной проблеммой..... даже не одной,... при таком глобальном анализе комп просто зависает с записью в файл,... а что косаеться инструментов,... на разных парах и разных таймах, то тут еще хуже,... дело в том что на каждой паре инструмент работает по своему,.. и отсюда значения коэффициента практически невозможно подобрать правильно, ну мне пока не удалось,..... только с расхождениями коэф.одних и тех же инструментов по разным парам.
Что-то у меня никак не получается сохранить массив при работе тестора.
Загружаю индикатор в режиме визуализации,
устанавливаю счетчик баров mc=0; при каждом новом баре занашу в массив последнее расчетное значение одной из индикаторных линий:
TS[mc]= GM2[nq]; по комменту вижу, что накопление значений в массив производится.
Далее на предпоследнем баре графика пытаюсь сохранить массив
но ничего не получается. Подскажите, пожалуйста, как мне это сделать!попробуйте вот такую конструкцию:
в принципе открывать файл можно и в deinit()
но такая конструкция универсальна, можно писать в файл и в промежутке между init() и deinit() тобиш в start() не мучаясь с сохранением предидущего значения.
Потом ещё можно не сохранять значения в буфер, а сохранять в переменные и переменные записывать в файл в конце start().
В общем вариантов много выбирайте какой вам больше подходит.
удачи.