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

Генетический алгоритм. Шаг 13. Подготовка к ручному тестированию алгоритма

Все статьи по данной теме.

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

1. Провожу мозговой штурм. Генерирую список идей: 

  • Как входить в сделку.

  • Как выходить из сделки.

  • Как ставить стопы.

  • Размер позиции (управление капиталом).

  • Обучение стратегии (оптимизация параметров стратегии).

2. Случайным образом беру идеи из списка и конструирую из них несколько стратегий (думаю, для начала не больше пяти). При чем каждая стратегия будет иметь Г-тип. (W, M или S). Тип W -служит для генерации новый стратегий, а M-тип для скрещивания стратегий - он передает W-типу свои правила (rules-гены).  А S-тип будет размножаться делением. При порожденная стратегия будет "мутировать": случайным образом меняться какое либо правило либо добавляться новое. 

3. Беру историю котировок и разбиваю не периоды. 

4. Тестирую каждую стратегию на очередном периоде. По результатам тестирования вычисляю Health и Rang. 

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

6. Если еще есть периоды, то беру следующий период и перехожу к шагу 4.

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

Теперь, что бы удобнее было торговать, не пропуская сигналов, создаю общие для всех стратегий правила:

  • Торгую на днях.

  • Для входа в сделку использую только отложенные ордера. 

  • Выход только по стопам. 

  • Трейлинг стоп не применяю.

Каким образом буду вычислять Health и Rang? Как я уже говорил в шаге 2,  Health будет рассчитываться исходя из нормы прибыли за период. Сделал норму - увеличиваем этот параметр, не сделал - уменьшаем. 

Таким образом, если прибыль за период больше или равна норме, то 

Health1=Health0+Profit * K1+K0,

где Health1 - новое значение параметра Health, Health0 - старое значение,  Profit - прибыль за период, K1 - коэффициент поощрения. K0 - увеличение параметра Health при выполнении нормы прибыли. 

Если прибыль за период будет меньше нормы, тогда 

Health1= Health0+(Profit-ProfitN) * K2,

где Health1 - новое значение параметра Health, Health0 - старое значение,  Profit - прибыль за период, K2 - коэффициент наказания, ProfitN - норма прибыли за период.

Теперь надо подобрать коэффициенты K0, K1 и K2. Для этого придется ответить на следующие вопросы:

1. Какую суммарную просадку разрешить роботу? Или сколько ему надо "слить" что бы получить "смертный приговор"?.

2. Если робот долго успешно работал, то на сколько ему можно разрешить больше просадки, чем для роботов новичков? И Сколько это "долго успешно работал". Насколько успешно?

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

Что касается суммарной просадки. Я уже писал для роботов устанавливаю норму прибыли 100% годовых. Это приблизительно 6% в месяц при сложном проценте. Разумеется, не всегда возможно реинвестировать доход в полном объеме, поэтому для месяца норма прибыли будет 7%. Для квартала это будет примерно 20%. Поскольку торговля будет идти на днях, то месяца для тестового периода будет мало. Поэтому делаю квартал. За квартал просадка не допускается вообще. Таким образом, K2=5, тоесть, если за квартал робот не заработал прибыли или ушел в убыток, то он однозначно умирает (если у него нет запаса Health). 

Я долго размышлял над коэффициентом K0. В итоге решил, что он будет равен нулю. Если робот делает норму прибыли, он просто выполняет свою работу. А так как просадка за квартал не допускается, то и накапливать Health робот не должен, если просто делает норму прибыли. Иначе система позволит ему уйти в минус. А вот если робот заработал сверх нормы, это ему плюс. В следующем квартале он сможет даже уйти в минус. Но не более, чем на половину от заработанной сверхприбыли. Тоесть, K1=K2/2=2.5.

Теперь насчет спаривания. Каждые 100% Health дают возможность совершить 1 запрос на спаривание для M-робота или 1 деление для S - робота. Если Health  дробный, то дробная часть Health  по рандому дает или не дает запрос на спаривание или деление. С той вероятностью, чему равно Health . W-робот в любом случае может принять только один запрос на спаривание. 

Теперь перейдем к ранговому потенциалу. Если Health вырос или остался на том же уровне, то

Rang1=Rang0+Health0*Kr0+(Health1-Health0)*Kr1

если упал

Rang1=Rang0+(Health1-Health0)*Kr2

где Kr0 для удобства пока сделаем равным 0.01 (рост 1% каждую итерацию при Health 100%).

Kr1=1, тоесть, каждый процент прироста Health на столько же увеличивает ранговый потенциал.

Kr2=2, при падении Health  ранговый потенциал падает в два раза быстрее.

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

Все статьи по данной теме.

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