dedn73
Владимир

 
Уровень 19

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

  Моя торговля


График торгового счета dedn73


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

Рейтинг 2146



РЕКОМЕНДУЮ



Создание советника на полной основе индикатора: 3Bollinger Bands Stop v2.

Добрый вечер *hi*  уважаемый AM2.
Прошу Вас создать советник на полной основе индикатора: 3Bollinger Bands Stop v2.
Для MT4.
Правила и предпочтения:
1. Советник должен открывать позиции сел или бай только по сигналу и только один раз(при ручном закрытии ордера повторных входов не должно быть). В общем входы точно такие же как в индикаторе.
2.!!! Те настройки что в индикаторе нужны и в советнике.
3. В советник нужно добавить параметры СЛ и ТП с возможностью отключения.
4. Также добавить тралл и так же с возможностью отключения данной функции.
5. При появлении противоположного сигнала нужно чтобы предыдущий автоматически закрывался и открывался новый.!!! Данный параметр нужно сделать с возможностью отключения.
6. Добавить параметр лотность.
7. Добавить параметр риск.
В принципе вроде всё, если что, то напишу.
3Bollinger Bands_Stop_v2 .ex4 (7 Kb)

Заранее спасибо!!!

Да, и назовите его пожалуйста Sluggish :) 
  • +1
  • Просмотров: 11520
  • 22 января 2015, 20:06
  • dedn73
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Завтра с утра начну делать.
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 22 января 2015, 22:32
+
0
Прошу уточнить входы. Я все правильно понимаю?

avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 23 января 2015, 10:02
+
0
Да, всё верно.
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 23 января 2015, 10:33
+
0
Посмотрите правильность входов и закрытия ордеров. Остальные функции буду добавлять вечером.




//+------------------------------------------------------------------+
//|                                                     Sluggish.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#define MAGIC  20141020
//--- Inputs
extern double StopLoss     = 500;
extern double TakeProfit   = 500;
extern int    Slip         = 3;   
extern double Lots         = 0.1;
//----
extern int    BBPer       = 20;
extern double BBDev       = 1;
//----
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,0);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,0);

//--- sell conditions
   if(BBSell>0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);
     }
//--- buy conditions
   if(BBBuy>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
     }
   
   Comment("\nBuy ",BBBuy, "\nSell ",BBSell);
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,0);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(BBSell>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BBBuy>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(OrdersTotal()<1) CheckForOpen();
   else CheckForClose();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 23 января 2015, 11:02
+
0
не совсем точные входы а так вроде бы нормально. в тестере не открывает позы и на демо тоже. ок.
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 23 января 2015, 11:34
+
0
Индикатор должен быть под именем «3Bollinger_Bands_Stop_v2». Посмотрите что пишет в журнале, не открывает сделки скорее всего по этой причине.
В файле индикатор переименован.

Добавил трал и расчет лота. Лот расcчитывается по формуле: Баланс*Риск/100000 Т.е. При балансе 10000 рублей и риске 5% лот будет 0.5.

Советник в базе: www.opentraders.ru/downloads/567/
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 24 января 2015, 10:36
+
0
Добрый вечер. Спасибо, в выходные проверю.:) 
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 24 января 2015, 17:29
+
0
кое что нужно подправить: нужно сделать чтобы позиции открывались и закрывались при точном появлении точки в индикаторе т.к зачастую цена только касается а затем идет в том же направлении. другими словами как бы ложный пробой. как понимаю это получится на следующей свече. и второе хочется чтобы был параметр отключения закрытия предыдущей позиции при появлении нового входа. другими словами чтобы открытая позиция висела открытой. это нужно чтобы можно было работать исключительно по ТП и СЛ. скажите в архиве два файла, я так понимаю один это советник а второй индюк? и они работают впаре и обязательно их кидать по своим папкам? спасибо.
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 24 января 2015, 19:14
+
0
Использование лент Боллинджера позволило бы вам значительно повысить скорость оптимизации и точность входов, проще было бы добавить дополнительный фильтр сигналов. Добавил отключение закрытия по сигналу индикатора. Желательно в паре и по папкам, т.к. ваш индикатор я переименовал.


//+------------------------------------------------------------------+
//|                                                     Sluggish.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#define MAGIC  20141020
//--- Inputs
extern int    StopLoss     = 1000; // Стоплосс ордера  
extern int    TakeProfit   = 1000; // Тейкпрофит ордера
extern int    TrailingStop = 1000; // Трал ордера
extern int    Slip         = 3;    // Проскальзывание цены
extern int    ClosePos     = 0;    // 0-закрытие по ТП, 1-по сигналу индикатора
extern int    Risk         = 0;    // Риск на сделку в % от депо   
extern double Lots         = 0.1;  // Лот
//----
extern int    BBPer       = 20;    // Период индикатора
extern double BBDev       = 1;     // Отклонение индикатора
//----
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,0);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,0);

//--- sell conditions
   if(BBSell>0)
     {
      res=OrderSend(Symbol(),OP_SELL,fLots(),Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);
     }
//--- buy conditions
   if(BBBuy>0)
     {
      res=OrderSend(Symbol(),OP_BUY,fLots(),Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
     }
   
   Comment("\nBuy ",BBBuy, "\nSell ",BBSell);
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,0);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(BBSell>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BBBuy>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
double fLots()
  {
   double lot=Lots;
   double  lot_min=MarketInfo( Symbol(),MODE_MINLOT); 
   double  lot_max=MarketInfo( Symbol(),MODE_MAXLOT); 
   if (Risk>0)
     {
      lot=fND(AccountBalance()*Risk/100000,2);      
     }
   if (lot<lot_min) lot=lot_min;
   if (lot>lot_max) lot=lot_max;
   return(lot);
  } 
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//--------------------------------------------------------------------
void Trailing()
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==MAGIC)
            if(OrderType()==OP_BUY)
              {
               if(TrailingStop>0)
                 {
                  if(Bid-OrderOpenPrice()>TrailingStop*Point)
                    {
                     if(OrderStopLoss()<Bid-TrailingStop*Point)
                       {
                        bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Blue);
                       }
                    }
                 }
              }

      if(OrderType()==OP_SELL)
        {
         if(TrailingStop>0)
           {
            if((OrderOpenPrice()-Ask)>TrailingStop*Point)
              {
               if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Red);
                 }
              }
           }
        }
     }
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(OrdersTotal()<1) CheckForOpen();
   if(ClosePos>0) CheckForClose();
   if(TrailingStop!=0) Trailing();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 24 января 2015, 21:13
+
0
ставлю ноль в ТП и СЛ советник позы не открывает((( или отключить нельзя? при отключении закрытия открытой позы он не открывает в противоположную сторону при сигнале.((( и все так же как и было с ложным сигналом так и осталось. надо брать во внимание только тогда сигнал на открытие когда свеча закрылась выше полосы т.е со следующей свечи. и тоже самое нужно сделать с закрытием позы. так этот индюк тоже самое почти что и стандартный только сигналит и визуально иной. поэтому и хочу чтобы он работал именно по точкам как в модернизированным. а про фильтры я даже пока и незнаю что можно прикрутить.
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 24 января 2015, 22:00
+
0
Сейчас советник открывает только одну позу. Завтра буду смотреть чтобы одновременно могли быть и бай и селл.
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 24 января 2015, 23:33
+
0
Добавил одновременное открытие и бай и селл, торговлю с нулевыми стопами, для более точного входа — параметр Shift — Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).


//+------------------------------------------------------------------+
//|                                                     Sluggish.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

#define MAGIC  20141020
//--- Inputs
extern int    StopLoss     = 1000; // Стоплосс ордера  
extern int    TakeProfit   = 1000; // Тейкпрофит ордера
extern int    TrailingStop = 1000; // Трал ордера
extern int    Slip         = 3;    // Проскальзывание цены
extern int    Shift        = 1;    // Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
extern int    ClosePos     = 0;    // 0-закрытие по ТП, 1-по сигналу индикатора
extern int    Risk         = 0;    // Риск на сделку в % от депо   
extern double Lots         = 0.1;  // Лот
//----
extern int    BBPer       = 20;    // Период индикатора
extern double BBDev       = 1;     // Отклонение индикатора
//----
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,b,s;
   double tp,sl;
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,Shift);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,Shift);
   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)b++;
         if(OrderType()==OP_SELL)s++; 
        }
      }
    }   

//--- sell conditions
   if(BBSell>0 && s<1)
     {
      sl=Bid+StopLoss*Point;
      tp=Bid-TakeProfit*Point;
      if(StopLoss==0)sl=0;
      if(TakeProfit==0)tp=0;
      res=OrderSend(Symbol(),OP_SELL,fLots(),Bid,Slip,sl,tp,"",MAGIC,0,Red);
     }
//--- buy conditions
   if(BBBuy>0 && b<1)
     {
      sl=Ask-StopLoss*Point;
      tp=Ask+TakeProfit*Point; 
      if(StopLoss==0)sl=0;
      if(TakeProfit==0)tp=0;           
      res=OrderSend(Symbol(),OP_BUY,fLots(),Ask,Slip,sl,tp,"",MAGIC,0,Blue);
     }
   
   Comment("\nBuy ",BBBuy, "\nSell ",BBSell);
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double BBBuy=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,2,Shift);
   double BBSell=iCustom(Symbol(),0,"3Bollinger_Bands_Stop_v2",BBPer,BBDev,3,Shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(BBSell>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BBBuy>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
double fLots()
  {
   double lot=Lots;
   double  lot_min=MarketInfo( Symbol(),MODE_MINLOT); 
   double  lot_max=MarketInfo( Symbol(),MODE_MAXLOT); 
   if (Risk>0)
     {
      lot=fND(AccountBalance()*Risk/100000,2);      
     }
   if (lot<lot_min) lot=lot_min;
   if (lot>lot_max) lot=lot_max;
   return(lot);
  } 
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//--------------------------------------------------------------------
void Trailing()
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==MAGIC)
            if(OrderType()==OP_BUY)
              {
               if(TrailingStop>0)
                 {
                  if(Bid-OrderOpenPrice()>TrailingStop*Point)
                    {
                     if(OrderStopLoss()<Bid-TrailingStop*Point)
                       {
                        bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Blue);
                       }
                    }
                 }
              }

      if(OrderType()==OP_SELL)
        {
         if(TrailingStop>0)
           {
            if((OrderOpenPrice()-Ask)>TrailingStop*Point)
              {
               if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                 {
                  mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Red);
                 }
              }
           }
        }
     }
  }  
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   CheckForOpen();
   if(ClosePos>0) CheckForClose();
   if(TrailingStop!=0) Trailing();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 25 января 2015, 13:17
+
0
Спасибо большое, всё так как и хотелось.:)  теперь вот добавить бы часовой интервал по которому бы советник начинал торговать с возможностью отключения данной функции. Vladven подсказал. Думаю было бы не плохо с данным параметром.
avatar

  19  dedn73 Автор Сообщений: 368 - Владимир

  • 25 января 2015, 19:37
+
0
вопросы по работе сов. Основное:
1. Не всегда открывает ордера, где явно можно — и сигнал есть.
2. Открывает ложные (когда появляются коррекционные пики и сигналы(точки).

Заметки-идеи по этому поводу.

Задача-вопрос.
1. Как фильтровать ложные сигналы(точки)?<br/>

Идеи по работе с ложными и минусовыми ордерами.
Сделать настройки:
1)Перенос ТП в БУ, когда цена ушла на «Х» п. против ордера
И перенос в БУ когда цена прохла «Х» п. или по условию: напр. появление обратного сигнала.
2)Функция: Лок вместо СЛ. На уровне СЛ открывается локирующий ордер обратный исходному.
СЛ и ТП таких ордеров удаляются.
Вопрос разруливания локов — отдельно.
(напр. можно руками — подтягивая ТП по ним в нужные места, на очередном развороте, или усредняя доп. ордерами. Чаще получается разрулить или свести минус к минимуму. Суммарный результат минимум в 2-3 р. лучше, чем суммарный же убыток по СЛ. Кроме того депозит в это время — не убавляется сразу как при СЛ. И даже длинные тренды можно переждать и спокойно подумать уже).



avatar

  11  preasto Сообщений: 445

  • 6 января 2016, 19:15
+
0
очень интересно! к тому-же я торгую этим индикатором, клёво!!!
avatar

  20  Vladven Сообщений: 111

  • 24 января 2015, 22:09
+
0
утренние флэты убивают сову, надо после 9ч включать
avatar

  20  Vladven Сообщений: 111

  • 25 января 2015, 17:41
+
0
ну, как успехи?
avatar

  20  Vladven Сообщений: 111

  • 26 мая 2015, 15:49
+
0
добрый день а как вы смотрите чтоб добавить к этому советнику и индикатору еще один индикатор для боли точного входа
Редактирован: 29 октября 2015, 18:50
avatar

  0  ilixom Сообщений: 1

  • 29 октября 2015, 18:47

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