AM2
Андрей

 
Уровень 35

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


Группа "Торговые системы"

Рейтинг 660



Создаем с нуля ночник

Возникла идея создать с нуля ночной скальпер. Что из этого выйдет не знаю. Начинаю делать с этой заготовки в 14.00.



Первоначальное ТЗ простейшее в указанное время открываем 2 позы бай и селл, после 24.00 закрываем.
Ставлю на опт по всем мажорам с начала года, чтобы определиться с парой на М15.

По евре:


По ене:



По ауди:



По фунту:



По франку:



Еврофунт:



На всех парах больше прибыли когда торгуем только со стопами.

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

Внимательно рассмотрев сделки на графике, замечаем что много лосей ловим в тренде. Добавляем фильтр по МА.


   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);
   if(Ask>ma) PutOrder(0,Ask);
   if(Bid<ma) PutOrder(1,Bid);


Этот фильтр ухудшил показатели системы. Меняем условия метами.


   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);
   if(Ask<ma) PutOrder(0,Ask);
   if(Bid>ma) PutOrder(1,Bid);


С таким фильтром улучшились показатели ТС по всем параметрам:



Ставлю на оптимизацию с 2011-го года и получаю следующие результаты:



Система нам нарисовала такой график:



Теперь заглядываем на участки, где имеем наибольшую просадку. Это у нас август 11-го, сентябрь 12-го и ноябрь 15-го годов. Эти периоды характеризуются длительными трендами на Д1. добавляем фильтр по дневкам.

Сейчас 16.30 я ставлю на опт и делаю перерыв. Фильтр на дневках не дал нужного результата. Обратный фильтр также не принес нам успеха. Уже со вторым фильтром оптимизация идет очень долго.

Сейчас советник выглядит следующим образом:


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

extern double StopLoss     = 290;
extern double TakeProfit   = 130;
extern int    StartHour    = 22;
extern int    CloseTime    = 0;
extern int    MAPeriod     = 20;
extern int    DMAPeriod    = 12;
extern int    Slip         = 30;
extern int    Magic        = 123;
extern double Lots         = 0;

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

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

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

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
int CountTrades(int ot=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1)) count++;
            if(OrderType()==1 && (ot==1 || ot==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);
   double dma=iMA(NULL,PERIOD_D1,DMAPeriod,0,0,0,0);
   if(Ask<ma && Ask<dma) PutOrder(0,Ask);
   if(Bid>ma && Bid>dma) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,Lime);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,Lime);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      if(TimeCurrent()>=StringToTime((string)StartHour+":00")) OpenPos();
      t=Time[0];
     }
   if(CloseTime>0 && TimeCurrent()<StringToTime((string)StartHour+":00")) CloseAll();
  }
//+------------------------------------------------------------------+



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

П.С. Я уже почти отчаялся создать что то путное, но под конец запустил на опт на фунтобаксе с одним фильтром и он мне нарисовал такой график:



Вот код советника:


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

extern double StopLoss     = 290;
extern double TakeProfit   = 130;
extern int    StartHour    = 22;
extern int    CloseTime    = 0;
extern int    MAPeriod     = 20;
extern int    Slip         = 30;
extern int    Magic        = 123;
extern double Lots         = 0;

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

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

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

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет позиций                                                  |
//+------------------------------------------------------------------+
int CountTrades(int ot=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1)) count++;
            if(OrderType()==1 && (ot==1 || ot==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);
   if(Ask<ma) PutOrder(0,Ask);
   if(Bid>ma) PutOrder(1,Bid);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,Lime);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,Lime);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      if(CountTrades()<1)
        {
         if(TimeCurrent()>=StringToTime((string)StartHour+":00")) OpenPos();
        }
      if(CloseTime>0 && TimeCurrent()<StringToTime((string)StartHour+":00")) CloseAll();
      t=Time[0];
     }
  }
//+------------------------------------------------------------------+

  • +12
  • Просмотров: 5199
  • 14 ноября 2016, 17:15
  • AM2
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Торговые системы", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
30 октября 2016
19 ноября 2016

Брокер для ваших роботов, 15 лет на рынке

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

+
+4
И два графика для любителей всех тиков:



avatar

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

  • 14 ноября 2016, 18:24
+
0
Круто) Есть над чем поработать )
avatar

  13  writelint00 Сообщений: 592 - writelint

  • 14 ноября 2016, 19:33
+
0
Самый последний вариант — error 4051 — недопустимое значение параметра.
avatar

  13  writelint00 Сообщений: 592 - writelint

  • 14 ноября 2016, 19:56
+
+1
Последний вариант все гуд

4051 Недопустимое значение параметра функции


В стандарте лот 0.

все Ок.
avatar

  13  Pesha Сообщений: 222 - ¯\_(ツ)_/¯

  • 14 ноября 2016, 20:01
+
+3
Скинул в базу: www.opentraders.ru/downloads/1391/
avatar

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

  • 17 ноября 2016, 07:51
+
0
Результат показал не плохой, весьма.
Но: как только учитываем тот факт, что спред в ночное время имеет свойство расширяться, меняем значения спреда на входе и получаем совершенно другие результаты :-(
Как быть?
avatar

  4  vit-fx Сообщений: 76

  • 21 ноября 2016, 23:10
+
0
Где то до 24 на есн спреды 3-6 и комиссия 3-4 долл.
avatar

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

  • 22 ноября 2016, 00:34
+
0
Андрей, у меня по результатам опта лучший результат — gbpusd. Уже около полуночи спред 10. Это ECN от Б(КА)С. Напишите название вашего брокера, можно в личку.
avatar

  4  vit-fx Сообщений: 76

  • 22 ноября 2016, 00:46
комментарий был удален 2016-11-22 18:52:39 AM2

+
0
Кто-нибудь поставил его после опта на реальный счет или хотя бы на демку?
avatar

  4  vit-fx Сообщений: 76

  • 24 ноября 2016, 16:48
+
0
Стоит на «демке» eur/usd.,gbp/usd, результаты не однозначные: один день прибыль другой день убытки, я бы сказал 50/50, по обеим парам. Рано делать выводы, мало времени прошло...*???*  Возможно нужно еще что то прикрутить или допилить
avatar

  19  Marik007 Сообщений: 417 - Forexman

  • 24 ноября 2016, 19:51

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