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

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

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

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

y1=f1(t) и y2=f2(t),

где y1 - это fastMA, y2 - slowMA, f1 и f2 - некая функция. Что есть пересечение этих кривых? 

Математически пересечение, являющееся сигналом на покупку, является условие:

y2last>y1last и y2cur<y1cur:

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

 на продажу:

y1last>y2last и y1cur<y2cur:

 

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

Каждая убыточная сделка, это своеобразный урок для робота - так торговать нельзя, надо менять свои весовые коэффициенты. Раз так торговать нельзя, значит, робот должен сделать вывод, что сигнала быть не должно. И изменить свои весовые коэффициенты так, как будь-то сигнала не было. Что надо сделать, что бы с новыми весовыми коэффициентами сигнала не было? Нарушить выше названное условие. Для сигнала на покупку нужно опустить y1cur и приподнять y2cur. Для продажи, естественно, наоборот. Будет достаточно, если y1cur и y2cur изменить до величины y1last и y2last соответственно.

И так, для убыточной покупки нам надо уменьшить y1cur на y1cur-y1last, а y2cur уменьшить на y2last-y2cur. Для продажи наоборот. 

Каким образом произвести коррекцию весовых коэффициентов? Нужно разделить эту разницу на количество членов (весовых коэффициентов). Пусть корректировка на один член равна d, цена (котировка) p, старый весовой коэффициент w0. Тогда 

pw=pw0+d

где w - новый весовой коэффициент. Тогда

w=(pw0+d)/p

И так нужно пересчитать каждый из весовых коэффициентов.

Мат модель готова. Теперь можно писать советника и тестировать его. Что я и сделал. И, угадайте с трех раз, что в итоге получилось....

Если скажете - большой убыток - не угадали.

Огромная прибыль - тоже холодно.

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

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

В общем, мы "наказывали" нашу нейросеть каждый раз, когда она совершала неправильные сделки. И она совсем перестала торговать. Видимо, подумала: "А зачем мне это нужно, зря рисковать? Лучше не высовываться, и не нарываться на наказания. Это можно сравнить, если мы будем с определенной вероятностью бить током обезьяну, когда она хватается за красную ручку. Обезьяна быстро смекнет, что за эту саму красную ручку лучше вообще не хвататься, даже если током бьет "через раз". 

Ладно, а если будем помимо наказания за убытки, поощрять за прибыльные сделки? 

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

Результат тот же самый, хотя на последней сделке весовые коэффициенты стали несколько другими. 

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

А что, если попытаться оптимизировать коэффициенты "поощрения" и "наказания"?

Попытался. К сожалению, результаты оптимизации получились с очень маленьким числом сделок от 3 до 7, за период более около 6-ти месяцев на часовиках. Это не статистически значимый результат. 

После этого я уменьшил шаг оптимизации. Среди оптимизированных комбинаций нашлась одна, на 13 сделок. Вот ее график доходности:

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

А если еще сильнее уменьшить шаг?

Вот тут результат получился более менее статистически значимым. На тот же период (6 мес.) 94 сделки, прибыль 68%. Вот график доходности:

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

 

А если без обучения нейросети, то 47%(192 сделки) и вот такой график доходности:

Генетический алгоритм. Шаг 11. Самообучающийся советник для MT.

Теперь осталось проверить работоспособность алгоритма, проверяя на двух месяца прошлого периода тестируя на третьем, как я делал это тут.

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

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