Автор |
Сообщение |
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Привет! Тестирую сбер с 1.06.2011 по 1.06.2012
Система
_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();
//////////////Система///////////////
N=Optimize ("N", 660, 60 , 3600, 60);
TimeFrameSet( N );
MA1 = MA ( C , 40 ) ;
MA2 = MA ( C , 70 );
Buy= Cross(C, MA1 ) AND C > MA2 ;
Sell = Cross( MA2 , C);
///////////Конец Системы////////////
Equity(1); // Убираем лишние стрелочки входов-выходов из графика
SetPositionSize( 1, spsShares ); // Торговля одной бумагой
//Рисование
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorGreen, 0,L, Offset=-15);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorBlue, 0,H, Offset=-15);
_SECTION_BEGIN("MA1");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 300, 1, 10 );
Plot( MA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_SECTION_END();
_SECTION_BEGIN("MA2");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 300, 1, 10 );
Plot( MA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_SECTION_END();
Сначала оптимизировал ma1 и ma2 (цель оптимизации car/mdd). Потом прописал в коде параметры ma1 и ma2 руками и добавил оптимизацию таймфрейма. Лучший таймфрейм получился на 11мин. Ставлю в AA settings период 11мин. и делаю back test. В итоге вместо 4.62 по car/mdd, получаю 2.7?
Тут же ставлю в AA settings период 13мин. и делаю back test. В итоге 4.62 по car/mdd? Где собака порылась?
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не могу сказать где именно там порылась собака, однако молчать не могу.
Не ленитесь делать отдельный код дл теста а не совмещать индикатор и тестовый код.
У тебя в коде используется функция Equity(). Она запускает старый тестер внутри портфельного. Хрен его знает, как это влияет на конечный результат.
Давай для начала устраним этот косяк, а уж потом, если все равно вылезут непонятки, будем разбираться в чем трабл. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Убрал эквити. Всё равно остались непонятки.
Перед запуском тестера в настройках АА поставил мин. тайфрейм 1мин.
Код
N=Optimize ("N", 600, 60 , 3600, 60);
TimeFrameSet(N);
//////////////Система///////////////
MA1 = MA ( C , 35 ) ;
MA2 = MA ( C , 60 );
Buy= Cross(C, MA1 ) ;
Sell = Cross( MA2 , C);
Buy = ExRem( Buy, Sell ); // Убираем лишние сигналы
Sell = ExRem( Sell, Buy ); // Убираем лишние сигналы
SetPositionSize( 1, spsShares ); // Торговля одной бумагой
Оптимизация показала car/mdd -1.02 при таймфрейме 3600(часовик).
Меняю в настройках АА мин. тайфрейм на час. Запускаю back test и получаю car/mdd 1.69 (почему, должно быть 1.02)? |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ага. Теперь давай смотреть.
На твоих скринах видно, что сделки совсем не совпадают.
Почему?
Предполагаю.
У тебя в коде есть только переключение да другой фрейм. Возвращения к базовому вероятно нет потому, что вроде базовый не нужен. Однако АА всеравно работает с базовым фреймом взятым из настроек и в него попадают сжатые функцией TimeFrameSet сигналы наложенные на нормалный фрейм.
Соответственно сигналы получаются совсем не в тех местах где должны быть.
Как бы объяснть получше...
построй вот такой индикатор на фрейме 1 мин.
Код: |
TimeFrameSet(60*5);
MA1 = MA(C , 35 );
MA2 = MA(C , 60 );
Buy = Cross(C, MA1);
Sell = Cross(MA2 ,C);
SetPositionSize(1, spsShares);
TC = C;
TimeFrameRestore();
Plot(C, "", colorBlack, styleCandle);
Plot(TC, "", colorBlack);
Plot(MA1, "", colorRed);
Plot(MA2, "", colorRed); |
Свечки это базовый фрейм. Черная линия это сжатый TimeFrameSet график. Красные это мувинги на нем. В местах пересечения мувингов будут сигналы. Вот эти сигналы, совершенно не обоснованно будут перенесены вертикально на график базового фрейма. Советственно сделки будут совершенно не там и не по тем ценам где бы должны быть.
Вывод. Обязательно надо ресторить фрейм в коде и экспандить сигналы. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
//////////////Система///////////////
N=Optimize ("N", 60, 60 , 3600, 60);
TimeFrameSet(N);
Empty = Optimize ("Empty", 1, 1 , 5, 1);
MA1 = MA ( C , 35 ) ;
MA2 = MA ( C , 60 );
Buy= Cross(C, MA1 ) ;
Sell = Cross( MA2 , C);
Buy = ExRem( Buy, Sell ); // Убираем лишние сигналы
Sell = ExRem( Sell, Buy ); // Убираем лишние сигналы
SetPositionSize( 1, spsShares ); // Торговля одной бумагой
TimeFrameRestore();
Вот что получается :См. картинку 1мин.
После этого ни чего не меняя в коде, меняем таймфрейм в АА в settings на 5мин. И получаем : См. картинку 5мин.
Вопрос почему при неизменном коде, меняя только таймфрейм в АА получаем разные 3Д оптимизации?
Наверное ты и ответил на этот вопрос в предыдущем своём посте, ну тогда другой вопрос( который на самом деле для меня важнее), как оптимизировать данный код по параметру car/mdd меняя таймфрейм?
Да, можно в коде вообще убрать TimeFrameSet, и руками прописывать таймфрейм в АА в settings и делать back test 60раз от минуты до часовика!!!? Потом сравнивать результаты. Но такой путь для меня не приемлем( сдохну раньше чем копейку заработаю).
|
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Плохо я объяснил.
Кода ты переключаешься на другой фрейм функцией TimeFrameSet() и на этом фрейме получаешь сигналы то это выглядит примерно так.
10 бар - продажа,
22 бар - покупка
35 бар - продажа
43 бар - покупка
.....
При этом счет баров с крайнего правого.
Так вот тестер и покупает на этих барах только на фрейме который установлен в настройках АА.
По скольку фреймы разные а номера баров одни и те же то и результаты абсолютно разные.
Надо типа так
Код: |
N=Optimize ("N", 60, 60 , 3600, 60);
TimeFrameSet(N);
MA1 = MA ( C , 35 ) ;
MA2 = MA ( C , 60 );
Buy= Cross(C, MA1 ) ;
Sell = Cross( MA2 , C);
TimeFrameRestore();
Buy = TimeFrameExpand(Buy, N);
Sell = TimeFrameExpand(Sell, N);
SetPositionSize( 1, spsShares );
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Теперь всё ок.
Показывает правильные результаты только если соблюдаешь следующую последовательность:
1. Сначала ставим в АА settings таймфрейм 1мин.,
2. Ставим код
N=Optimize ("N", 60, 60 , 4600, 60);
TimeFrameSet(N);
Empty = Optimize ("Empty", 1, 1 , 5, 1);
MA1 = MA ( C , 35 ) ;
MA2 = MA ( C , 60 );
Buy= Cross(C, MA1 ) ;
Sell = Cross( MA2 , C);
TimeFrameRestore();
Buy = TimeFrameExpand(Buy, N);
Sell = TimeFrameExpand(Sell, N);
Buy = ExRem( Buy, Sell ); // Убираем лишние сигналы
Sell = ExRem( Sell, Buy ); // Убираем лишние сигналы
SetPositionSize( 1, spsShares ); // Торговля одной бумагой
3. Жмём оптимизацию.
4. Жмём 3Д оптимизацию.
А вот если сначала в АА settings выставить любой другой таймфрем, отличный от базового (то есть 1мин.), а потом проделать пункты 2-4(ни чего не меняя в коде), то результата будет не верный. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Разумеется. Так и должно быть.
Если в АА поставить 5 мин, то TimeFrameSet() в коде сможет нормально строить фреймы только кратные 5 мин. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|