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



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

СообщениеДобавлено: Ср Май 19, 2010 11:09 am Ответить с цитатой Вернуться к началу

Простите если дубль, но я не нашел похожих тем в этом разделе. Если есть на форуме такие темы- подскажите пожалуйста где.
Предполагаю, что тема может превратится во что то похожее на ФАК и принести ещё кому нибудь пользу.

Дорогие старшие боевые товарищи, не обойдите вниманием вопросы новичка Smile

Предисловие. Поскольку разработанная стратегия при её безусловной простоте дала подозрительно большие прибыли, я решил что где то подвох в части общего процесса тестирования и прежде чем придумывать и проверять идеи нужно бы разобраться с правильной методикой тестирования.

Возникшие вопросы.

1. данные

Скачиваю с финама склееный фьюч (RI*) с 2007 года.

1.1. Как правильно его подготовить к тестированию?
1.2. Как очистить данные от артефактов?

2. настройки тестера

2.1. как правильно настроить в АМИ инструмент для тестирования (ри)?
2.2. как тестировать фьючерс для стратегии работающей на минутках:
    *как отключить плечи и тестировать систему только одним контрактом?
    *как рассчитать (хотя бы примерно) границы ликвидности рынка?
    *как настроить тестирование под установленные границы ликвидности? Например что бы она тестировала систему изменяя сайз с 1го до 10ти контрактов, и больше 10ти не наращивала?


3. специфичные функции с которыми прошу помочь с кодингом

3.1. как запретить системе совершать сделки в первую минуту торгов?
3.2 как указать системе на принудительный выход из позиции перед клирингом и перерывами в сессиях?

4. анализ результативности системы

4.1. что почитать? Smile
4.2. где найти описание показателей по которым в АМИ возможна оптимизация? (которые в настройках тестера задаются на вкладке 'walk forward" -> optimization target.
4.3. какие из показателей стоит отнести к основным и каковы их нормальные величины?
4.4. как можно построить график эквити кроме как на чарте?
4.5. возможно ли автоматизированное помесячное тестирование с разбивкой результатов по месяцам? Например тестим внутридневную стратегию за 3 года, но с учётом того что каждый месяц она начинает с чистого листа.
4.6. почему в репорте я вижу max trade drawdown 30% но в таблице всех сделок самый большой проигрыш по трейду 3,5% ?

уф. вроде пока всё. Простите что так много, хотел сразу всё собрать и структурировать что бы потом не повторятся и избежать путаницы.
Очень рассчитываю на вашу поддержку и консультации.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Май 19, 2010 12:19 pm Ответить с цитатой Вернуться к началу

Попробую побыстрому. Подробно не могу - занят.


Fabio писал(а):

2. настройки тестера

2.1. как правильно настроить в АМИ инструмент для тестирования (ри)?
2.2. как тестировать фьючерс для стратегии работающей на минутках:
    *как отключить плечи и тестировать систему только одним контрактом?
    *как рассчитать (хотя бы примерно) границы ликвидности рынка?
    *как настроить тестирование под установленные границы ликвидности? Например что бы она тестировала систему изменяя сайз с 1го до 10ти контрактов, и больше 10ти не наращивала?


2.1 Если используются стопы ApplyStop() то надо выставить значение TickSize в Information. Там в принципе еще и прибыль надо пересчитывать в рубли и вроде есть такая возможность, но я никогда этим не заморачивался поэтому не знаю.
2.2
*SetPositionSize(1, 4); // один контракт/лот
*только по опыту. Возможный скользяк учитывать по опыту.
*если активно управляешь сайзом, то ту проблем нет. Просто следи чтобы больше 10 не было, а если отдать сайз Ами чтобы торговал на все, но не больше 10 то SetPositionSize(10, 4); включить в настройках тестера опцию Allow position size shrinking


Fabio писал(а):

3. специфичные функции с которыми прошу помочь с кодингом

3.1. как запретить системе совершать сделки в первую минуту торгов?
3.2 как указать системе на принудительный выход из позиции перед клирингом и перерывами в сессиях?

3.1 поставить соответствующий фильтр.
FirstMin = Timenum() == 100000;
Buy = ... AND NOT FirstMin;
3.2 Аналогично
cond = Timenum() = время выхода;
Sell = ... OR cond;
Fabio писал(а):

4. анализ результативности системы

4.1. что почитать? Smile
4.2. где найти описание показателей по которым в АМИ возможна оптимизация? (которые в настройках тестера задаются на вкладке 'walk forward" -> optimization target.
4.3. какие из показателей стоит отнести к основным и каковы их нормальные величины?
4.4. как можно построить график эквити кроме как на чарте?
4.5. возможно ли автоматизированное помесячное тестирование с разбивкой результатов по месяцам? Например тестим внутридневную стратегию за 3 года, но с учётом того что каждый месяц она начинает с чистого листа.
4.6. почему в репорте я вижу max trade drawdown 30% но в таблице всех сделок самый большой проигрыш по трейду 3,5% ?

4.1 Не помню ничего кроме Rоbеrt Раrdo "Dеsign,Теsting аnd Орtimisаtiоn of Тrаding Systеm". Есть в сети на русском.
4.2 См. вложенный файл. Больше не знаю.
4.3 Однозначного мнения нет. Профит фактор, средная сделка... просадка...
4.4 Никак. А чем на чарте не устраивает?
4.5 Я не знаю. Вроде нет.
4.6 Пересидел. Сделка закрылась с небольшим убытком, но в процессе удержания позиции была просадка 30%

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



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

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

Спасибо тебе огромное, великий Угу-Тук, за отзывчивость и помощь Smile Даже такой "не подробный" (ничего себе не подробный) ответ мне очень помог.

Ещё пару моментов возникло

Цитата:
2.1 Если используются стопы ApplyStop() то надо выставить значение TickSize в Information. Там в принципе еще и прибыль надо пересчитывать в рубли и вроде есть такая возможность, но я никогда этим не заморачивался поэтому не знаю.


У если меня реверсивная система и стопов нет?

Цитата:
3.1 поставить соответствующий фильтр.
FirstMin = Timenum() == 100000;
Buy = ... AND NOT FirstMin;
3.2 Аналогично
cond = Timenum() = время выхода;
Sell = ... OR cond;


Опять же как с поправкой на реверс это сделать? У меня сейчас во такой код

Buy=Cover=Cross(C, REV);
Sell=Short=Cross(rev,C);

Я примерно представляю алгоритм проверки на то в какой позиции система. Образно нужно сделать что то вроде

если текущая позиция лонг, то
проверка времени бара, если true, то закрыть лонг
если текущая позиция шорт
проверка времени бара, если true, то закрыть шорт
иначе (позиции не открыты, напр начало дня)
Buy=Cross(C, REV);
Sell=Cross(rev,C);

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


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

СообщениеДобавлено: Чт Май 20, 2010 8:37 pm Ответить с цитатой Вернуться к началу

Fabio писал(а):


Цитата:
2.1 Если используются стопы ApplyStop() то надо выставить значение TickSize в Information. Там в принципе еще и прибыль надо пересчитывать в рубли и вроде есть такая возможность, но я никогда этим не заморачивался поэтому не знаю.


У если меня реверсивная система и стопов нет?


Тогда TickSize не обязательно. TickSize при срабатывании стопов позволяет Ами зять правильную цену с учетом минимального шага цены. Если это не обязательно, то и TickSize в общем не нуна, хотя часто бывает удобна.
Fabio писал(а):

Цитата:
3.1 поставить соответствующий фильтр.
FirstMin = Timenum() == 100000;
Buy = ... AND NOT FirstMin;
3.2 Аналогично
cond = Timenum() = время выхода;
Sell = ... OR cond;


Опять же как с поправкой на реверс это сделать? У меня сейчас во такой код

Buy=Cover=Cross(C, REV);
Sell=Short=Cross(rev,C);

Я примерно представляю алгоритм проверки на то в какой позиции система. Образно нужно сделать что то вроде

если текущая позиция лонг, то
проверка времени бара, если true, то закрыть лонг
если текущая позиция шорт
проверка времени бара, если true, то закрыть шорт
иначе (позиции не открыты, напр начало дня)
Buy=Cross(C, REV);
Sell=Cross(rev,C);

Вот только не могу найти функцию соотв-ю в реверенсе. Которая проверяет текущую позицию. В велсе вроде была ifPositionLong Sad

Нет. Проверять позицию тут не надо. Сделай так
Код:
Buy=Cover=Cross(C, REV);
Sell=Short=Cross(rev,C);
Buy = Buy AND NOT FirstMin;
Short = Short AND NOT FirstMin;
cond = Timenum() = время выхода;v
Sell = Sell OR cond;
Cover = Cover OR cond;

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



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

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

Спасибо Олег.
Насчет чарта эквити я спрашивал потому что дефолтный показывает мне что то странное
Вот скрин. Небольшие лоси в размере 100 рублей почему то на графике просадке значатся как очень значительные (в тысячах рублей). При том что система тестируется одним лотом
А ещё во время сделки эквити незначительно меняется в обе стороны, я бы не удивился если бы оно менялось соотв-но графику и накапливало лось или профит, но оно меняется вообще рандомно

Image
Посмотреть профиль Отправить личное сообщение
Fabio



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

СообщениеДобавлено: Пт Май 21, 2010 6:57 pm Ответить с цитатой Вернуться к началу

Что то всё таки не то у меня с настройками тестера. А что именно я не могу понять. Обновил ами до 5.29, появился эквити чарт в рипорте, но данные какие то странные.

Вот скриншот сделок за 2 дня.

Image

Они либо резко положительные либо резко отрицательные. Плечи отключены, система торгует 1 лот на минутках. Там не может быть такой волатильности.

Или вот например MAE; MFE

Image

Согласно MAE за 2 дня было 85 сделок когда неблагоприятное отклонение было 5%, 55 по 10% и 29 сделок по 15%. Очевидно что за 2 дня такой волатильности не может быть.

Главное что в таблице сделок всё выглядит вроде как и должно, небольшие колебания счета, в среднем меньше одного процента, в деньгах меньше 500 пунктов.

Image

В чем же дело?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Май 21, 2010 11:03 pm Ответить с цитатой Вернуться к началу

У тебя Futures mode включено? Если да, то отключи нафиг.

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



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

СообщениеДобавлено: Сб Май 22, 2010 1:57 pm Ответить с цитатой Вернуться к началу

000 писал(а):
У тебя Futures mode включено? Если да, то отключи нафиг.


Отключил нафиг. Не помогло. Вот ещё что странное заметил:

MAE, MFE как я и говорил показывают какие то удивительные значения. При том что торгуется 1 контракт без плечей на депозите в 200 000.

Image


UPD. Предполагаю что всё дело в TLB графике...
TLB брал убертрейдера, здесь

http://forex.kbpauk.ru/showflat.php?Cat=...true#Post146914

он там в длл, как посмотреть не знаю Rolling Eyes


Последний раз редактировалось: Fabio (Сб Май 22, 2010 2:53 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Fabio



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

СообщениеДобавлено: Сб Май 22, 2010 2:06 pm Ответить с цитатой Вернуться к началу

del


Последний раз редактировалось: Fabio (Сб Май 22, 2010 4:13 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Fabio



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

СообщениеДобавлено: Сб Май 22, 2010 4:01 pm Ответить с цитатой Вернуться к началу

Продолжаю копаться. Скрин выше объясняется всё таки спецификой графика TLB. Эта сделка возникла гораздо раньше.
График упаковывает свечки, он рисует линии только тогда когда выполняются условия трехлинейного прорыва. После этого он рисует бар, если условия не выполняются бар не рисуется. И выходит что нумерацию этих баров ами делает самостоятельно по какому то своему принципу.
Тогда выходит что задавая в тестере дату тестирования например 22 марта, фактически мы тестируем какой то совершенно иной участок графика, который был возможно год назад.

Отсюда возникает вопрос, а как тестировать то? То есть например меня интересует сделка которая на графике TLB прошла 22 марта в 11:05, у которой возникло MAE 10%. Я сопоставляю график TLB графику цены и вижу что ничего похожего на эту сделку там нет. Даже сами цены на 20 000 выше чем на TLB.


Image

У меня за 3 года загружены котировки (минутки), я это проверил в quote editor. Однако на графике TLB АМИ отображает бары начиная с января этого года. Скорее всего по той же причине "упаковывания" баров не удовлетворяющих условию. (Перенёс с паука этот вопрос что бы тема была более полной и там не дублировать всё что здесь напостил)

Image
Посмотреть профиль Отправить личное сообщение
Fabio



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

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

Продолжаю. Убертрейдер любезно согласился и ответил на мои вопросы через ЛС в ЖЖ вот так:

Цитата:
Там несколько тонких монентов:
1. ТЛБ компрессирует график и смещает его в "будущее"
2. Сравнение свечей ТЛБ и обычных на одну и ту же дату неверно,потому что см. п 1.
3. Такие просадки в тестере опять же по причине п. 1
4. Для корректности цен входа/выхода нужно SetOption(PriceBoundChecnting, False);

Чтобы получить корректную картинку, нужно сохранить результаты TLB через ADD To Composite в новый тикер и проводить тесты на нем.


я всё понял, кроме последнего предложения. Прочитал референс по этой функции, а так же вот этот мануал
http://www.amibroker.org/3rdparty/IntroToAtc.pdf

Но так точно и не понял как же я его должен применить в моём случае. ADC во всех примераз рассматривается для создания композитных имндексов, индикаторов и различных мультисканов.

Кто нибудь "переведите" мне с языка гуру на людской чего же мне надо сделать Smile)[/quote]
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Май 23, 2010 10:16 pm Ответить с цитатой Вернуться к началу

Вопрос требует разьяснения и довольно много времени для нормального ответа. Мне сейчас, к сожалению некогда. И до среды точно времени не будет.

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



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

СообщениеДобавлено: Пн Май 24, 2010 11:03 am Ответить с цитатой Вернуться к началу

000 писал(а):
Вопрос требует разьяснения и довольно много времени для нормального ответа. Мне сейчас, к сожалению некогда. И до среды точно времени не будет.


Ничего, будем как в песне:

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

Laughing

Пока что продолжаю углубляться в суть проблемы с ТЛБ.

Совместными c Teema усилиями, мы поняли что надо сохранить весь график ТЛБ через AddToComposite в новый тикер, так что бы в quote editor использовались его котировки

Я попытался проделать это вот так:

Код:
//                                          
//adGraph library                             
//               ported from AFL                      
//                     by Angel's death (c) 2007         


SetBarsRequired(100000,100000);

//   adGraph_TLB - рисует график 3-х линейного прорыва
//      аргументы
//         nLinesToBreak - количество линий для пробития чтобы нарисовать разворот
REV = adGraph_TLB(3);
O = TLBO;
H = TLBH;
L = TLBL;
C = TLBC;
//REV == TLBREV;
//TLBREV - линия показывает уровень пробитие которого будет завершено разворотом

AddToComposite (adGraph_TLB(3), "~TLBcomposite", "X", atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);


В результате получил значения графиках в миллионах и вот такой красивый первый бар:

Image

Пока снова чешу репу Rolling Eyes
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Май 25, 2010 11:54 pm Ответить с цитатой Вернуться к началу

В общем правильным путем движешься...
Подробнее напишу позже, а пока об ошибках и миллионах.

Наверное используешь функцию AddToComposite в индикаторе.
Она работает так, что каждый прогон прибавляет к создаваемому символу нужное число. Вот поэтому при монжестве прогонов и получаются миллионы.
На 100% не уверен, но вроде надо заменить это
Код:

AddToComposite (adGraph_TLB(3), "~TLBcomposite", "X", atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);

На это
Код:

AddToComposite (TLBO, "~TLBcomposite", "O", atcFlagDeleteValues | atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);
AddToComposite (TLBH, "~TLBcomposite", "H", atcFlagDeleteValues | atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);
AddToComposite (TLBL, "~TLBcomposite", "L", atcFlagDeleteValues | atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);
AddToComposite (TLBC, "~TLBcomposite", "C", atcFlagDeleteValues | atcFlagEnableInIndicator | atcFlagCompositeGroup | atcFlagEnableInBacktest | atcFlagEnableInExplore);

Ключ atcFlagDeleteValues сначала удалит старые данные из ~TLBcomposite и тогда они не будут накапливаться.

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



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

СообщениеДобавлено: Ср Май 26, 2010 10:03 pm Ответить с цитатой Вернуться к началу

Олег, спасибо. Теперь тикер создается нормальный, а система стала минусовой Smile скорее всего, теперь всё в порядке )
Однако, я не прикрутил фильтр времени на первую минуту и вечерку, а без этого объективно оценить систему не выйдет.
И прикрутить не получится, т.е. мы работаем уже с упакованными барами, время которых никак не коррелирует со временем нормального графика цены Sad

Вообще, почему бы не реализовать следующим образом- если цена не совершает прорыв, то на графике ТЛБ рисуется такая же линия как и предыдущая. Т.о. он ничего не пробивает и не даёт сигналов и в то же время у нас пропадает "уплотнение" графика цены и есть полная синхронизация баров с ним, т.е. мы можем фильтровать время
Примерно как тут у конкопа реализовано в ренко, http://konkop.narod.ru/renko.htm

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen