AM2
Андрей

 
Уровень 34

  Торгую в компаниях:


Группа "Программирование на MQL"

Рейтинг 280



Нейросети. Однослойный перцептрон.

После победы советника Александра Топчило на чемпионате по автотрейдингу Automated Trading Championship 2007 эксперты на основе нейросетей стали особенно популярны.



Интервью с чемпионом вы можете посмотреть по ссылке: championship.mql4.com/2007/ru/news/302

Материалов по созданию экспертов на основе нейросетей, достаточно в сети и на форуме мкл. Для более углубленного изучения нейросетей можете использовать следующие источники:

ПРЕДСКАЗАНИЕ ФИНАНСОВЫХ ВРЕМЕННЫХ РЯДОВ: www.mql5.com/ru/articles/1506
ПРОГНОЗИРОВАНИЕ ЦЕН С ПОМОЩЬЮ НЕЙРОННЫХ СЕТЕЙ: www.mql5.com/ru/articles/1482
РЕЦЕПТЫ НЕЙРОСЕТЕЙ: www.mql5.com/ru/articles/1562
КАК НАЙТИ ПРИБЫЛЬНУЮ ТОРГОВУЮ СТРАТЕГИЮ: www.mql5.com/ru/articles/1447
Код эксперта «ArtificialIntelligence_Right»: www.mql5.com/ru/code/7650
Код эксперта «ArtificialIntelligence»: www.mql5.com/ru/code/10289

Для начала немного теории:

Что такое нейронная сеть или Perceptron? Это алгоритм, использующий уравнение линейного неравенства (линейного фильтра), с помощью которого можно причислить исследуемый объект к тому или иному классу или, наоборот, исключить его из этого самого класса объектов. Само неравенство выглядит так:
w1 * a1 + w2 * a2 +… wn * an > d,
где:
wi — весовой коэффициент с индексом i,

ai — численное значение признака с индексом i исследуемого объекта,

d — пороговое значение, чаще всего равное 0.

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

Используемая ТС:

Наш простейший перцептрон будет анализировать открытие и закрытие свечей на определенном участке истории и на основе этого будет покупать или продавать с фиксированными стопами.

Код перцептрона будет выглядеть так:


double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 = Open[p] - Close[0];
   double a2 = Open[p] - Open[p*2];
   double a3 = Open[p*2] - Open[p * 3];
   double a4 = Open[p*3] - Open[p * 4];
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }


Если функция вернет значение меньше нуля покупаем, больше продаем.


   if(OrdersTotal()<1 && tm!=Time[0])
     {
      if(perceptron()<0) PutOrder(0,Ask);
      if(perceptron()>0) PutOrder(1,Bid);
      tm=Time[0];
     }


И вот готов весь код эксперта:


//+------------------------------------------------------------------+
//|                                                   Perceptron.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link "http://www.forexsystems.biz"
#property version "1.00"
#property strict

//---- input parameters
extern double tp = 50;
extern double sl = 50;
extern int p=10;
extern int x1 = 100;
extern int x2 = 100;
extern int x3 = 100;
extern int x4 = 100;
extern double lot=0.1;

datetime tm=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double s=0,t=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(sl>0) s=NormalizeDouble(price+sl*Point,Digits);
      if(tp>0) t=NormalizeDouble(price-tp*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(sl>0) s=NormalizeDouble(price-sl*Point,Digits);
      if(tp>0) t=NormalizeDouble(price+tp*Point,Digits);
     }

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),33,s,t,"",0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 = Open[p] - Close[0];
   double a2 = Open[p] - Open[p*2];
   double a3 = Open[p*2] - Open[p * 3];
   double a4 = Open[p*3] - Open[p * 4];
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1 && tm!=Time[0])
     {
      if(perceptron()<0) PutOrder(0,Ask);
      if(perceptron()>0) PutOrder(1,Bid);
      tm=Time[0];
     }
  }
//+------------------------------------------------------------------+



Поставим наш код на оптимизацию на участке 11.01.2000-11.01.2015 на дневках по ценам открытия.



Результаты оптимизации на участке следующие:



Форвард тест 11.01.2015-23.08.2016:



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

Скачать советник: www.opentraders.ru/downloads/1293/
  • +11
  • Просмотров: 22141
  • 23 августа 2016, 07:21
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Программирование на MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Манименеджмент. Лот от риска на стоп.
Следующая запись в группе  
Напишем советник на MQL4 с использованием ООП
26 июля 2016
03 сентября 2016

Комментарии (10)

+
+1
Т.е. у нас есть несколько условий, которые мы проверяем — выполнились в плюс или минус (вниз свечи или вверх, т.е. тренд вниз или вверх). Каждому задаем коэффициент значимости. *think* 
Формула была бы похожа на формулу взвешенного скользящего среднего, если было бы деление на сумму коэффициентов. *think* 
Наверное, мне ближе формула, которая бы показывала значимость события от 0 до 1 (или от 0 до 100%). Хотя в этой тоже что-то есть *think* 
Раньше мне казалось, что нейросети, это что-то заумное — типо логически мыслящего робота, способного самообучаться :D  Неужели это всего лишь математическая формула?
Андрей, ты разбил мои иллюзии *help* 
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 23 августа 2016, 09:05
+
0
Раньше мне казалось, что нейросети, это что-то заумное — типо логически мыслящего робота, способного самообучаться   Неужели это всего лишь математическая формула?


Здесь только самый простейший вариант.
avatar

  34  AM2 Автор Сообщений: 15879 - Андрей

  • 23 августа 2016, 10:08
+
0
Ну вот смотри, как описывают:
… нейронные сети. В основе их работы лежит принцип работы нейрона — клетки человеческого мозга. В наше время мы легко можем смоделировать процесс ее работы. Все это позволяет переложить на автоматическую систему торговли задачи, которые раньше мог решать только человек. Такие системы способны самостоятельно определять наличие или отсутствие тренда, находить наиболее удачную точку входа в рынок и входить в него самостоятельно. Обо всем этом и многом другом вы сможете узнать....
*think*  Вот даже подумываю посетить.
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 26 августа 2016, 13:50
+
0
Хм… У меня он отчего-то совсем не открывает ордера на тесте ни на каком ТФ.*???* 
Настройки использовал 1:1 как на скрине.
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 27 августа 2016, 09:00
+
0
На скрине показано с какими параметрами оптимизировал. Проведите самостоятельно оптимизацию и прогоните затем в тестере.
avatar

  34  AM2 Автор Сообщений: 15879 - Андрей

  • 28 августа 2016, 17:29
+
0
Кто подскажет, как оптимизировать этот советник*pardon* 
avatar

  10  Nadejda-stav Сообщений: 157

  • 11 января 2017, 23:13
+
0
P.S есть самообучающийся советник, но в нем ошибок больше чем мне лет, может кто посмотрит? www.mql5.com/ru/code/8479
avatar

  10  Nadejda-stav Сообщений: 157

  • 11 января 2017, 23:16
+
0
Можно попробовать подать соответствующую бесплатную заявку в Столе заказов — project.opentraders.ru/20424.html
avatar

  45  Bishop Сообщений: 5720 - АЛЬФАХАМЕЦ-Машковод

  • 11 января 2017, 23:45
+
0
В советнике более 12 000 строк кода. Врят ли кто возьмется
avatar

  10  Nadejda-stav Сообщений: 157

  • 11 января 2017, 23:47
+
0
Почему у меня советник не работает *wall*  и как провести оптимизацию? (если можно опишите поэтапно и в личку)
avatar

  10  Nadejda-stav Сообщений: 157

  • 19 января 2017, 20:17

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари