Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет через PayPal
concord99
514
concord99 2013.09.26 06:40 

Добрый день.

Пожалуйста, подскажите - возможно ли при тестировании аккумулировать базы данных, чтобы потом их проанализировать, например, в Excel?

Я попробовал разобраться с информацией в разделе "Массивы", но не смог найти ответов на мои вопросы.

Моя задача заключается в следующем: советник открывает сетку ордеров, а при достижении определённых условий закрывает её. При этом к моменту каждого закрытия этой сетки открывается разное количество позиций.

Как идентифицировать количество позиций я уже разобрался. За определённый период времени мне необходимо собрать данные по количеству отрытых позиций перед каждым закрытием. То есть это будет некий ряд чисел: 3, 6, 10, 2, 4, 32... Вот бы мне все эти данные в процессе тестирования сначала запомнить в какую-нибудь базу данных, а после завершения тестирования иметь возможность - экспортировать в файл Excel.

Заранее благодарю за любую возможную помощь.

TarasBY
1742
TarasBY 2013.09.26 07:11  

Все расчёты ведёте на момент отсутствия открытых ордеров (все "свои" ордера закрыты). Как только зафиксировали этот факт, запоминаете время. Пусть это будет НУЛЕВОЙ точкой отсчёта. Затем открывается серия ордеров, затем наступает момент, когда опять не будет ни одного "своего" открытого ордера. Пробегаетесь по закрытым ордерам (OrdersHistoryTotal()) до момента предыдущего отсутствия ордеров и считаете сколько их было. Посчитали, записали данные. Затем поместили в переменную, запоминающую "НУЛЕВУЮ точку", текущее значение времени. И так цикл повторяется. Все необходимые данные удобно держать в массиве. При деинициализации советника пишите данные массива в файл. А потом его анализируете.

При торговле (не в тестере) нужно создать систему работы с этой информацией: при инициализации считывание из файла, при деинициализации запись в файл (по-хорошему, чтобы информация случайно не пропала при аварийной выгрузке терминала, запись нужно вести раз в 1-5 минут).

concord99
514
concord99 2013.09.26 07:27  
TarasBY:

Все расчёты ведёте на момент отсутствия открытых ордеров (все "свои" ордера закрыты). Как только зафиксировали этот факт, запоминаете время. Пусть это будет НУЛЕВОЙ точкой отсчёта. Затем открывается серия ордеров, затем наступает момент, когда опять не будет ни одного "своего" открытого ордера. Пробегаетесь по закрытым ордерам (OrdersHistoryTotal()) до момента предыдущего отсутствия ордеров и считаете сколько их было. Посчитали, записали данные. Затем поместили в переменную, запоминающую "НУЛЕВУЮ точку", текущее значение времени. И так цикл повторяется. Все необходимые данные удобно держать в массиве. При деинициализации советника пишите данные массива в файл. А потом его анализируете.

При торговле (не в тестере) нужно создать систему работы с этой информацией: при инициализации считывание из файла, при деинициализации запись в файл (по-хорошему, чтобы информация случайно не пропала при аварийной выгрузке терминала, запись нужно вести раз в 1-5 минут).


Спасибо за информацию!

Но наверное я неправильно свою проблему. Вообще с этими массивами не имел раньше дел. Прочитал, что их надо сначала объявить. Мне вроде бы подойдёт одномерный массив. Но при этом я планирую, что в этом массиве потребуется запомнить большое количество чисел. Могут ли возникнуть ограничения (?!). Мне как раз непонятно - как переносить данные из массива в файл (из которого потом брать данные для Excel) ? Подскажите, пожалуйста, если возможно.

TarasBY
1742
TarasBY 2013.09.26 07:51  

В Вашем случае нужно запоминать время последней "нулевой" точки и количество открытых ордеров м\у "нулевыми" точками, если я Вас правильно понял. Напрашивается двухмерный массив.

#define dOrders    0
#define dTime      1
int  gia_STAT[1][2];

void MyFynction()
{
    //---- Сами ведёте учет ордеров
    
    //---- Если открытых ордеров нет
    if (bi_MyOrders == 0)
    {
        //---- Подсчитываете количество открытых ордеров с момента предыдущей нулевой точки
        int li_MyCloseOrder;
        //---- Заносите полученную информацию в массив
        int li_size = ArrayRange (gia_STAT, 0);
        gia_STAT[li_size-1][dOrders] = li_MyCloseOrder;
        gia_STAT[li_size-1][dTime] = TimeCurrent();
        //--- Увеличиваем рамер массива
        ArrayResize (gia_STAT, li_size + 1);
    }
}

Схематично задача может решаться так. В этом случае Вы сможете проанализировать и продолжительности м\у нулевыми точками.

concord99
514
concord99 2013.09.26 08:05  
TarasBY:

В Вашем случае нужно запоминать время последней "нулевой" точки и количество открытых ордеров м\у "нулевыми" точками, если я Вас правильно понял. Напрашивается двухмерный массив.

Схематично задача может решаться так. В этом случае Вы сможете проанализировать и продолжительности м\у нулевыми точками.

TarasBY:

В Вашем случае нужно запоминать время последней "нулевой" точки и количество открытых ордеров м\у "нулевыми" точками, если я Вас правильно понял. Напрашивается двухмерный массив.

Схематично задача может решаться так. В этом случае Вы сможете проанализировать и продолжительности м\у нулевыми точками.


Спасибо)... Но вот я такой непутёвый любитель - не знаю я как запоминать данные массива в файл и потом из файла брать данные (например, для Excel). Вот мой вопросик:). Не могу разобраться с этой функцией FileWrite

Подскажите, пожалуйста - вот в Вашем примере - как надо правильно записывать получаемые данные в файл, чтобы потом его можно было просматривать в Excel?

TarasBY
1742
TarasBY 2013.09.26 08:21  
concord99:

Спасибо)... Но вот я такой непутёвый любитель - не знаю я как запоминать данные массива в файл и потом из файла брать данные (например, для Excel). Вот мой вопросик:). Не могу разобраться с этой функцией FileWrite

Подскажите, пожалуйста - вот в Вашем примере - как надо правильно записывать получаемые данные в файл, чтобы потом его можно было просматривать в Excel?

Данную задачу не решал, не знаю нюансов - не помогу.
concord99
514
concord99 2013.09.26 08:26  
TarasBY:
Данную задачу не решал, не знаю нюансов - не помогу.


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