Добрый день.
Записываю результаты оптимизации в файл. Данные каждого прохода получаю из фрейма в функции OnTesterPass. При этом, если обратиться к глобальным переменным в этой функции, то они будут пустые.
Есть ли какой нибудь способ работать с глобальными переменными (в моем случае типа string) в функции OnTesterPass?
А почему не в OnTester? Ведь OnTesterPass восникает при старте фрейма и логично, что все обнулено.
Тогда в функции OnTesterDeinit(), когда я по окончании оптимизации записываю все данные в csv файл, все глобальные переменные string пустые...
Еще раз - в OnTester переменные не пустые? Это же проверить секунда
OnTesterDeinit() вызывается после полной оптимизации
Естественно, что они пустые, они же в агенте. Так же через фрейм их передавать, как и другие данные.
Еще раз - в OnTester переменные не пустые? Это же проверить секунда
OnTesterDeinit() вызывается после полной оптимизации
В OnTester переменные не пустые, в этой функции все хорошо. В функции OnTester я делаю, например:
toWrite = toWrite + DoubleToString(TesterStatistics(STAT_PROFIT),2);
Потом, уже в OnTesterDeinit() записываю toWrite в файл, а файл пустой.
Пробовал. Через фрейм передавать объекты нельзя, в том числе string.
Кто вам это сказал?
string ResultsByTest[6];
double OnTester(void)
{
if (writeAllResultsToFile){
GetTestStatistics();
FrameAdd("ResultsByTest",1,0,ResultsByTest);
}
return 0.0;
}
При компиляции ошибка:
'ResultsByTest' - string arrays and structures containing objects are not allowed ExpertN.mq5 2372 31
string ResultsByTest[6];
double OnTester(void)
{
if (writeAllResultsToFile){
GetTestStatistics();
FrameAdd("ResultsByTest",1,0,ResultsByTest);
}
return 0.0;
}
При компиляции ошибка:
'ResultsByTest' - string arrays and structures containing objects are not allowed ExpertN.mq5 2372 31
Можно собрать все глобальные переменные в одну строку через какой-нибудь разделитель, потому преобразовать ее в массив char, передать этот массив. Массивы можно передавать всякие, но не строковые.
Можно массив структур использовать, но без переменных string. Под имя выделить массив char фиксированного размера:
char name[100];
double val;
};
sx z[1111];
double OnTester(void){
FrameAdd("ResultsByTest",0,0.0,z);
return 0.0;
}
Передача строковых данных через калбэк между тестером и терминалом - это окей. Товарищ выше дело написал.
Если не, то только через межпроцесс, пайпы, файл, dll.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Записываю результаты оптимизации в файл. Данные каждого прохода получаю из фрейма в функции OnTesterPass. При этом, если обратиться к глобальным переменным в этой функции, то они будут пустые.
Есть ли какой нибудь способ работать с глобальными переменными (в моем случае типа string) в функции OnTesterPass?