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



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

СообщениеДобавлено: Сб Авг 04, 2012 8:59 pm Ответить с цитатой Вернуться к началу

Привет! Тестирую сбер с 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

СообщениеДобавлено: Сб Авг 04, 2012 9:22 pm Ответить с цитатой Вернуться к началу

Не могу сказать где именно там порылась собака, однако молчать не могу.
Не ленитесь делать отдельный код дл теста а не совмещать индикатор и тестовый код.
У тебя в коде используется функция Equity(). Она запускает старый тестер внутри портфельного. Хрен его знает, как это влияет на конечный результат.

Давай для начала устраним этот косяк, а уж потом, если все равно вылезут непонятки, будем разбираться в чем трабл.

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



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

СообщениеДобавлено: Вс Авг 05, 2012 12:22 am Ответить с цитатой Вернуться к началу

Ок.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
vadimal



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

СообщениеДобавлено: Пн Авг 06, 2012 5:29 pm Ответить с цитатой Вернуться к началу

Убрал эквити. Всё равно остались непонятки.
Перед запуском тестера в настройках АА поставил мин. тайфрейм 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

СообщениеДобавлено: Пн Авг 06, 2012 8:44 pm Ответить с цитатой Вернуться к началу

Ага. Теперь давай смотреть.
На твоих скринах видно, что сделки совсем не совпадают.
Почему?
Предполагаю.
У тебя в коде есть только переключение да другой фрейм. Возвращения к базовому вероятно нет потому, что вроде базовый не нужен. Однако АА всеравно работает с базовым фреймом взятым из настроек и в него попадают сжатые функцией 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

СообщениеДобавлено: Вт Авг 07, 2012 12:53 pm Ответить с цитатой Вернуться к началу

//////////////Система///////////////
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раз от минуты до часовика!!!? Потом сравнивать результаты. Но такой путь для меня не приемлем( сдохну раньше чем копейку заработаю).
Very Happy
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вт Авг 07, 2012 3:29 pm Ответить с цитатой Вернуться к началу

Плохо я объяснил.
Кода ты переключаешься на другой фрейм функцией 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

СообщениеДобавлено: Вт Авг 07, 2012 8:16 pm Ответить с цитатой Вернуться к началу

Теперь всё ок.
Показывает правильные результаты только если соблюдаешь следующую последовательность:
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

СообщениеДобавлено: Вт Авг 07, 2012 8:17 pm Ответить с цитатой Вернуться к началу

Спасибо!!!
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вт Авг 07, 2012 9:27 pm Ответить с цитатой Вернуться к началу

Разумеется. Так и должно быть.
Если в АА поставить 5 мин, то TimeFrameSet() в коде сможет нормально строить фреймы только кратные 5 мин.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen