Блог им. XXM

Тестирование торговых стратегий в QUIK. Часть 3.

    • 15 марта 2016, 07:57
    • |
    • XXM
  • Еще

                                Устал руками торговать? хочешь уйти от эмоций?
                                © Мурен(а) стих 87805 

часть 1: smart-lab.ru/blog/235774.php  09 февраля 2015, 09:11

часть 2: smart-lab.ru/blog/239387.php  26 февраля 2015, 21:07

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

И направление в этом — одно: автоматизация.
Хорошо, если есть четкое понимание своего привычного метода торговли, которое приносит прибыль — ее будет легко прописать.
Неплохо, также, понимание причин своей убыточной торговли — их не следует включать в правила торговли.
И тяжелый случай, когда описание стратегии занимает час путаного рассказа или многостраничный трактат с нечеткими схемами и противоречивыми выводами.
А ведь куда проще, казалось бы: купить по некоторой цене с тем, чтобы продать дороже, или наоборот — продать с тем, чтобы откупить дешевле.
В алготорговле это звучит так: входим в позицию (лонг или шорт) и через некоторое время выходим, с прибылью или убытком.

Тестирование торговых стратегий в QUIK. Часть 3.

Определимся с терминами: OpenLong, CloseLong, OpenShort и CloseShort — открытие и закрытие лонга и шорта. Закрытие позиций может иметь дополнительные правила, например по прибыли/убыткам: TakeProfit и StopLoss.
Остается написать правила срабатывания этих событий в цифрах цен, значений индикаторов и времени, протестировать на исторических данных, подобрать параметры, при которых стратегия показывает устойчивую доходность, сделать предположение, что эти параметры с большей вероятностью принесут прибыль и запустить в торговлю!
Освоение программ теханализа для тестирования стратегий — полезное дело, но не у всех есть время для этого. QUIK же — всегда под рукой. Вот и займемся составлением правил и тестированием прямо в ней.
Скачиваем тестер: http://www.xsharp.ru/tester, устанавливаем в папку с рабочим QUIK.
Бумага, на которой будем тестировать стратегии — Сбербанк, ОА (SBER, TQBR), тайм-фрейм — один час, идентификатор — prSber.
Напишем в настроечном INI-файле:
Security = SBER, TQBR, prSber, A1
«A1» — двухзначный код этой нашей стратегии. Количество лотов — одна штука: WorkSize = 1.
Стратегия на двух скользящих средних будет описана так:
OpenLong = cross(Moving2,Moving1) (открываем лонг при пересечении скользящей средней Moving2 снизу вверх скользящую среднюю Moving1), и OpenShort = cross(Moving1,Moving2) — наоборот. Включим реверс: Reverse = Y
Добавляем на график индикаторы с идентификаторами Moving1 и Moving2 и торговая стратегия, которой присвоим имя [SB_A1], к тестам готова.

[SB_A1]
Security = SBER, TQBR, prSber, A1
WorkSize = 1
OpenLong = cross(Moving2,Moving1,1)
OpenShort = cross(Moving1,Moving2,1)
Reverse = Y

Результат с 01.01.2015: сделок — 260, результат: 41,68. График прибыли/убытков:

Тестирование торговых стратегий в QUIK. Часть 3.

Для построения графика Equity индикатор LbotEquity берет данные с файла-протокола LbotTest.csv, который создается при работе тестера.
Тайм-фрейм графика может быть любым, так же любыми могут быть параметры индикаторов MA.
Подготовим еще одну стратегию: входы те же, на но выходы другие: с тэйк-профитом и стоп-лоссом в единицах цены:
[SB_A2]
Security = SBER, TQBR, prSber, A2
WorkSize = 1
OpenLong = cross(Moving2,Moving1,1)
OpenShort = cross(Moving1,Moving2,1)
StopLoss = 2
TakeProfit = 3.0, 0.3, 0.2

Третья стратегия основана на индикаторе MACD (идентификатор — macd_Sber), реверсная:
[SB_A3]
Security = SBER, TQBR, prSber, A3
OpenLong = cross(macd_Sber.0, macd_Sber.1)
OpenShort = cross(macd_Sber.1, macd_Sber.0)
Reverse = Y

Четвертая тоже на MACD, но с тэйк-профитом и стоп-лоссом:
[SB_A4]
OpenLong = cross(macd_Sber.0, macd_Sber.1)
OpenShort = cross(macd_Sber.1, macd_Sber.0)
StopLoss = 2
TakeProfit = 5, 0.5, 0.2

Пятая — входы на MACD с применением фильтра из пары скользящих средних:
[SB_A5]
OpenLong = cross(macd_Sber.0, macd_Sber.1) and {Moving1} < {Moving2}
OpenShort = cross(macd_Sber.1, macd_Sber.0) and {Moving1} > {Moving2}
StopLoss = 1
TakeProfit = 5, 0.5, 0.2

Напишем пару стратегий, основанных на фиксированных уровнях:
[SB_A6]
Security = SBER, TQBR, prSber, A6
OpenLong = {Close} < {85}
OpenShort = {Close} >= {105}
CloseLong = {Close} >= {95}
CloseShort = {Close} <= {90}

с выходами по тэйк-профиту или стоп-лоссу:

[SB_A7]
Security = SBER, TQBR, prSber, A7
OpenLong = {Close} < {85}
OpenShort = {Close} >= {105}
StopLoss = 10
TakeProfit = 15, 1, 1

Альтернативный способ описания правил входа в позицию: по лимитированным заявкам BuyAtLimit и SellAtLimit с лимитированными выходами TakeProfitLong и TakeProfitShort (особенность конструктора Lbot3D):

[SB_A8]
Security = SBER, TQBR, prSber, A8
BuyAtLimit = if (0 == 0) then {85}
TakeProfitLong = {105}

[SB_A9]
Security = SBER, TQBR, prSber, A9
SellAtLimit = if (0 == 0) then {110}
TakeProfitShort = {90}

Подключим стратегии торговли в каналах.

В качестве примера — каналы Кёльтнера (идентификатор — Keltner_Sber), индикатор брать можно отсюда: http://smart-lab.ru/blog/315944.php

Приступим.
Лонг от нижней линии канала, продажа — по верхней, фиксированный стоп-лосс

[SB_AA]
BuyAtLimit = if (0 == 0) then {Keltner_Sber.2}
TakeProfitLong = {Keltner_Sber.1}
StopLoss = 2

Лонг от нижней линии канала, с фильтром на MACD, стоп-лосс на MACD

[SB_AB]
BuyAtLimit = if ({macd_Sber.0} > {macd_Sber.1}) then {Keltner_Sber.2}
TakeProfitLong = {Keltner_Sber.1}
StopLossLong = {macd_Sber.0} < {macd_Sber.1}

Следующая пара — аналогичная, но торговля от шорта (шорт от верхней линии канала, откуп — по нижней):
[SB_AC]
SellAtLimit = if (0 == 0) then {Keltner_Sber.1}
TakeProfitShort = {Keltner_Sber.2}
StopLoss = 2

Шорт от верхней линии канала, с фильтром на MACD
[SB_AD]
SellAtLimit = if ({macd_Sber.0} < {macd_Sber.1}) then {Keltner_Sber.1}
TakeProfitShort = {Keltner_Sber.2}
StopLossShort = {macd_Sber.0} > {macd_Sber.1}

Комбинированные стратегии лонг/шорт. Пробой каналов. Лонг при прорыве верхней линии, шорт — от нижней, со стопом 
и трейлинг-профитом:
[SB_AE]
OpenLong = {Close}>={Keltner_Sber.1}
OpenShort = {Close}<={Keltner_Sber.2}
StopLoss = 2
TakeProfit = 3.0, 0.3, 0.2

Внутри канала, на пересечениях цены и линий:
[SB_AF]
OpenLong = cross(Keltner_Sber.2,Close)
OpenShort = cross(Close,Keltner_Sber.1)
StopLoss = 2
TakeProfit = 3.0, 0.3, 0.2

Варианты безиндикаторной стратегии: 
[SB_AG]
OpenLong = {Close, 1} < {High, 2}
; цена Close предыдущей 'полной' свечи превысила High предшествующего ей бара
OpenShort = {Close, 1} > {Low, 6-2}
; цена Close предыдущей 'полной' свечи принизила Low предшествующих пяти баров
StopLoss = 2
TakeProfit = 3.0, 0.3, 0.2

Входы — на свечных комбинациях, стоп и тейк-профиты — в процентах:
[SB_AH]
OpenLong = {Close} > {Low, 5-1}
OpenShort = {Close} < {High, 5-1}
StopLoss = 2%
TakeProfit = 3.0%, 0.3%, 0.2%

Все эти стратегии могут быть протестированы двойным нажатием на одну ячейку: «ТЕСТ»

Тестирование торговых стратегий в QUIK. Часть 3.

Итак, алготорговля — это такая тема, которая любит четкие правила входа и выхода из позиций.
Вариантов — бесчисленное множество.
Ищите свои стратегии, тестируйте. 3000 свечек, которые предоставляет QUIK — немного, с одной стороны, но должно хватить для начала.
В качестве актива можно выбрать любую бумагу, кроме опционов.
Успехов в тестировании и поисках грааля!

★75
27 комментариев
Отличная статья.
А как будет смотреться стратегия пробой максимума из 5 свечей?
avatar
Александр, открытие позиций:

OpenLong = {Close} > {High, 5-1}
OpenShort = {Close} < {Low, 5-1}
---------
закрытие — можно простые:

StopLoss = 3%
TakeProfit = 10.0%, 1.0%, 0.2%

avatar
XXM, Отлично и просто. Спасибо. Все вещи простые не надо придумывать лишнего)).
avatar
XXM, Вопрос по поводу Вашего привода SuperScalp.
Есть одна проблема. Каждый раз при перезапуске Quik не сохраняется положение и размеры таблицы на экране. Их приходится каждый раз настраивать. Если возможно, сделайте  в новой версии, чтобы настройки положения и размера таблицы сохранялись после перезапуска quik. Спасибо.
avatar
vito2000, http://smart-lab.ru/blog/314812.php#comment5408536
Исправьте строку «SetWindowPos(t, 0, 100, 250, 120)» так, как вам будет удобно.

Механизм сохранения положения таблицы во внешнем INI-файле применен в моих Lbot-программах.

xy = 0, 0, 770, 133
top, left, width, height — расположение и размер таблицы робота в QUIK;



avatar
Все хорошо, запятую в ссылках на первые части уберите, переходит на неизвестную страницу.
avatar
Ссылки на первые две части не рабочие (
avatar
да… не работают ссылки=((
avatar
INTELLEKTTRADE, все из-за запятой в конце ссылки уберите ее)
avatar
Побольше бы подобных статей на сл!!!
avatar
valo, согласен: раз в год, хотя бы, один из 10 смарт-лабовцев что-то «подобное». Уже 10 статей в день!!! Читать не перечитать :)
avatar
XXM, почему то не в разделе Алготрейдинг статья. В чем причина?
avatar
valo, чесслово, две попытки сделал  - «не шмогла»
В третий раз, похоже, получилось: тэг «алготрейдинг» был с ошибкой.
avatar
Ссылки на предыдущие посты поправил — запятые убрал.
Сорри, как принято писать в подобных случаях, за причененные неудобства в виде битых ссылок.
avatar
давненько не видел я блок-схем.вспомнилась молодость, институт)))
весь тест ломается, когда доходит до пустой свечи. т.е. Если стратегия использует скажем доп исторические данные, которые создают разрывы в графике цены, то всё, кирдык. )
avatar
Пришлите на почту подробности «ломания»: ini-файл, csv-протокол, скриншот с графиком инструмента и изображение этого, э-э-э, который «всё».
avatar
XXM, тестер тож сломался недавно, перестал запускаться вообще, наверное ограничение пробного периода
avatar
«тестер тож сломался недавно» — в чем это выразилось?
Пришлите скриншот на e-почту. Адрес тут: http://www.xsharp.ru/contacts
Посмотрите протокол работы - LbotTest.csv в каталоге «log». Что там написано? А может этот файл блокирован для записи каким-нибудь ECXEL-ем?
Причин много, почему «перестал запускаться вообще». Вы главное — не отчаивайтесь и не сдавайтесь.
avatar
XXM, системное сообщение квика «Время вышло...»
avatar
Павел Валин, скриншота жалко, да? ;)
Вы, скорее всего, запускаете прошлогоднюю программу.
Какая там версия? Сегодняшняя — в http://www.xsharp.ru/tester — 1.73

avatar
XXM, ыыыыыы, сейчас скачаю
не жалко конечно, я буду только рад если вы устраните эти недочеты, правда пока купить всё равно не смогу ( дороговато для меня, но тестами помогу!!!
avatar
XXM, 
avatar
Павел Валин, 
1. Про какое «дороговато» вы говорите? Тестером я не торгую. Он не продается! ;)
2. Отрицательный результат — уже результат! 
3. Незаданный ваш вопрос — а почему так? Целых минус 71199?
Ответ ищите в у себя в LbotTest.csv.
Если бы вы увидели ошибки при прогоне 17 стратегий, которые приведены тут в примерах или в наборе с тестером на часовиках Сбер ОА, я, скорее всего, смог бы подсказать.
А тут — увы.
avatar
XXM, вы видите разрыв цены? вот в этот момент тестер теряет позицию, и при след сигнале лонг скажем, если смотреть на этит график, будет открыта новая позиция, а стараю посчитается как убыток в 71000, т.к. нет свечи в графике.

avatar
[Si_A1]
Security = SiM6, SPBFUT, SiPrice, A1
WorkSize = 1
OpenSlippage = 10
OpenLong = cross(Close, par_sar)
OpenShort = cross(par_sar, Close)
StopLoss = 500
TakeProfit = 1000, 50, 50
AutoBot = Y
Только что соорудил и запустил. SiM6, минутки, параболик.
©«Нет никакого разрыва!»
И результат, в общем, очень даже ничего.
Возможно, у вас какие-то особые условия, не хотите светить ;)
Тут уж, вслепую, я вам не смогу помочь.
avatar
Вот до чего людей доводят, в квиковские таблички кликать — жесть какая… )
avatar

теги блога XXM

....все тэги



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