Группа "Стол заказов MQL"

Рейтинг 2086



РЕКОМЕНДУЮ



Советник на основе стратегии «Два к одному»

Здравствуйте, прошу на основе стратегии «Два к одному» strategy4you.ru/strategii-s-indikatorami-foreks/strategy-forex-2-to-1.html сделать советника с небольшими изменениями.Стратегия основана на графике РЕНКО. Подойдёт любой индикатор РЕНКО рисующий кирпичи с хвостами.Для 5и знака.Счет ECN.
Настраиваемые параметры:
Lot-(Размер лота)
Buy_limit-(расстояние от цены открытия свечи, если 0-уровень открытия предыдущей свечи)
Sell_limit-(расстояние от цены открытия свечи, если 0-уровень открытия предыдущей свечи)
Martin — 0.5 (множитель лота если 0 то сов работает постоянным лотом)
Closing-(1-ордер закрывается после закрытия свечи на которой он открылся, 2- 0.5 ордера закрывается после закрытия свечи на которой он открылся, остальные 0.5 закрываются на закрытии противоположной свечи )

Условия для ПОКУПОК
1) Предыдущий кирпич должен быть белого цвета (бычий).
2) Выставляем Бай лимит ордер по параметрам Buy_Limit.
3) Если сработал Бай лимит, то ордер закрывается по параметру Closing.(Если Closing-2 и есть открытый ордер, то при выполнении
условия 1) продолжаем.
4) Если Бай лимит не сработал убираем отложку и переходим к пункту 1).

Условия для ПРОДАЖ Зеркально противоположные.
  • +3
  • Просмотров: 4742
  • 16 октября 2016, 04:17
  • OlegT
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
+1
Посмотрю завтра. Но с ренко запара может возникнуть, поэтому если получится быстро сделать, будет советник.
avatar

  34  AM2 Сообщений: 15877 - Андрей

  • 16 октября 2016, 17:29
+
0
Спасибо, подождём.Упустил один момент в ТЗ, это фильтр сигналов по Heiken Ashi в пункте 1)Предыдущий кирпич должен быть белого цвета (бычий) и Heiken Ashi тоже белый (бычий).
Индикатор Heiken Ashi подойдёт любой.
avatar

  4  OlegT Автор Сообщений: 3

  • 17 октября 2016, 01:28
+
0
По первоначальному ТЗ все есть, открывает закрывает выставляет: www.opentraders.ru/downloads/1360/




//+------------------------------------------------------------------+
//|                                                   RenkoLimit.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 555;      // лось
extern int TakeProfit    = 555;      // язь
extern int Delta         = 0;        // расстояние от открытия свечи
extern int Slip          = 3;        // реквот
extern int Closing       = 1;        // 1-закрытие на новой свече 2-закрытие половины лота 
extern int Magic         = 123;      // магик

datetime t=0;
int CloseCount=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()<0)
           {
            lot=OrderLots()*KLot;
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   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()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePol()
  {
   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()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenOrd()
  {
   DelOrder();
   if(Close[1]>Open[1])
     {
      PutOrder(2,Open[1]-Delta*Point);
     }

   if(Close[1]<Open[1])
     {
      PutOrder(3,Open[1]+Delta*Point);
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && t!=Time[0])
     {
      OpenOrd();
      t=Time[0];
     }

   if(CountTrades()>0 && t!=Time[0])
     {
      if(Closing==1) CloseAll();
      if(Closing==2)
        {
         ClosePol();
         CloseCount++;
        }
      t=Time[0];
     }

   if(CloseCount==1 && CountTrades()>0 && t!=Time[0])
     {
      CloseAll();
      CloseCount=0;
      t=Time[0];
     }

   Comment("\n CloseCount: ",CloseCount);
  }
//+------------------------------------------------------------------+


Редактирован: 17 октября 2016, 09:34
avatar

  34  AM2 Сообщений: 15877 - Андрей

  • 17 октября 2016, 08:40
+
0
Спасибо, буду тестить. Но Heiken Ashi не помешал бы.
avatar

  4  OlegT Автор Сообщений: 3

  • 17 октября 2016, 10:29
+
0
ну и как? по всей истории прогнали? какой результат???
avatar

  19  ars2005tron Сообщений: 1059 - Арсений

  • 17 октября 2016, 09:00
+
0
Если есть тестер для ренко, прогоню. А так только по ТЗ написано.
avatar

  34  AM2 Сообщений: 15877 - Андрей

  • 17 октября 2016, 09:24
+
+1
До конца отладил закрытие по половинке:




//+------------------------------------------------------------------+
//|                                                   RenkoLimit.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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 555;      // лось
extern int TakeProfit    = 555;      // язь
extern int Delta         = 0;        // расстояние от открытия свечи
extern int Slip          = 3;        // реквот
extern int Closing       = 1;        // 1-закрытие на новой свече 2-закрытие половины лота 
extern int Magic         = 123;      // магик

datetime t=0;
int CloseCount=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   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()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()<0)
           {
            lot=OrderLots()*KLot;
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   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()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePol()
  {
   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()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots()/2,NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenOrd()
  {
   DelOrder();
   if(Close[1]>Open[1])
     {
      PutOrder(2,Open[1]-Delta*Point);
     }

   if(Close[1]<Open[1])
     {
      PutOrder(3,Open[1]+Delta*Point);
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CloseCount>0 && CountTrades()>0 && t!=Time[0])
     {
      CloseAll();
      CloseCount=0;
      t=Time[0];
     }

   if(CountTrades()<1 && t!=Time[0])
     {
      OpenOrd();
      t=Time[0];
     }

   if(CountTrades()>0 && t!=Time[0])
     {
      if(Closing==1) CloseAll();
      if(Closing==2)
        {
         ClosePol();
         CloseCount++;
        }
      t=Time[0];
     }

   Comment("\n CloseCount: ",CloseCount);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15877 - Андрей

  • 17 октября 2016, 13:44
+
0
AM2 (Андрей)!
Обратите, пожалуйста, внимание, на то, как выставляются последние ордера (TP для красной и синей стрелочек). Мне кажется, отступ TP происходит по нарастающий и не сбрасывается…

А насчет тестирования на нестандартных ТФ — ссылка: https://www.mql5.com/ru/articles/1368. Свои разработки на Ренко я тестирую так. :-)
avatar

  3  shembel Сообщений: 32 - Юрий

  • 20 октября 2016, 01:48
+
0
AM2 (Андрей)!
Посмотрел Ваш код. Скорее всего это связано с тем, что при выставлении ордера Вы не учитываете по какой цене в данный момент работать — Ask / Bid. Речь только про выставление ордера! (Закрываете Вы ордера корректно.) Вероятно по этому так странно отрисовываются треугольнички. :-)
Редактирован: 20 октября 2016, 01:49
avatar

  3  shembel Сообщений: 32 - Юрий

  • 20 октября 2016, 01:48
+
0
OlegT!
Я сейчас тоже «каптю» над Ренко-ами.

Интересная стратегия! Спасибо! :-)

Как некое расширение — на следующем баре не закрывайте половинку ордера, а тральте его со стопом в 2 свечи. ;-)
avatar

  3  shembel Сообщений: 32 - Юрий

  • 20 октября 2016, 01:54
+
0
Доброго времени суток!!! После лося или профита лимитник не ставит сразу ждет следующего бара а это не по стратегии два к одному!!! А это значит что советник написан неправильно!!! плюс Мартин при смене направления сбрасывается до начального лота оставляя огромный убыток!!! Исправьте пожалуйста!!!
Редактирован: 29 октября 2016, 09:07
avatar

  2  kolxoznik Сообщений: 2 - kolxoznik

  • 26 октября 2016, 06:07

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