Коэффициент соотношения инструментов - страница 2

 
Angela >>:

1247099400 - это соответствует времени 1 бара в окне истории котировок EURUSD M1. В тесторе, когда расчет индикатора достигает предпоследнего бара т.е. 1 по индексации терминала (1247099400== Time[0]), перед тем, как тестор остановится, это условие должно срабатывать, и до того, как индикатор отключится, сохранить сформированный массив. И как Вы поступаете в подобных случаях и сохраняете расчетные значения при работе в тесторе?

Не знаю как реализовано в МТ, но если компилятор пропускает, наверное, допустимо. НО в языках программировани есть понятие lvalue & rvaluе - то бишь "левого" и "правого" значения. Это берется относительно оператора присваивания. То есть, выражение

1247099400 = Time[0];

будет неверным в том смысле, что константе нельзя присвоить значение, которое хранится в элементе массива Time[0].

Выражение же  Time[0] = 1247099400; в общем смысле (без учета специфики переменной Time[]) будет корректно: значение можно сохранить в элементе массива. Это лирическое отступление в том смысле, что, общности ради, стоит придерживаться правил и в операторах сравнения.

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

Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.

Удачи.

 
VladislavVG писал(а) >>

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

Что касается проверки на обрыв связи - определитесь сколько значений индикатора Вам нужно. Возможно быстрее просто все это пересчитать один раз на момент открытия бара? Файловые операции весьма "недешевое" (с точки зрения требуемых рессурсов) операции. И еще - операция динамического переразмещения массива (ArrayResize(TS, mc+1);) весьма много рессурсов (по времени) требует - тестер "тормозить" будет.

Удачи.

Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?

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

Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.

 
Angela писал(а) >>

Если бы в функции деинит это срабатывало - не было бы вопросов, но в тесторе это не срабатывает, я использую сохранение в деинит в статическом режиме работы индикатора или на демо. А Вам удавалось сохранять в ней результаты расчетов в тесторе?

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

Может всетаки модераторы снизойдут до нас смертных, и скажут: возможно ли вообще сохранение массива в тесторе? А то похоже на форуме никто этого не знает, или не хочет говорить, а то бьешся над проблемой, а возможно она и не имеет решения.

У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.

 
Vinin писал(а) >>

У эксперта в режиме тестирования deinit() отрабатывает нормально. Как и при оптимизации. Использую запись в файл для своих нужд. Например свой критерий оптимизации.

Вопрос касается индикатора при визуализации его работы, а не эксперта, у меня эксперт, в этом случае, включен только для работы тестора, и не связан с индикатором который я отлаживаю.

 
Angela >>:

Может быть кто-то выводил коэффициент соотношения инструментов и таймфреймов? 

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

 
Angela >>:

Что-то у меня никак не получается сохранить массив при работе тестора.

Загружаю индикатор в режиме визуализации,

устанавливаю счетчик баров 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);
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//+------------------------------------------------------------------+

удачи.

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