Автор |
Сообщение |
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
Простите если дубль, но я не нашел похожих тем в этом разделе. Если есть на форуме такие темы- подскажите пожалуйста где.
Предполагаю, что тема может превратится во что то похожее на ФАК и принести ещё кому нибудь пользу.
Дорогие старшие боевые товарищи, не обойдите вниманием вопросы новичка
Предисловие. Поскольку разработанная стратегия при её безусловной простоте дала подозрительно большие прибыли, я решил что где то подвох в части общего процесса тестирования и прежде чем придумывать и проверять идеи нужно бы разобраться с правильной методикой тестирования.
Возникшие вопросы.
1. данные
Скачиваю с финама склееный фьюч (RI*) с 2007 года.
1.1. Как правильно его подготовить к тестированию?
1.2. Как очистить данные от артефактов?
2. настройки тестера
2.1. как правильно настроить в АМИ инструмент для тестирования (ри)?
2.2. как тестировать фьючерс для стратегии работающей на минутках:
*как отключить плечи и тестировать систему только одним контрактом?
*как рассчитать (хотя бы примерно) границы ликвидности рынка?
*как настроить тестирование под установленные границы ликвидности? Например что бы она тестировала систему изменяя сайз с 1го до 10ти контрактов, и больше 10ти не наращивала?
3. специфичные функции с которыми прошу помочь с кодингом
3.1. как запретить системе совершать сделки в первую минуту торгов?
3.2 как указать системе на принудительный выход из позиции перед клирингом и перерывами в сессиях?
4. анализ результативности системы
4.1. что почитать?
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
|
Попробую побыстрому. Подробно не могу - занят.
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. что почитать?
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
|
Спасибо тебе огромное, великий Угу-Тук, за отзывчивость и помощь Даже такой "не подробный" (ничего себе не подробный) ответ мне очень помог.
Ещё пару моментов возникло
Цитата: |
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 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
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 |
Нет. Проверять позицию тут не надо. Сделай так
Код: |
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
|
Спасибо Олег.
Насчет чарта эквити я спрашивал потому что дефолтный показывает мне что то странное
Вот скрин. Небольшие лоси в размере 100 рублей почему то на графике просадке значатся как очень значительные (в тысячах рублей). При том что система тестируется одним лотом
А ещё во время сделки эквити незначительно меняется в обе стороны, я бы не удивился если бы оно менялось соотв-но графику и накапливало лось или профит, но оно меняется вообще рандомно
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
Что то всё таки не то у меня с настройками тестера. А что именно я не могу понять. Обновил ами до 5.29, появился эквити чарт в рипорте, но данные какие то странные.
Вот скриншот сделок за 2 дня.
Они либо резко положительные либо резко отрицательные. Плечи отключены, система торгует 1 лот на минутках. Там не может быть такой волатильности.
Или вот например MAE; MFE
Согласно MAE за 2 дня было 85 сделок когда неблагоприятное отклонение было 5%, 55 по 10% и 29 сделок по 15%. Очевидно что за 2 дня такой волатильности не может быть.
Главное что в таблице сделок всё выглядит вроде как и должно, небольшие колебания счета, в среднем меньше одного процента, в деньгах меньше 500 пунктов.
В чем же дело? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
У тебя Futures mode включено? Если да, то отключи нафиг. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
000 писал(а): |
У тебя Futures mode включено? Если да, то отключи нафиг. |
Отключил нафиг. Не помогло. Вот ещё что странное заметил:
MAE, MFE как я и говорил показывают какие то удивительные значения. При том что торгуется 1 контракт без плечей на депозите в 200 000.
UPD. Предполагаю что всё дело в TLB графике...
TLB брал убертрейдера, здесь
http://forex.kbpauk.ru/showflat.php?Cat=...true#Post146914
он там в длл, как посмотреть не знаю |
Последний раз редактировалось: Fabio (Сб Май 22, 2010 2:53 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
del |
Последний раз редактировалось: Fabio (Сб Май 22, 2010 4:13 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
Продолжаю копаться. Скрин выше объясняется всё таки спецификой графика TLB. Эта сделка возникла гораздо раньше.
График упаковывает свечки, он рисует линии только тогда когда выполняются условия трехлинейного прорыва. После этого он рисует бар, если условия не выполняются бар не рисуется. И выходит что нумерацию этих баров ами делает самостоятельно по какому то своему принципу.
Тогда выходит что задавая в тестере дату тестирования например 22 марта, фактически мы тестируем какой то совершенно иной участок графика, который был возможно год назад.
Отсюда возникает вопрос, а как тестировать то? То есть например меня интересует сделка которая на графике TLB прошла 22 марта в 11:05, у которой возникло MAE 10%. Я сопоставляю график TLB графику цены и вижу что ничего похожего на эту сделку там нет. Даже сами цены на 20 000 выше чем на TLB.
У меня за 3 года загружены котировки (минутки), я это проверил в quote editor. Однако на графике TLB АМИ отображает бары начиная с января этого года. Скорее всего по той же причине "упаковывания" баров не удовлетворяющих условию. (Перенёс с паука этот вопрос что бы тема была более полной и там не дублировать всё что здесь напостил)
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
Продолжаю. Убертрейдер любезно согласился и ответил на мои вопросы через ЛС в ЖЖ вот так:
Цитата: |
Там несколько тонких монентов:
1. ТЛБ компрессирует график и смещает его в "будущее"
2. Сравнение свечей ТЛБ и обычных на одну и ту же дату неверно,потому что см. п 1.
3. Такие просадки в тестере опять же по причине п. 1
4. Для корректности цен входа/выхода нужно SetOption(PriceBoundChecnting, False);
Чтобы получить корректную картинку, нужно сохранить результаты TLB через ADD To Composite в новый тикер и проводить тесты на нем. |
я всё понял, кроме последнего предложения. Прочитал референс по этой функции, а так же вот этот мануал
http://www.amibroker.org/3rdparty/IntroToAtc.pdf
Но так точно и не понял как же я его должен применить в моём случае. ADC во всех примераз рассматривается для создания композитных имндексов, индикаторов и различных мультисканов.
Кто нибудь "переведите" мне с языка гуру на людской чего же мне надо сделать )[/quote] |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вопрос требует разьяснения и довольно много времени для нормального ответа. Мне сейчас, к сожалению некогда. И до среды точно времени не будет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Fabio
Зарегистрирован: 26.02.2010
Сообщения: 17
|
000 писал(а): |
Вопрос требует разьяснения и довольно много времени для нормального ответа. Мне сейчас, к сожалению некогда. И до среды точно времени не будет. |
Ничего, будем как в песне:
"надо только выучиться ждать,
надо быть холодным и упрямым,
и порой от жизни получать,
радости скупые телеграммы"
Пока что продолжаю углубляться в суть проблемы с ТЛБ.
Совместными 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);
|
В результате получил значения графиках в миллионах и вот такой красивый первый бар:
Пока снова чешу репу |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем правильным путем движешься...
Подробнее напишу позже, а пока об ошибках и миллионах.
Наверное используешь функцию 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
|
Олег, спасибо. Теперь тикер создается нормальный, а система стала минусовой скорее всего, теперь всё в порядке )
Однако, я не прикрутил фильтр времени на первую минуту и вечерку, а без этого объективно оценить систему не выйдет.
И прикрутить не получится, т.е. мы работаем уже с упакованными барами, время которых никак не коррелирует со временем нормального графика цены
Вообще, почему бы не реализовать следующим образом- если цена не совершает прорыв, то на графике ТЛБ рисуется такая же линия как и предыдущая. Т.о. он ничего не пробивает и не даёт сигналов и в то же время у нас пропадает "уплотнение" графика цены и есть полная синхронизация баров с ним, т.е. мы можем фильтровать время
Примерно как тут у конкопа реализовано в ренко, http://konkop.narod.ru/renko.htm
но сам боюсь не справлюсь я опыта маловато |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|