d9e5a92d

Арбузы трейдинга или Daytrading во плоти

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

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

Первая причина касается моего предубеждения насчет скальпирующих стратегий. Ведь чуть ли не математически доказано, что скальпер - это ненадолго. Время жизни стратегии-скальпера определяется личным везением трейдера, применяющего эту стратегию и очень редко превышает срок в два-три месяца. Тем не менее торговый робот, который будет сегодня представлен на суд общественности, как раз к скальперам и относится, пусть его профит не такой уж и маленький - 20 пунктов. И дело здесь еще в том, что система была разработана в далеком 2005-ом году, а обнадеживающие результаты показывает и по сей день.

Вторая причина касается еще одного моего предубеждения - не использовать показания индикаторов на несформированной свече (нулевой бар). Эксперт как раз активно использует показания нулевого бара, но делается это довольно оригинально, что не дает особого повода для обвинений в изобретении «тестерного грааля».

Дабы не тянуть кота за хвост, перейдем к представлению системы. Название у нее простое и незатейливое -. Вот прямо в точку! Явно для того, чтобы никто не подумал, что трейдеры у монитора дрова рубят. Автор скальпера - Collector. Как говорится, фамилию не указали. Результатов тестирования автор не предоставил, поэтому остается только догадываться, на какой валютной паре и каком историческом периоде были добыты первые тестерные успехи.



Тестирование оригинальной версии DayTrading «в наше время» было произведено на таймфрейме М5 и на исторических данных с Ol.01.2009 до 04.12.2009, как обычно на четырех валютных парах-мажорах (рис. 1 - 4).



Рис. 1. Результаты тестирования эксперта DayTrading на паре EURUSD.



Рис. 2. Результаты тестирования эксперта DayTrading на паре USDCHF.



Рис. 3. Результаты тестирования эксперта DayTrading на паре GBPUSD.



Рис. 4. Результаты тестирования эксперта DayTrading на паре USDJPY.

Положительный конечный результат достигнут лишь по одной валютной паре - EURUSD. Все остальные пары показали абсолютную просадку в размере депозита. Да и то, соотношение чистой прибыли и максимальной просадки по паре EURUSD оставляет желать лучшего - 4475 долларов против 8475 долларов, что в итоге дает фактор восстановления меньше единицы (0.53). Тем не менее потенциал у стратегии заметен. Проблемы возникают по двум причинам: слишком частые входы, что уменьшает процент прибыльных сделок, и полное отсутствие уровня стоп-приказа.

С установкой стоп-приказа действительно ничего не поделаешь, так как автор настоятельно советует его не применять, пусть это и противоречит всем принципам надежной торговли. А вот с частотой входа вполне возможно кое-что придумать.

Рассмотрим сигнальную часть стратегии (см. рис. 5).



Рис. 5. Открытие сделок по сигналам стратегии DayTrading.

Эксперт использует данные от четырех индикаторов: Parabolic SAR, MACD, Stochastic и Momentum. Получение значений индикаторов и генерация сигнала очень удобно выделено в отдельную функцию и выглядит так:

void calculateIndicators()

{

macdHistCurrent = iMACD(NULL, 0, 12, 26, 9, PRICE_OPEN, MODE_MAIN, 0); macdHistPrevious = iMACD(NULL, 0, 12, 26, 9, PRICE_OPEN, MODE_MAIN, 1); macdSignalCurrent = iMACD(NULL, 0, 12, 26, 9, PRICE_OPEN, MODE_SIGNAL, 0); macdSignalPrevious = iMACD(NULL, 0, 12, 26, 9, PRICE_OPEN, MODE_SIGNAL, 1); stochHistCurrent = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0); stochHistPrevious = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1); stochSignalCurrent = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0); stochSignalPrevious = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);

// Parabolic Sar Current

sarCurrent = iSAR(NULL, 0, 0.02, 0.2, 0);

// Parabolic Sar Previuos

sarPrevious = iSAR(NULL, 0, 0.02, 0.2, 1);

// Momentum Current

momCurrent = iMomentum(NULL, 0, 14, PRICE_OPEN, 0);

// Momentum Previous

momPrevious = iMomentum(NULL, 0, 14, PRICE_OPEN, 1);

// Check for BUY, SELL, and CLOSE signal

isBuying = (sarCurrent <= Ask && sarPrevious>sarCurrent && momCurrent < 100 && macdHistCurrent < macdSignalCurrent && stochHistCurrent < 35); isSelling = (sarCurrent >= Bid && sarPrevious<sarCurrent && momCurrent > 100 && macdHistCurrent > macdSignalCurrent && stochHistCurrent > 60); isClosing = false;

}

Для сигнала к покупке необходимо, чтобы текущее значение Parabolic (на нулевом баре) было меньше цены Ask и при этом предыдущее значение SAR было больше текущего. То есть значения Parabolic должны последовательно уменьшаться, либо должна произойти смена направления движения значений индикатора. Далее текущее значение Momentum должно быть меньше 100, а гистограмма MACD должна находиться ниже сигнальной линии MACD. И в довершение, значение главной линии Stochastic должно быть меньше 35.

Как было упомянуто выше, автора трудно упрекнуть в манипулировании тиковыми данными, так как значения как минимум двух индикаторов - MACD и Momentum -используются неизменные, так как посчитаны по ценам открытия. Это позволяет беспрепятственно учитывать их значения на нулевом баре. Насчет Parabolic SAR тоже тяжело придраться, так как цену, на которой произошла смена направления индикатора, можно легко определить визуально по графику. Правда, именно в данной формулировке смущает сравнение цены с Ask. В итоге получается, что позиция может открыться гораздо раньше реального пробития точки Parabolic SAR. Этот момент легко исправить в новой версии советника, где сравнение будет происходить с ценой открытия свечи.

Единственный индикатор, на который можно «спустить всех собак» - Stochastic. На истории довольно тяжело визуально найти моменты, когда значение индикатора забегало за уровень, а потом возвращалось на свое место. А ведь такое забегание приводило к открытию позиции. Ну что же, оставим этот лакомый кусочек для критиков.

Вернемся к генерации сигналов. Сигнал к продаже поступает, когда текущее значение Parabolic превышает цену Bid, а предыдущее значение SAR оказывается меньше текущего. При этом индикатор Momentum находится выше линии 100, Stochastic - выше 60, а гистограмма MACD превышает свою сигнальную линию.

Как видим, сигналы полностью противоположны друг другу и рассчитаны на коррекцию трендового движения, которая определяется лишь по одному индикатору - Parabolic SAR. Все остальные индикаторы просто идентифицируют сложившееся движение.

В приведенной функции расчета сигнала calculateIndicators бросается в глаза избыточность расчетов индикаторов. Так, значения переменных macdHistPrevious, macdSignalPrevious, stochHistPrevious, stochSignalPrevious и momPrevious абсолютно нигде не используются и только занимают лишнее время при тестировании. Поэтому в новой версии советника они будут исключены. Еще одна переменная, которая, как оказалось, ничего и нигде не решает - IsClosing. Она тоже будет исключена. Также будет исправлено ложное пробитие точки Parabolic при генерации сигнала к покупке. В итоге сигнальная часть станет выглядеть так:

void calculateIndicators()

{

macdHistCurrent = iMACD(NULL, 0, FastMACD, SlowMACD, SignalMACD, PRICE_OPEN,

MODE_MAIN, 0);

macdSignalCurrent = iMACD(NULL, 0, FastMACD, SlowMACD, SignalMACD, PRICE_OPEN,

MODE_SIGNAL, 0);

stochHistCurrent = iStochastic(NULL, 0, KStoch, DStoch, SlowingStoch, MODE_SMA, 0,

MODE_MAIN, 0);

// Parabolic Sar Current

sarCurrent = iSAR(NULL, 0, SARStep, SARMax, 0);

// Parabolic Sar Previuos

sarPrevious = iSAR(NULL, 0, SARStep, SARMax, 1);

// Momentum Current

momCurrent = iMomentum(NULL, 0, MomPeriod, PRICE_OPEN, 0);

// Check for BUY and SELL signal

isBuying = (sarCurrent < Open[0] && sarPrevious>sarCurrent && momCurrent < 100 && macdHistCurrent < macdSignalCurrent && stochHistCurrent < 35);

isSelling = (sarCurrent > Open[0] && sarPrevious<sarCurrent && momCurrent > 100 && macdHistCurrent > macdSignalCurrent && stochHistCurrent > 60);

}

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

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

Проверим же, насколько лучше или хуже стала стратегия, реализованная в роботе . Период тестирования выбран такой же: 01.01.2009 - 04.12.2009. Таймфрейм М5 (см. рис. 6 - 9):



Рис. 6. Результаты тестирования эксперта DayTrading_edit на паре EURUSD.

Количество сделок на EURUSD уменьшилось в полтора раза. Но это обстоятельство принесло свои плоды - максимальная просадка снижена до 737.06 (более чем в 10 раз!). Правда и чистая прибыль соответственно стала меньше - 1147.67. В результате фактор восстановления вырос в три раза до 1.56. Следующим улучшением стал рост числа прибыльных сделок. Раньше они составляли 83% от общего количества, а теперь почти 87%. Да, совсем немного, но как преобразились результаты! Также стоит отметить рост максимального количества прибыльных сделок подряд. В первой версии мы могли рассчитывать лишь на 21 успех подряд. В новой же версии мы замахнулись на 52 прибыльные сделки к ряду.



Рис. 7. Результаты тестирования эксперта DayTrading_edit на паре USDCHF.

Франк не поддержал оптимистичный порыв евро, но, учитывая первый результат, где в конце тестирования мы наблюдали бублик вместо депозита, удержание в пределах начального значения можно считать успехом. Максимальная просадка невелика - 765.17, хотя и без конечной прибыли -217.31.



Рис. 8. Результаты тестирования эксперта DayTrading_edit на паре GBPUSD.

Еще хуже чувствует себя стратегия на фунте, хотя, опять же, все познается в сравнении (держим в уме первый результат). Но в любом случае здесь можно констатировать, что «пациент скорее мертв, чем жив».



Рис. 9. Результаты тестирования эксперта DayTrading_edit на паре USDJPY.

Если сравнивать рис. 8 и 9, то можно испытать чувство дежа-вю - настолько они похожи. Соответственно, выводы по иене будут точно такими же.

Заключение

Исходя из приведенных результатов, можно заключить, что скорее всего советник разрабатывался исключительно для пары EURUSD, так как прибыль видна и в 2005-ом году, и в 2009-ом. Другое дело, что реальное использование стратегии несет в себе огромный риск, так как изначально невозможно определить точку выхода из убыточной сделки. Ее можно лишь оценить после проведения тестирования. Ну а чисто по-человечески, думаю, очень многим хотелось бы понаблюдать на своем реальном счете серию прибыльных сделок в количестве 52 штук...

Файлы для скачивания:

-- развернутые результаты тестирования советников;

-- оригинальная версия советника;

-- переработанная, исправленная и дополненная версия

стратегии.







Содержание раздела