Блог им. npokypatop

Интересно мнение алготрейдеров со стажем

Всем привет. 

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

Робот под ТСлаб. Оттестирован на 2х инструментах. Ри и Си. 
Тестировал на истории 3 года. 
Оптимизируемых параметров 5 (3 из них для трейла).

Размер проскальзывания установил 70п для тестирования Ри (достаточно ли?)
var comisHnd = new AbsolutCommission() {Commission = 35};

Планирую торговать 12 контрактов. Депо 1 млн. Риск на сделку 2% от депо.
Стоп для Ри 1750 пунктов.
Максимальная просадка на 3 летнем периоде составила 27%.

Интересно услышать мнения и предостережения людей по поводу подводных камней с которыми могу столкнуться.
Из того что смущает меня самого:

1. Скрипт не открывается на первом утреннем часе, но может быть в позиции в это время. Побаиваюсь, что могу пролететь со стопом.
2. Пока не понял, как часто нужно обновлять оптимизируемые параметры и на какой истории это делать.
3. Как понять, что скрипт перестал работать (после какой просадки нужно его останавливать).
4. На какие параметры нужно обращать внимание при тестировании будущих скриптов, кроме макс просадки и доходности?


Интересно мнение алготрейдеров со стажемИнтересно мнение алготрейдеров со стажем
★7
81 комментарий
стопы убери… это пятка ахилеса)
avatar
Федор, стопы убери, а что делать как их заменить
avatar
Прогнать робота с меньшим депо. Вполне вероятно выявятся слабые звенья.
1. Со стопом обязательно пролетите (не один раз и не только на первом часе) — это нормальная история, не надо этого бояться, надо к этому быть готовым.
2. Хоть каждый день. Всё зависит от того, каков физический (финансово-экономический) смысл этих параметров и аналогично каков смысл процедуры оптимизации (не математическо-вычислительный, а опять же физическо-финансовый).
3. Достоверно (с вероятностью 1) никак. Это, скорее, вопрос психологический.
4. Средняя сделка, профит-фактор и фактор-восстановления. Однако, намного важнее и полезнее смотреть не на формально голые числа каких-либо показателей, а индивидуально просмотреть каждую сделку на истории, чтобы четко понимать, где и за счет чего ваша система зарабатывает и теряет.

P.S. Единственное, что может вам помочь — это уверенность в двух моментах:
1. Ваша система основана на закономерности, присущей Ри и Си.
2. Ваша система не запоминает удачные входы-выходы на предыстории, а эксплуатирует найденную в п.1 закономерность.
3. Результаты системы на истории не являются ошибкой вычислений (заглядывание в будущее) или сделками, которые невозможно исполнить в реальных торгах.
Собственно, для проверки того, что система не сломалась, вам необходим тест, который вы, условно говоря, проводите с каждым новым тактом (баром), чтобы убедиться в том, что закономерность на рынке осталась и нужно продолжать торговать, не взирая, скажем, на текущую просадку в 35 или 40%.
avatar
Для 12 контрактов 70 пунктов «за глаза», но стоп в пунктах — это ошибка. Он должен зависеть от волатильности.
avatar
А. Г., согласен.
Он должен либо быть очень коротким, либо привязываться к волатильности. Как вариант, можно цеплять за хай/лоу нескольких предвходных баров или экстремумов (таким образом тоже учитывается текущая волатильность).
avatar
А. Г., согласен. Стоп вообще должен быть аварийным- то есть большим. Остальное все должно просчитываться и стоп и тейк и переворот по условиям. просадка огромная для алгоритма. И период надо брать весь!!! а отдельные участки не показательны! И параметр оптимизации настраиваемый лучше один:-) и этот алгоритм- туфта одним словом, увы. Таких алгоритмов тысячи и они ни о чем. ЭтоТ со 100 проЦ вероятностью будет сливать счет
avatar
Oleg Only Algo,

Это от системы зависит. Если трендовая, то стоп должен быть к*волатильность (к — параметр в бОльшей степени зависит от психотипа трейдера). А если контртренд, то стоп — это факт наличия тренда, т. е. сравнительно далекий.
avatar
А. Г., а волатильность как считаете? по ATR, sigma и за какой период?
avatar
SciFi, 

Ни то, ни другое и не третье, но это и не столь важно при наличии коэффициента k
avatar
Oleg Only Algo, как считать тейк? 
avatar
средний П/У маленький. не понятно насколько сильна подгонка. нужна стата с форвард теста.
avatar
Начните торговать 1 контрактом. Сразу и увидите все косяки
avatar
«3. Как понять, что скрипт перестал работать (после какой просадки нужно его останавливать).»

Когда просадка превысит тестовую на истории — в вашем случае за три года.
avatar
Просадки как по величине, так и по времени такие, что я бы думал не о том, когда робота останавливать, а… зачем его в таком виде запускать.
Запустить и через год остановить с убытком 30-40-50% вероятность более 50% (не математически, а чисто логически) — это ж ведь не ваша цель?

PS: меня нельзя считать алготрейдером со стажем, так что…
Можете считать, что это мнение ПРОСТО трейдера )
avatar
Бл.опять двадцать пять. Да усе уже давно протестировано…
avatar
Не разбирался с tslab поэтому на всякий спрошу. Комиссия вся учтена?
avatar
Последний максимум эквити 07/2015 пол года назад… Готовы ждать пол года еще?
avatar
если это ваш самый первый робот и вы без опыта, то рекомендую 
-запустить робота который сделали и не разу не вмешаться в его торговлю
-столкнутся с множеством различной степени косяков технической стороны и решить их с приемлемым для вас уровнем остаточного техн. риска
-думать
-писать параллельно с этим других роботов, много роботов, по сути большая часть вашего времени должна быть занята исследованиями
-чтобы понять какие метрики оттестированной стратегии важны, то тестируйте на истории до 15 или 14 года, а потом смотрите чтобы было в эти года, что изменилось, какие чувствительные метрики в ваших стратегиях (одна из ключевых это вола, выше уже подсказали)
-учить апи тслаба, сишарп, теор.вер., эконометрику
дальше сами поймете что вам делать
avatar
Hallibėrton, так рассуждают только те кому не суждено разобраться в теме
avatar
в роботе у меня стопов нет, закрываю лимитками по закрытию свечи (минутка?) стопы это не совсем честно.
проскальзывание 70 пунктов выглядит даже излишним, хотя это зависит. в РИ в принципе более менее ликвидно.
какие параметры смотреть — вам решать. выглядит всё неплохо, хорошее мат ожидание, высокий фактор восстановления. можно ещё сортино посчитать. 
вообще же всё зависит что за стратегия. у каждой стратегии своя фитнес функция, по-моему.

avatar
делай не на истории робота а за месяц до начала жизни контракта. Переносы через день лучше не делать чтобы не нервничать.
avatar
Для начала запусти бота на 1 контракт так ты познаешь все косяки. Сделай второго другого бота и запусти его опять же на 1 контракт — чем больше разных ботов тем надежнее 
кстати всегда хотел спросить, Wealthlab профит в сделке показывает к бюджету сделки или к общему бюджету?
avatar
я бы не запустил такую страту на реальные торги.
avatar
SECRET, из-за последней пилы или общей просадки?
avatar
ПBМ, кривая эквити. мне больше по душе вот такие:
avatar
SECRET, а если комиссию вычесть?))
PS: а картинками мы и сами богаты...
Бабёр-Енот, комиссия уже вычтена.
avatar
Бабёр-Енот, 
avatar
Много чего не учтено, и много дельных советов. Я даже по-хорошему удивлен. Повторяться не буду:

1.  Запустите ЛЮБОГО робота на реале, одним лотом. Feel that. )))

2. Роботы, которые сидят по полгода в +- 0 не достойны реальных счетов. Проверено лично и на очень большом депозите. Соответственно, совет:

3. Опираясь на логику, построенную в роботе, найдите объяснение рывкам по прибыли и убыткам. Именно рывкам, резким приростам или убыткам. Все остальное шум. Если не сможете выявить закономерность, в мусорку. Если сможете — вуаля, это будет толковый робот. )

Сложность такой оценки заключается в том, что рывки могут быть связаны с какими-то факторами, не заложенными в базовую логику. Но с таким подходом к самой роботизации изменится подход к оценке качества и логике самих роботов.
avatar
facevalue, не, одним лотом не прочувствовать… надо хотя бы двумя! иначе...
… не прочувствовать ту жопу, что начинается внутри у робота при частичном исполнении заявок… ^^'
Бабёр-Енот, Весьма согласен. ) Но я это написал для того, чтобы человек с минимальным риском вообще почувствовал каково это. А логика с частичным исполнением — это отдельная статья для обсуждения. Мы в свое время столкнулись с этой проблемой не на шутку, но решение было найдено. )
avatar
А разделение истории на IS/OOS периоды было?
avatar
Chepell, IS/OOS это что?
avatar
 И да, самый большой обман — результат на большом временном периоде. В следствие чего получается вот такая статистика. Глобально прирост, но по факту пила с рывками. Тестировать полезно на отдельных участках, зачастую к чему-то привязанным. Например, на фьючах это может быть банальная экспирация. Или отдельно сознательно вырезанные участки графика. Например, на аптренде вот такая стата. Окей, выпиливаем, вставляем в флет. Какая стата? И т.д.
avatar
 А данные для тестирования с Финама скачаны?
avatar
Олег Бу, что плохого в финамовских данных? периоды «склеивания» фьючей?
avatar
Cheshirscy, Да, смотрю на периодичность просадок. Поxоже на то.
avatar
Олег Бу, ну это все от тайм фрейма завист.  Если внутри дня… то и фиг с ним
а вообще у меня когда вот такое было

function isLastContractDay()
{
CyrDateNum = DateNum();
result = ( CyrDateNum == 1080307)
|| (CyrDateNum == 1080607)
|| (CyrDateNum == 1080912)
|| (CyrDateNum == 1081209)
|| (CyrDateNum == 1090306)
|| (CyrDateNum == 1090609)
|| (CyrDateNum == 1090909)
|| (CyrDateNum == 1091209)
|| (CyrDateNum == 1100309)
|| (CyrDateNum == 1100609)
|| (CyrDateNum == 1100909)
|| (CyrDateNum == 1101209)
|| (CyrDateNum == 1110309)
|| (CyrDateNum == 1110609)
|| (CyrDateNum == 1110909)
|| (CyrDateNum == 1111209)
|| (CyrDateNum == 1120307)
|| (CyrDateNum == 1120609)
|| (CyrDateNum == 1120907)
|| (CyrDateNum == 1121207)
|| (CyrDateNum == 1130307)
|| (CyrDateNum == 1130607)
|| (CyrDateNum == 1130909)
|| (CyrDateNum == 1131209)
|| (CyrDateNum == 1140305)
;

return result;
}

avatar
Cheshirscy, я по кубикам)
avatar
Не знаю на каком таймфрейме робот, но будем считать, что на часовиках. 


1. Скрипт не открывается на первом утреннем часе, но может быть в позиции в это время. Побаиваюсь, что могу пролететь со стопом.

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


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

Вот, вроде простой вопрос, а мне говорит о том, что такого робота рано включать в торги. Вопрос, говорит о том, что стратегия не проходила тест на подгонку параметров. В разных торговый программах это по разному называется, но суть такого теста в следующем: Берем 2 периода, первый — это период, на котором будем рассчитывать параметры (например 3 года), второй период — это период, в котором будем торговать по рассчитанным параметрам (например 3 месяца). И прогоняем с начала времен + большой период. для РТС будет выклядеть так:
InSample: 2005.01 -2008.12  OutSample 2008.01.01 — 2008.03.31
InSample: 2005.03 -2008.03  OutSample 2008.03.01 — 2008.06.30
И.т.д
Причем нас будет интересовать, только те цифры, что появятся в OutSample. Меняя эти периоды — сам поймешь, через какое время надо пересчитывать параметры. 


3. Как понять, что скрипт перестал работать (после какой просадки нужно его останавливать).

На тестах есть параметр — максимальная просадка. Как только в реале макс просадка стала больше тестовой — останавливай.

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

4. На какие параметры нужно обращать внимание при тестировании будущих скриптов, кроме макс просадки и доходности?

Это кому как нравится, для меня любимый параметр CAR/MD, т.е. среднегодовая доходность деленная на макс просадку
avatar
 Ну и самое главное. ТСЛаб, это не программа для тестирования стратегий, это программа для торговли, а это, как говорят в Одессе, 2 большие разницы. Нужны 2 проги. Первая — это серьезная программа именно для тестирования стратегий (Wealth lab, AmiBroker и т.д.) вторая — именно торговый робот, который повторяет ОТТЕСТИРОВАННЫЙ алгоритм на реальных торгах. Сейчас это возможно и в квике и в транзаке и в тслабе. 
avatar
Cheshirscy, не понял а чем плох тслаб для тестирования? объясните на пальцах…
Дмитрий Черников, В нем есть is/oos анализ? Он умеет вытаскивать данные из внешних баз данных? В нем есть возможность добавить свои параметры в итоговый отчет по стратегии? В нем есть генетические алгоритмы оптимизации? Это просто вопросы, я его года 2 назад смотрел. Может сейчас там все это и есть…
avatar
Cheshirscy, все верно говоришь! У самого так реализовано, рисеч в мультичартсе и переписывание для торговли под тслаб.
avatar
Cheshirscy, +++
avatar
Оптимизируемых параметров 5


В этом будут сбои, т.к. переоптимизация системы несет убытки, имхо. Надо пробовать работать без оптимизируемых параметров. 
avatar
MyProfit, Многовато, конечно, но надеюсь, если автор прогонит на  InSample OutSample — сам все поймет
avatar
да я думаю, сойдет для сельской местности...
1 контракт на 100к вы по крайней мере сразу не сольете...
а со временем еще чё-нить придумаете.
Фактор восстановления маленький, как и процент выигрышных сделок. 5 оптимизируемых параметров это вообще перебор. Зачем 3 года тестов, запусти с этими параметрами на последнем, предпоследнем фьюче и выбери разные участки с трендом вверх вниз и флетом, затем участок с всеми тремя составляющими.
avatar
Спасибо всем ответившим, завтра запущу на одном контракте «на посмотреть», параллельно попробую разобраться с вашими советами по IS/OOS, привязке к волатильности и само собой поиск новых идей для воплощения в робота. Кстати если говорить о привязке к волатильности, то за какой период посоветуете брать ATR?
avatar
Маловато одного алгоритма ддя торговли, тем более такого. Он сам по себе может и не плох, но судя по графику, «берет» только в определенную фазу рынка.

Нужно торговать портфель алгоритмов, которые в идеале не скоррелированны. Какие это алгоритмы?

Трендовые.
Контртрендовые.
Инвесторские.
Консервативные.

Диверсификация ключ к успешной долгосрочной торговле.
avatar
Насчет трейла. Я в свое время провел массу тестов. В хороших трендовых алгоритмах трейл только ухудшает ситуацию. Попробуйте fixed в пунктах или в единицах волатильности, может будет лучше. Оптимизация трейла — это всегда путь в к подгонке кривой, потому что он зависит от максимумов и минимумов  «короткой» волатильности.
avatar
Denis Gabaydulin, спасибо, попробую. Понимаю, конечно, что один робот — это мало, но это только первый шаг)
avatar
Denis Gabaydulin, у меня трейлы работают только на IS ))
avatar
Еще вопрос в догонку — сколько строк кода занимают ваши зарабатывающие роботы? Минимум, максимум и в среднем?
avatar
Не так уж и много. Сотни. В tslab мощный API. Также у меня есть свой собственный framework поверх tslab.
github.com/sherman/onTSLab ( публичная часть).

Все reusable части я выношу в библиотеки.
avatar
Denis Gabaydulin, плюсую, у меня тоже сотни, ноя через транзак. Там реюзебл не вынесешь. Т.е 500 600 строк. И львиная доля того, что повтопяется от робота к роботу
avatar
reusable это методы, которые вызываются в скрипте несколько раз?
avatar
Andrey, можно использовать в разных алгоритмах. Там не только метожы, а целые классы или даже библиотеки. Я выше ссылку кидал.
avatar
Занимаюсь алготрейдингом больше года. Мои советы:

1. Не используй TSLab для реальной торговли — он глючный очень. Используй для бек-тестов. Для реальной торговли я пишу код сам с нуля практически, в котором все понимаю до запятых.

2. Не торгуй сразу большим объемом. Первый месяц (как минимум) торгуй 1 лотом.

3. Не пользуйся трейлинг стопом — у него нет физического смысла, тебя будут снимать с тренда через большие шипы в твою сторону. Цена двинулась в твою сторону резко, потом резко откатилась и ты закрываешься. Научись подтягивать стоп по уровням. 

4. Сначала торгуй 1 роботом на 1 инструменте 1 лотом. Сфокусируйся на 1 алгоритме, доведи его исполнение до совершенства. Когда выйдешь в плюс, начинай раскручивать маховик. 

Пиши больше о своей торговле, дам больше советов. Но пока вот эти.
avatar
SciFi, ну насчет глючности разные мнения есть. меня например не подводит. Для тестов, как раз таки ТСЛаб менее всего подходит, Амиброкер и Велс-Лаб дадут ему фору. Ну это все Имхо конечно. 
А стоп по по уровням это как? Чем от трейлинга отличается? 
avatar
Ivor, трейлинг стоп — в квике по крайней мере это такой стоп, который закрывает позицию, если цена откатывается от своего максимума (в случае лонга) на определенную величину, называемую отступом. А скользящий стоп, который я рекомендую, — это стоп, который закрывает позицию, если цена откатывается ниже предыдущего минимума (в случае растущего тренда). 
avatar
SciFi, а можете поделиться кодом? 
avatar
Ivor, 

' Если есть активная позиция, и есть стоп, сверяем стоп с теоретическим стопом и если они не равны, удаляем стоп. Потом он выставится в следующей функции.
' При этом должно пройти достаточно много времени с последнего сдвига стопа и предыдущий стоп не должен быть нулевой
IF (TOTAL_NET <> 0) AND (STOP_ORDER_COUNT <> 0) AND (OPEN_ORDERS == 0) AND (NEW_STOP_ALLOWED == 1)
IF (TOTAL_NET > 0)
STOP_LOSS_ACTIVATION_PRICE = PREV_LOW_PRICE — ABS_STOP_LOSS
' Если в длинной позиции новый стоп выше предыдущего и позиция прибыльная, удаляем стоп
IF (STOP_LOSS_ACTIVATION_PRICE > STOP_LOSS) AND (PREV_CLOSE_PRICE > LAST_TRADE_PRICE)
KILL_ALL_STOP(1) ' Удаляем все активные стоп-заявки

MSG = ROBOT_NAME & ": Стоп перемещен. " & GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
MESSAGE (MSG, 1) ' 1 — информация, 2 — внимание, 3 — ошибка

END IF
END IF

IF (TOTAL_NET < 0)
STOP_LOSS_ACTIVATION_PRICE = PREV_HIGH_PRICE + ABS_STOP_LOSS
' Если в короткой позиции новый стоп ниже предыдущего и позиция прибыльная, удаляем стоп
IF (STOP_LOSS_ACTIVATION_PRICE < STOP_LOSS) AND (PREV_CLOSE_PRICE < LAST_TRADE_PRICE)
KILL_ALL_STOP(1) ' Удаляем все активные стоп-заявки

MSG = ROBOT_NAME & ": Стоп перемещен. " & GET_VALUE(TRANS_RESULT, «DESCRIPTION»)
MESSAGE (MSG, 1) ' 1 — информация, 2 — внимание, 3 — ошибка
END IF
END IF
END IF

avatar
SciFi, спасибо! будем разбираться. 
avatar
внимательно изучите запуск робота в реальную торговлю. там много тонких настроек. и он отличается в программном коде от исторического робота. в частности цикл перебора исторических баров надо убрать. 
avatar
и кстати, просадка великовата, и профит фактор маловат. 
Но, советую запустить робота малым лотом, чтоб прочувствовать реальную торговлю. Чтобы потом было минимум сюрпризов, когда напишете стратегию получше, которой можно доверить суммы побольше. Про лям пока забудьте)) 
avatar
 и еще. совет, который поможет если не заработать, то хотя бы не слить. Используйте форвард тест. т.е. грубо говоря, потестили стратегию до 1 июля 2015 года, нашли оптимальные параметры, и далее с этими параметрами запустите с этого числа по сегодняшний день и посмотрите что получиться. Многие утверждают, что это фигня, но с ним ка то спокойнее. 
avatar
Ivor, спасибо большое, а какой профит фактор и просадку считаете допустимыми для своих скриптов?
Кстати вчера наткнулся на стратегию «черепах» в инете. Буду пробовать кодить ее.
Ктонибудь ее уже делал? Какие результаты она дает?
avatar
Andrey (npokka), Поздновато конечно уже отвечаю. Но тестирую на баксе рубле и евро рубле — тебе понравится :)
avatar
Cheshirscy, ничего не понял ))) Можно еще раз?)
avatar
Andrey (npokka), это я про черепах
avatar
Cheshirscy, покажешь эквити?)
avatar
Мусор. Вот секрет с бабром-енотом — шарят.
avatar

теги блога Andrey (npokka)

....все тэги



UPDONW
Новый дизайн