В прошлой части -
http://smart-lab.ru/blog/98349.php — мы остановились на фильтрации входа по направлению свечи. В лонг только на белых, в шорт на черных.
И получили следующий результат:
Поработаем далее с этим фильтром. Посмотрим, может не стоит браковать все направленные свечи. Может стоит лишь браковать те свечи, тело которых начинается с определенной части свечного диапазона. К примеру, если свеча черная, а её открытие произошло ближе к середине диапазона или даже ниже, то, соответсвенно, по всем понятиям свечного анализа мы имеем дело с сильным продавцом. Но как нам опеределить ту грань, за которой должно происходить открытие? Понятно, тут надо прибегать к оптимизации. Т.е. путем перебора всех возможных значений получить то, которое дает лучший результат.
Код нашего фильтра будет выглядеть следующим образом для лонга:
anBC2 = C < O AND O > (H — (((H-L)/100)*n1));
И для шорта:
anSC2 = C > O AND O < (L + (((H-L)/100)*n2));
Полученные оптимизационные значения:
n1 = Param («n1», 89, 1, 100, 1);
n2 = Param («n2», 37, 1, 100, 1);
Итоговые сигналы выглядят следующим образом:
Buy = BC1 AND BC2 AND (BC3 OR BC4) AND BC6 AND TM2 AND !BeginDay AND !anBC2;
Short = SC1 AND SC2 AND (SC3 OR BC4) AND SC6 AND TM2 AND !BeginDay AND !anSC2;
Sell = TM OR LO3pr OR LO4loss;
Cover = TM OR SO3pr OR SO4loss;
Результат эквити:
Теперь маленько вернемся в начало. Я совсем не дал понятие основ, на которых изначально строилась данная торговая система. Всё я, конечно, раскрыть не могу, но основы ТС следующие: выявляются экстремумы цены и проверяется наличие дивергенции с… С чем? А вот это уже сама суть. Скажем так, на текущий момент индикаторов там нет.
Но они заставили себя появиться. За это время я исчерпал известные мне возможности фильтровать входы/выходы без использования линейных индикаторов. Если кто подскажет что-то еще, буду признателен. Но пока так. Посему решил попробовать — даст ли нам что-то добавление в систему ииндикаторов. К примеру, в моменте проверки дивергенции.
Возьмем индекс случайного блуждания (RWI). Он имеет два параметра. Фильтровать будем как дивергенцию индикатора с ценой. Проведем оптимизацию и получим:
Также здесь был введен еще один фильтр по дивергенции, но то не линейный индикатор.
Код выглядит уже так:
Buy = BC1 AND BC2 AND (BC3 OR BC4) AND BC6 AND BC10 AND BC11 AND TM2 AND !BeginDay;
Short = SC1 AND SC2 AND (SC3 OR BC4) AND SC6 AND SC10 AND SC11 AND TM2 AND !BeginDay;
Sell = TM OR LO3pr OR LO4loss;
Cover = TM OR SO3pr OR SO4loss;
Теперь подумаем — а что конкретно мы улучшали данным действием? Мы пробовали добиваться более правильных входов. Ведь добавляя входной фильтр, мы уменьшаем кол-во входов, надеясь на вычленение наиболее успешных. Так и есть. Если в первом случае (где мы фильтровали по диапазону тела свечи) количество сделок получалось 181. Из них 73 выигрышные, то с добавлением входного фильтра число сделок уменьшилось до 105. А средний профит/лосс вырос с 0.11% до 0.19%.
Но очевидно, что работать можно не только со входами, но и с выходами. Попробуем сделать так, чтобы по возможности, при наличии поступательного движения мы брали большую его часть. Будем выходить тогда, когда настрой толпы меняется на противоположный нашей позиции. Исходить будем из системы с фильтром по открытию свечи относительно всего свечного диапазона.
В коде происходит замена условия выхода:
Buy = BC1 AND BC2 AND (BC3 OR BC4) AND BC6 AND TM2 AND !BeginDay AND !anBC2;
Short = SC1 AND SC2 AND (SC3 OR BC4) AND SC6 AND TM2 AND !BeginDay AND !anSC2;
Sell = TM OR LO3pr2 OR LO4loss;
Cover = TM OR SO3pr2 OR SO4loss;
В итоге получаем:
К сожалению, здесь также используется оптимизация параметра выхода. Ибо, если брать исходные данные без сглаживания, будет слишком много ложняков.
Вот такой расклад мы имеем. С одной стороны последний вариант более результативен по сравнению с линейным индикатором. Однако расклад по просадкам несколько удручает. Да и сделок тут больше — 148.
Продолжаем мыслить...