Экспорт результатов из OMEGA TS в XpressAnalizator.
На сайте KonKop'a можно найти популярную программу для анализа результатов торговли XpressAnalizator, фактически ставшую одним из стандартов расчёта эффективности работы торговой стратегии. На этом же сайте имеется описание работы с данной программой, а также функции экспорта из Omega TS и MetaStock.
Функция экспорта из OmegaTS называется $TradeFile. При экспорте результатов торговли, $TradeFile выводит их в процентах от капитала, участвующего в сделке. При этом способ расчёта подходит для акций (и иных аналогичных активов), но никак не подходит для инструментов рынка FOREX (см. предыдущую статью на эту тему - "Расчёты по инструментам рынка FOREX в EasyLanguage").
Для того, чтобы корректно экспортировать результаты, мы внесли небольшие изменения в функцию $TradeFile (измененный вариант называется $TradeFileMod) и используем уже имеющиеся "блоки" кода EasyLanguage для расчёта размера лота и прибыли/убытка.
Модификация функции состоит в том, что прибыль в % (переменная Prof) теперь рассчитывается не внутри функции $TradeFileMod, а передаётся ей в виде входного параметра Prof, рассчитываемого в нашей стратегии.
Исходный текст функции $TradeFileMod приведен ниже.
{*************************************************************** $TradeFile EL function. Written by Konstantin Kopyrkin (aka konkop) 01.04.2002. Copyright (c) 2002 konkop Note: Add to a system code after all entry/exit routines the string: value12 = $TradeFile("konkop","D:\TradeFiles\"); where: "konkop" - author's name (set your nickname up to 6 symb.) "D:\TradeFiles\" - full path for export files (set your path) ****************************************************************} {modification by Apprentice : profit is not calculated inside the function, it's passed in as parameter - needed for FX symbols}
Input: Author(String),
FilePath(String),Prof(NumericSimple); |
||
if
DataCompression = 1 then Str1 =
NumToStr(barinterval,0); |
||
end; | ||
If TT > TT[1] then begin | ||
EnDate = NumToStr(Year(EntryDate(1)) + 1900, 0) +
RightStr(NumToStr(EntryDate(1),
0),4); ExDate = NumToStr(Year(ExitDate(1)) + 1900, 0) + RightStr(NumToStr(ExitDate(1) ,0),4); { Prof = (ExitPrice(1) / EntryPrice(1) - 1) * MarketPosition(1); - now profit is passed as parameter} Str4 = {base fields} MidStr(GetStrategyName, 1, 20) + ", "+ MidStr(GetSymbolName, 1, 10) + "," + NumToStr(MarketPosition(1), 0) +","+ EnDate + "," + ExDate + "," + NumToStr(Prof,4); FileAppend(FileName, Str4 + NewLine); |
||
end; | ||
$TradeFileMod = 1; |
В качестве примера мы возьмём торговую стратегию, основанную на стохастике для базовых валют из предыдущей статьи.
При этом мы сохраняем логику входов и выходов, а также расчёты лотов для торговли. Изменения будут внесены в блок кода, отвечающий за расчёт прибыли и ведение записей:
1) мы должны рассчитать прибыль в процентах от капитала каждый раз при закрытии позиции;
2) теперь для ведения записей мы будем вызывать функцию $TradeFileMod и передавать ей рассчитанную в п.1 прибыль..
Полный текст торгового сигнала приведен ниже.
{-------------------------------------------------------------------------------------------------------------------------------} {Сигнал работает со следующими валютами: AUD,CAD,CHF,EUR ,GBP,JPY,NZD } |
|||
Inputs : |
Equity(10),Lots(10), {параметры управления капиталом - сумма капитала в тысячах долларов, количество лотов} |
||
|
LogIt(1); {запись результатов в файл: 1 - записываем, другое значение - не записываем}Length(14),OverBought(70),OverSold(30); {параметры стохастика } |
||
Vars : |
Lot_Num(1000), {размер лота} Symbol(""), {наименование валюты} divmul(False), {тип котировки False - прямая, True - обратная}pmul(0), {курс валюты для делителя}Trades(0), {количество закрытых позиций} PLperiod(0), {прибыль за период} lastM(0), {номер месяца}filename(""), {имя файла для вывода результатов}, temp(0) {переменная с результатом в % от капитала},Kline(0),Dline(0); {значения стохастика} |
||
{-------------------------------------------------------------------------------------------------------------------------------} {установка начальных значений : выбор типа валюты, назначение имени файла для вывода результатов} |
|||
if barnumber=1 then BEGIN |
|
||
|
if Symbol="" then Symbol=GetSymbolName;if filename="" then filename="c:\temp\"+Symbol+".csv";FileDelete (filename);If Symbol="AUD A0-FX" or Symbol="EUR A0-FX" or Symbol="GBP A0-FX" or Symbol="NZD A0-FX" then divmul=true;if Symbol="CAD A0-FX" or Symbol="CHF A0-FX" or Symbol="JPY A0-FX" then begin |
||
|
|
divmul= false;Lot_Num= IntPortion(Equity*1000/lots); {размер лота рассчитываем один раз, т.к. он в USD и не зависит от курса} |
|
|
end ; |
|
|
END ;{-------------------------------------------------------------------------------------------------------------------------------} {расчёт размера лота в случае, когда он зависит от курса валюты} pmul= MedianPrice;if divmul=true then Lot_Num=IntPortion(Equity*1000/(lots*pmul));{-------------------------------------------------------------------------------------------------------------------------------} {непосредственно сам торговый сигнал} KLine = SlowKCustom(High, Low, Close, Length);DLine = SlowDCustom(High, Low, Close, Length);If KLine Crosses Below DLine AND KLine > OverBought AND DLine > OverBought Then Sell ("StchSell") This Bar on Close;If KLine Crosses Above DLine AND KLine < OverSold AND DLine < OverSold Then Buy ("StchBuy") This Bar on Close;{-------------------------------------------------------------------------------------------------------------------------------} {запишем результаты работы в текстовой файл} if LogIt=1 then begin {записываем результаты в файл } |
|||
|
if Trades<>TotalTrades then begintemp= iff(ExitPrice(1)<>0,ExitPrice(1),1); |
||
|
|
if divmul=false then temp=PositionProfit(1)*100/(temp*equity) else temp=PositionProfit(1)*100/equity; {рассчитаем прибыль в %}value12=$TradeFileMod("Stoch","C:\results\",temp); |
|
|
end ; |
||
end ;{-------------------------------------------------------------------------------------------------------------------------------} Trades= TotalTrades; {запомним количество завершенных сделок}{-------------------------------------------------------------------------------------------------------------------------------} |
(с) Apprentice 2003