Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Тестирование OOS и IS Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
ID
Советник


Зарегистрирован: 07.01.2008
Сообщения: 370

СообщениеДобавлено: Пн Окт 05, 2009 10:04 am Ответить с цитатой Вернуться к началу

В теме желательно давать комменты только тем, кто в теме по тестированию Out_of_sample и In_sample.

Предисловие:
Ставлю в автоматическом тесте АА период IS c августа по ноябрь включительно. Период OOS ставлю 1 мес.
Пока все ОК. В результате сделка, начатая в середине декабря дает результат, например, 3000 долл (см. рисунок). Хотя в реале сделка была бы закрыта с резалтом 1500 долл. Таким образом при таких вариантах развития событий мы получаем не совсем, мягко говоря, адекватные результаты тестирования OOS.

Image

Вопросы:
1. Как вы решали такие траблы?
2. Может быть в реале надо сделку закрывать при истечении периода OOS. То есть полностью в реал переводить тот алгоритм действий, который тестировался?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Окт 05, 2009 2:46 pm Ответить с цитатой Вернуться к началу

Ну вопрос то почти филосовский.
Совершенно понятно почему так сделано в программе. Если использовать правила закрытия действующие в новом периоде, то не факт, что по новым правилам сделка вообще была открыта. Если же тянуть старые правила по уже открытым сделкам, то вероятно это достаточно сложно реализовать...
Теперь про то как действовать.
Двух мнений быть не может. Как тестировалось, так и действовать. Если есть большое желание не прикрывать сделки в момент смены параметров, то это надо сперва протестировать. В ручную, в excel, где угодно.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ID
Советник


Зарегистрирован: 07.01.2008
Сообщения: 370

СообщениеДобавлено: Вт Окт 06, 2009 4:29 am Ответить с цитатой Вернуться к началу

000 писал(а):

Двух мнений быть не может. Как тестировалось, так и действовать. Если есть большое желание не прикрывать сделки в момент смены параметров, то это надо сперва протестировать. В ручную, в excel, где угодно.


По большому счету согласен с тобой. Ведь закрытие сделки при завершении периода OOS - это тоже часть системы. Смущает вот что:
1) Система в Walk-Forward test дала очень хорошие резалты: 30 годовых при максимальной просадке 7%.
2) Закрытие в конце периода OOS - это то, что противоречит ПЕРВОНАЧАЛЬНЫМ принципам системы.

В связи с этой проблемой перерыл книжку Пардо "Разработка Тс" и вот чего прочитал:

Image
Короче в раздумьях я...
Посмотреть профиль Отправить личное сообщение
DmZ



Зарегистрирован: 12.11.2009
Сообщения: 4
Откуда: Донецк

СообщениеДобавлено: Вс Ноя 15, 2009 12:21 am Ответить с цитатой Вернуться к началу

ID писал(а):
Система в Walk-Forward test дала очень хорошие резалты: 30 годовых при максимальной просадке 7%


Вы анализируете ~~~OSEQUITY ? Стандартного отчета по OutOfSample в АМИ вроде бы нет?

C уважением Дмитрий.
Посмотреть профиль Отправить личное сообщение
ID
Советник


Зарегистрирован: 07.01.2008
Сообщения: 370

СообщениеДобавлено: Пн Ноя 16, 2009 4:58 am Ответить с цитатой Вернуться к началу

Можно резалты OOS и IS загнать в Excel и получить эквитю, просадки, и проч показатели
Посмотреть профиль Отправить личное сообщение
DmZ



Зарегистрирован: 12.11.2009
Сообщения: 4
Откуда: Донецк

СообщениеДобавлено: Пн Ноя 16, 2009 4:13 pm Ответить с цитатой Вернуться к началу

я потихоньку дорабатываю индикатор portfolio.afl. Параметры ТС вывожу в окне "Interpretation". Весь стандартный отчет получить не получиться, но основное - можно.

По OOS с моей точки зрения самое сложное - подобрать оптимальные периоды IS и OS: Если период короткий- результат недостоверен, если длинный - при резкой смене рынка получаем большую серию убыточных сделок.

С уважением Дмитрий.
Посмотреть профиль Отправить личное сообщение
VladimirN



Зарегистрирован: 07.11.2009
Сообщения: 49

СообщениеДобавлено: Пн Ноя 23, 2009 4:00 pm Ответить с цитатой Вернуться к началу

У меня вопрос о другом, но подходит под название темы.

Можно ли настроить Walk-Forward, что бы он нормально пропускал выходные дни, при тестировании внутридневной торговли с настройкой Step N day?

А то сейчас беру минутки за две недели, настраиваю:
IS - два дня (например понедельник-вторник),
OOS - следующий один день после них (среда).

Когда тестирование доходит до субботы, то она входит в IS и тестирование проходит фактически по одному дню (а на графике то данных за субботу вообще нет!). И суббота- воскресенье с нулевыми данными почему-то дают параметры для OOS на новый понедельник, а ведь по моему он должен торговаться на основе IS-четверг-пятница.

Т.е. нормальный walk-forwarding при такой настройке получается только три дня в неделю - со среды по пятницу.

А хотелось бы загрузить сразу пару-тройку месяцев и прогонять по ним с разными настройками.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 23, 2009 4:38 pm Ответить с цитатой Вернуться к началу

А если в настройках БД в Intaday поставить галку Filter weekends

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
VladimirN



Зарегистрирован: 07.11.2009
Сообщения: 49

СообщениеДобавлено: Вт Ноя 24, 2009 12:49 am Ответить с цитатой Вернуться к началу

Надо было просто в настройках Walk-forwarda выбирать не days a trades day.
Посмотреть профиль Отправить личное сообщение
DmZ



Зарегистрирован: 12.11.2009
Сообщения: 4
Откуда: Донецк

СообщениеДобавлено: Ср Янв 06, 2010 9:06 am Ответить с цитатой Вернуться к началу

Немного доработанный индикатор portfolio.afl.
Для оценки equity OutOfSample.
Код:
_SECTION_BEGIN("Portfolio_my");
eq = Foreign("~~~OSEQUITY", "C");
cash = Foreign("~~~OSEQUITY", "L");
dr = eq - Highest(eq);
procDr=100*(Highest(eq)-eq)/Highest(eq);
bslh = HighestBars(eq);
GraphZOrder=1;
Plot(eq, "Portfolio Equity", colorLightBlue, styleArea );
if( ParamToggle("Show Cash", "No|Yes", 1 ) ) Plot(cash, "Cash", colorGreen, styleArea );
if( ParamToggle("Show Drawdown", "No|Yes", 1 ) ) Plot(dr, "Drawdown", colorDarkRed, styleArea );
if( ParamToggle("Show #bars since last high", "No|Yes", 0 ) ) Plot(bslh, "#bars since last high", colorDarkYellow, styleLine | styleOwnScale, 0, 10 * LastValue( Highest( bslh ) )  );

islastbar = Status("lastbarintest");
isfirstbar = Status("firstbarintest");
bar = BarIndex();
firstbar = LastValue( ValueWhen( isfirstbar, bar ) );
for( i = 1; i <BarCount>0 AND IsNull(cash[i-1])>0)firstbar =i;

lastbar = LastValue( ValueWhen( islastbar, bar ) );
al = LastValue( ValueWhen( islastbar, LinRegSlope( eq, Lastbar - firstbar + 1 ) ) );
bl = LastValue( ValueWhen( islastbar, LinRegIntercept( eq, Lastbar - firstbar + 1 ) ) );
Lr = al * ( BarIndex() - firstbar ) + bl;
Lr = IIf( bar >= firstbar AND bar <= lastbar , Lr, Null );
if( ParamToggle("Show lin. reg.", "No|Yes", 0 ) )Plot( Lr , "Linear Reg", colorRed, styleThick );

StartDepozit=cash[firstbar];
NetProfit=eq-StartDepozit;
procNetProfit=round(NetProfit/StartDepozit *100);
Trades=LossTrades=WinTrades=0;
SumLoss=SumWin=0;
for( i = 1; i <BarCount>=cash[i-1])
   {WinTrades[i]=1; SumWin[i]=SumWin[i-1]+cash[i]-cash[i-1];}
   else
   {LossTrades[i]=1;SumLoss[i]=SumLoss[i-1]+abs(cash[i]-cash[i-1]);}
   };
};
PF=SumWin/SumLoss;
Winners=Cum(WinTrades);procWinners=round(100*Cum(WinTrades)/Cum(Trades));
Losers=Cum(LossTrades);procLosers=round(100*Cum(LossTrades)/Cum(Trades));

//For interpretation window
strh=strB=strS=" ";
ShortScaleIn=BuyScaleIn=0;
for( i = BarCount-1; i < BarCount; i++ )
{
strB=strB+StrFormat("StartDeposit = %g,\nNetProfit = %g,\nNetProfit(proc) = %g,\nProfit Factor= %g, \n ",
StartDepozit[i], eq[i]-StartDepozit[i],procNetProfit[i],PF[i]);
strB=strB+StrFormat("\nTotal Trades=%g\nWin=%g  Loss=%g\nWinners(proc)=%g \n",
 Winners[i]+Losers[i],Winners[i],Losers[i],procWinners[i]);
strB=strB+StrFormat("\nMaxDD(proc)=%g \n",
Highest(procDr));
}
printf(strh+strB+strS );
_SECTION_END();


С уважением Дмитрий
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen