Работа с FrameAdd и FrameNext

 

Добрый день.

Подскажите, такой вопрос, нужно после прогона в тестере сохранить две переменных string с результатами (для записи в два разных csv файла), соответственно, делаю два FrameNext в процедуре OnTester:

 StringToCharArray(glb_toWriteAllResults,glb_uCharStringArray);

 FrameAdd("WeightsAndResultsByTest",1,0,glb_uCharStringArray);

            

 StringToCharArray(glb_toWriteMessagesOfTesting,glb_uCharMessagesOfTesting);

 FrameAdd("MessagesOfTesting",2,0,glb_uCharMessagesOfTesting);

Уже в OnTesterPass делаю

string name ="WeightsAndResultsByTest";

long   id   =1;  

double val  =0.0;

FrameFilter(name, id); //пробовал с FrameFilter и без

FrameNext(glb_passes_count,name,id,val,glb_uCharStringArray);


string nameMessagesOfTesting = "MessagesOfTesting";

long   idMessagesOfTesting   = 2;

FrameFilter(nameMessagesOfTesting, idMessagesOfTesting); //пробовал с FrameFilter и без

FrameNext(glb_passes_count,nameMessagesOfTesting,idMessagesOfTesting,val,glb_uCharMessagesOfTesting);

Фрейм оба раза вытаскивается только первый, то есть первый FrameAdd.

Открыл mqd файл, куда он скидывает фреймы, там фрейм только первый.

То есть за один прогон тестера я могу добавить фрейм только один раз? или нет? Как добавить два фрейма и вытащить потом тоже два?

 
Nexxtor:

То есть за один прогон тестера я могу добавить фрейм только один раз?

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

Как добавить два фрейма и вытащить потом тоже два? 

Делайте простую структуру из двух статических uchar массивов. В каждый загоняйте строку и передавайте полученный структуру через фрейм.

 

Во фрейм же можно передавать только массивы с простыми типами данных.

В любом случае, похоже что да, один проход - один фрейм.

В итоге добавил в массив uchar второй объект string, потом уже их вытаскиваю и разделяю.

 
Nexxtor:

Во фрейм же можно передавать только массивы с простыми типами данных.

Структура со статическими массивами простых типов также является простым типом.
 
Nexxtor:

нужно после прогона в тестере сохранить две переменных string с результатами

Здесь пример, как можно передать любое количество строк через фреймы.

Библиотеки: TypeToBytes
Библиотеки: TypeToBytes
  • 2017.04.26
  • www.mql5.com
Форум алго-трейдеров MQL5
 
fxsaber:

Здесь пример, как можно передать любое количество строк через фреймы.

Спасибо.

Здесь я так понял массив разбивается по байтово в uChar и записывается во фрейм:

FrameAdd("Temp", 0, 0, _R(Str.Array).Bytes);
 
Nexxtor:

Здесь я так понял массив разбивается по байтово в uChar и записывается во фрейм:

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