Исследуем сделки торговой системы

Накидал небольшой код, суть его проста: в режиме Exploration добавлять к сделкам сгенерированным из Buy/Sell сигналов, любые характеристики (будь то уровень RSI, соотношение объемов и т.п. до входа в сделку).

Для чего?
Идея простая – повысить эффективность системы, выделив важные признаки характерные для профитных трейдов и для последующей фильтрации уже в коде системы.

Главное, что этот подход позволяет отойти от модели “написал правило – оттестировал – оптимизировал”, так скажем новый взгляд – осознанный подход. Это позволяет трейдеру стать имхо более робастным, в поиске закономерностей в системе.
Области применения вижу следующие:
– Анализ существующих систем, для поиска оптимальных стопов/тейков
– Поиск фильтров для систем
– Анализ серий сделок для реализации ММ на основе последовательностей выигрышных и проигрышных сделок
– Определение фазы рынка в котором система может работать наиболее эффективно
– И многое другое

Полученные от Exploration’a данные можно вставить в эксель и обработать как душе угодно, как всегда дальше вы ограничены только своей фантазией.

Данный код исследует только лонги. Для шортовых сделок потребуются небольшие правки. В целях тестирования PositionSize задана строго 1 лот, хотя это не принципиально.

Внимание! Не копируйте код ниже прямо в Ами, могут возникнуть ошибки, из-за особенностей форматирования кода блогом. Лучше скачайте по ссылке ниже.

Buy = Cross(C,MA(C,50));// && V / MA(V,20) >= 1.637 ;
Sell = Cross(MA(C,50),C);</code>

Sell[BarCount-1] = 1;

Buy = ExRem(Buy, Sell);
Sell = ExRem(Sell, Buy);

//Longs Only

bi = BarsSince(Buy);
beg = bi*-1;
Trade = "Long";
profit = SellPrice - Ref(BuyPrice, beg);
percprofit = (SellPrice - Ref(BuyPrice, beg))/ Ref(BuyPrice, beg);

EntryPrice = Ref(BuyPrice, beg);
ClosePrice = SellPrice;

PositionSize = C*(1.01);

intrade = Flip(Buy, Sell);

tradeid = Cum( IIf(Ref(intrade, -1) ==0 &amp;&amp; intrade == 1, 1,0));
Plot(C, "Close", colorBlack, 64);

PlotShapes(Buy * shapeHollowUpArrow, colorGreen);
PlotShapes(Sell * shapeHollowDownArrow, colorRed);

SetOption("NoDefaultColumns", True );
Filter = Ref(intrade, -1) &amp;&amp; !intrade;

printf("%g",bi);

AddColumn(tradeid-1, "TradeID", 1);
AddTextColumn(Name(), "Ticker");
AddTextColumn(Trade, "Trade");

_tradelow = LLV(L, bi);
_tradehigh = HHV(H, bi);

AddColumn(Ref(DateTime(), beg), "OpenDate",formatDateTime);
//AddColumn(EntryPrice, "Price");
AddColumn(DateTime(), "CloseDate",formatDateTime);
//AddColumn(_tradelow, "Low");
AddColumn(bi+1, "BarsHeld", 1);
AddColumn(Profit, "Profit");
AddColumn(PercProfit*100, "%Profit");
AddColumn(Profit / (bi+1), "Profit/Bar");
AddColumn((_tradelow - EntryPrice ) / EntryPrice*100, "%MAE");
AddColumn((_tradehigh-EntryPrice) / EntryPrice*100, "%MFE");
AddColumn(int(Ref(RSI(), beg)), "RSI");
AddColumn(Ref(C / ATR(15), beg), "ATR");
AddColumn(Ref(V / MA(V,20), beg), "Vol to Avg20");

_SECTION_BEGIN("Price1");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

Статья по теме:
В поисках edge’a часть 4 (Об эффективности)

Leave a comment