HOME

Функция для экспорта результатов стратегии из Омеги в файл, обрабатываемый программой Test Analyzer.

24.03.2002.

О том, что такое Test Analyzer, для чего он служит и с какими данными работает, читайте на сайте Михаила Королюка www.moysha.ru в разделе "Технический анализ - Моя лаборатория".

К теме корректной обработки результатов тестов стратегий, полученных из пакетов тех. анализа Метасток и Омега мы возвращаемся с завидным постоянством. Отсутствие единого стандарта вывода, обработки и представления данных создает заметные неудобства при сравнении производительности и эффективности торговых систем от разных разработчиков. Первый шаг на пути к стандартизации и объективности был предпринят Михаилом Королюком (ака Moysha) в виде создания программы обработки отчетов Метастока Test Analyzer. Второй шаг пытается сделать ваш покорный слуга, в стремлении "научить" Омегу выдавать результат теста стратегии в съедобном для Test Analyzer'а виде.

На самом деле, решение проблемы заключалось в создании точной копии (клона) файла, выдаваемого Метастоком по результатам системного теста. Несмотря на кажущуюся простоту задачи (ведь Омега в состоянии экспортировать в текстовый файл практически любую информацию), несколько часов воскресного дня были потрачены на преодоление мелких, но неприятных нюансов. Не вдаваясь в подробности, лишь скажу, что когда я увидел корректно обработанный в Test Analyzer'е файл, в точности совпадающий с Метастоковским оригиналом - радости моей не было предела :)

Итак, создаем функцию EL под названием $MoyshaTAExport

{***************************************************************
Written by Konstantin Kopyrkin (aka konkop) 24.03.2002
This function calculate and export to *.txt file results
of strategy execution for Moysha Test Analyzer http://www.moysha.ru
by Mikle Korolyuk (aka Moysha).
Remember, Test Analyzer works whith "only Long" or "only Short"
strategies. "Both Long and Short" mode are not support.

Add to the end of signal code next string with path for export files
and amount of start equity, for example:

Value10 = $MoyshaTAExport("D:\StratExport\", 10000);

Enjoy!
Copyright (c) konkop 2002
****************************************************************}

Input: FilePath(String), {f.e. "D:\StratExport\"}
StartEq(Numeric); {initial capital, i.e. 10000}

Vars: TT(0), MP(0), Posit(""), Prof(0), Equity(0), ChEq(0), Date1(""), Date2(""), Time1(""), Str1(""), FileName("");

TT = TotalTrades;
MP = MarketPosition(0);
If Mp = 0 then Posit = "Out";
If MP = 1 then posit = "Long";
If MP = -1 then posit ="Short";

Date1 = RightStr(NumToStr(Date,0),4);
{Date2 = RightStr(NumToStr(Date,0),2)+"/"+MidStr(Date1,1,2)+"/"+NumToStr(Year(Date)+1900,0);}
Date2 = ElDateToString(Date);
Time1 = LeftStr(NumToStr(Time,0),2)+":"+RightStr(NumToStr(Time,0),2)+":000";

if currentbar = 1 then begin
Equity = StartEq;
FileName = FilePath + MidStr(GetSymbolName, 1, 5) + "_" + MidStr(GetStrategyName, 1, 20) + ".txt";
FileDelete(FileName);
FileAppend(FileName, "System Report - " + MidStr(GetStrategyName, 1, 20) + NewLine
+ MidStr(GetSymbolName, 1, 5) + " " + "Equity" + NewLine + NewLine
+"Bar Number"+" "
+"Date"+" "
+"Time"+" "
+"Ending Position"+" "
+"Close"+" "
+"Current Equity"+" "
+"Change in Equity"+" "
+ NewLine );
end;

If currentBar >0 then begin
If TT<>TT[1] then begin
Prof = IFF(EntryPrice(1)=0,0,(ExitPrice(1) / EntryPrice(1) - 1) * MarketPosition(1));
Equity = Equity[1]*(1+Prof);
End;
ChEq = Equity - Equity[1];
Str1 =
NumToStr(BarNumber, 0) +" "+
Date2 +" "+
Time1 +" "+
Posit +" "+
NumToStr(Close, 2) +" "+
NumToStr(Equity, 2) +" "+
NumToStr(ChEq,2) +" "+ NewLine;
FileAppend(FileName, Str1);
end;

$MoyshaTAExport = 1;

Файл ELA с кодом функции.

Одно замечание. Оказалось, что Test Analyzer очень чувствителен к формату даты, получаемой в файле экспорта. По умолчанию, Омега выдает дату в формате ММ/ДД/ГГГГ. Один из моих компьютеров наотрез отказался воспринимать такой формат в Test Analyzer'e, а два других "скушали" совершенно спокойно. Если у Вас возникнут проблемы с обработкой даты на вашей машине, то следует сделать следующие изменения в коде функции. Активную строчку:
Date2 = ElDateToString(Date);
"комментарим" в фигурные скобки, а в строчке находящейся выше:
{Date2 = RightStr(NumToStr(Date,0),2)+"/"+MidStr(Date1,1,2)+"/"+NumToStr(Year(Date)+1900,0);}
наборот, удаляем фигурные скобки и делаем ее активной. В этом случае, формат даты в файле экспорта примет вид ДД/ММ/ГГГГ.

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

Value12 = $MoyshaTAExport("D:\StratExport\", 10000);

Вы можете указать свой "адрес" и свою любимую начальную сумму для тестов. Только не забывайте, что Test Analyzer работает с результатами стратегий только в режиме "Only Long" и "Only Short". Другие настройки стратегии в Омеге (косты, сумма сделки, число контрактов на сделку) не играют роли и могут быть любыми. Дальше, запускайте Test Analyzer, открывайте в нем полученные отчеты и Enjoy!

Следует заметить, что в данной версии функции экспорта не учитываются комиссионные и проскальзывание. Впрочем, мы все больше склоняемся к мысли, что для объективности результатов тестов их и не надо учитывать. Ведь рынок не знает, какую комиссию мы платим и насколько быстро жмем на кнопки, отлавливая точное исполнение сигналов. Я считаю, что в этой связи, достаточно внимательно оценить такой параметр системы, как "средняя сделка в процентах"(мат. ожидание). Если Вы предполагаете, что комиссионные и проскальзывание в реальной торговле по Вашей системе могут составить 0,5% при открытии и закрытии позиции, то система со средней сделкой в 2% будет отдавать половину заработка только на содержание Вас в рынке.

(с) konkop 2002

HOME

Hosted by uCoz