Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Тесты торговых стратегий на C# (платный раздел) arrow Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии
01.03.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии Печать E-mail
Автор megabax   
12.12.2013 г.
New Page 1

Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии

Что бы смотреть урок полностью, а так же скачать исходники к уроку, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Исходники у уроку можно скачать в платном разделе.

В рамках этого урока мы проведем анализ, реально ли вообще заработать на выбранной нами стратегии (Пересечение мувингов). Сначала мы оптимизируем параметры на длительном периоде времени, посмотрим график. Затем оптимизируем на половине этого периода, но торговать с оптимизированными параметрами будем на другой половине. В качестве тестируемого инструмента возьмем фьючерс на золото, таймфрейм 1 минута, история с 01.01.2012 по 30.05.2013 16:51. Цена на золото задана в долларах, поэтому технические расходы тоже посчитаем в долларах, это 4 руб. (комиссия) + 0.2$  (примерный спред) * 3 = 0.8$.

 

Зачем я спред умножил на 3? Это коэффициент, предусматривающий всякие неожиданности типа резких движений и прочие проскальзывания. Если и при таких жестких условиях наша стратегия покажет прибыль, значит, по ней можно будет торговать (в реальности же в большинстве случаев спред будет 0.2$).

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

 

Оптимизация на диапазоне от быстрый MA 3 до 20 и медленный MA от 5 до 20  с шагом 1 показала, что прибыльных вариантов нет. Возьмем другой диапазон. c 5 до 30 и с 20 до 200. На этот раз считало всю ночь, и снова не нашло прибыльного набора параметров. Все ясно, на минутках технические расходы больше, чем прибыль. Надо взять более больший интервал.  Кроме того, стоит посмотреть в сторону генетического алгоритма, с целью оптимизации самого  процесса оптимизации, но этим мы займемся немножко позже. А сейчас рассмотрим еще одну идею. Не одни только мувинги являются биржевыми индикаторами. А что, если попробовать поэкспериментировать еще и со свечными фильтрами? Для этих целей давайте создадим еще один класс стратегии CandleFilterTradeSystem....

 

...

 

 

Суть данной стратегии заключается в том, что когда свечи удовлетворяют фильтру на покупку, мы покупаем, когда фильтру на продажу - продаем. Если идет противоположный сигнал, переворачиваемся. Если срабатывают оба фильтра (или оба не сработают), то считаем, что сигнала нет.

А теперь приступим к серии тестов. Начнем с фильтра по одной свече.  Пусть, например, сигналом на продажу у нас будет большая черная свеча, а сигналом на покупку большая белая свеча:

 

 

Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии

 

Как мы опишем большую белую (черную) свечку? Для дневных интервалов это свечка высотой более 5%:

 

Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии

 

Как быть с тенями? Ограничим их максимальным размером в половину свечи (2.5%). Ну а максимальный размер свечи пусть будет не более 10%. Какой же зададим уровень открытия? Думаю, больших гэпов быть не должно, поэтому в пределах 1% в ту и в другую  сторону. Тогда код задания свечей будет выглядеть так:

 

                CandleFilter filter = new CandleFilter();

                filter.candel_high_max = 10;

                filter.candel_high_min = 5;

                filter.candel_open_max = 1.0;

                filter.candel_open_min = -1.0;

                filter.candel_type = CandleTypes.White;

                filter.lower_shadow_max = 2.5;

                filter.lower_shadow_min = 0.0;

                filter.upper_shadow_max = 2.5;

                filter.upper_shadow_min = 0.0;

                system.buy_filters.Add(filter);

 

                filter = new CandleFilter();

                filter.candel_high_max = 10;

                filter.candel_high_min = 5;

                filter.candel_open_max = 1.0;

                filter.candel_open_min = -1.0;

                filter.candel_type = CandleTypes.Black;

                filter.lower_shadow_max = 2.5;

                filter.lower_shadow_min = 0.0;

                filter.upper_shadow_max = 2.5;

                filter.upper_shadow_min = 0.0;

                system.sell_filters.Add(filter);

 

...

 

Если мы уменьшим минимальную высоту обеих свечей до 1%, то результат уже будет -22 руб, а количество сделок уже 44. Вот график депозита с таким раскладом:

 

Тесты торговых стратегий на C#. Урок 12. Анализ оптимизации. Свечные стратегии

 

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

Последнее обновление ( 12.12.2013 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги