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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник по индикатору BBands_Stop_v1

Прошу написать советник по данному индикатору BBands_Stop_v1.rar (7 Kb)
терминал МТ4
Параметры советника:
TP, SL, Length параметр индикатора, лот
Ордера должны открываться только при новом сигнале индикатора.
Как появился сигнал Buy или Sell открывается соответствующий ордер
  • +2
  • Просмотров: 11925
  • 5 октября 2015, 13:11
  • mecenat
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Сейчас посмотрю что там внутри.
avatar

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

  • 5 октября 2015, 14:19
+
0
Как то все.



//+------------------------------------------------------------------+
//|                                                         ExBB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "BBands expert advisor"

//--- Inputs
extern double Lots         = 0.1;  // лот
extern int    StopLoss     = 5000; // лось
extern int    TakeProfit   = 5000; // язь
extern int    Slip         = 30;   // слипаж
//----
extern int    Length       = 20;   // период BB 
extern int    Deviation    = 2;    // отклонение ВВ
extern int    Magic        = 20;   // магик

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,1);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,1);
//--- sell conditions
   if(BBRed>0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),
      Slip,NormalizeDouble(Bid+StopLoss*Point,Digits),
      NormalizeDouble(Bid-TakeProfit*Point,Digits),"",Magic ,0,Red);
      return;
     }
//--- buy conditions
   if(BBBlue>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),
      Slip,NormalizeDouble(Ask-StopLoss*Point,Digits),
      NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magic ,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,1);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,1);
//---
   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(BBRed>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(BBBlue>0)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }  
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1) OpenPos();
   else ClosePos();
  }
//+------------------------------------------------------------------+


Редактирован: 5 октября 2015, 17:38
avatar

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

  • 5 октября 2015, 14:37
+
0
Спасибо работает) Но можно сделать чтоб советник выставлял ордер один раз. То есть появился к примеру сигнал на покупку советник выставил ордер и ждет следующего сигнала
avatar

  15  mecenat Автор Сообщений: 41

  • 5 октября 2015, 15:33
+
0
Т.е. сделать закрытие по обратному сигналу и открытие нового ордера или как?
avatar

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

  • 5 октября 2015, 15:50
+
0
да сделать закрытие по обратному сигналу и открытие нового ордера, когда советник выставил ордер, то больше не выставляет ордера пока не будет новый сигнал
avatar

  15  mecenat Автор Сообщений: 41

  • 5 октября 2015, 16:58
+
0
Сделал закрытие по сигналу.
www.opentraders.ru/downloads/889/

avatar

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

  • 5 октября 2015, 17:44
комментарий был удален 2015-10-05 15:33:34 mecenat

+
0
Было бы неплохо прикрутить к нему трейлинг-стоп.
avatar

  2  home197311 Сообщений: 1

  • 6 октября 2015, 15:09
+
0
Хорошо бы сов. добавлял в Комментариях к ордерам своё имя (типа): ExBB
чтобы отличать их.
т.к. в окне часто бывают ещё ордера: открытые руками, или др. сов.: трал, разруливатель, доп. сов. для сравнения и т.п.
avatar

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

  • 6 января 2016, 12:56
+
0
Было бы неплохо прикрутить к нему трейлинг-стоп.

А также простое увеличение лота, лёгкий/средний/тяжёлый мартин и так далее… до полного набора всяческих примочек...:) 

Андрей, я думаю, что при исполнении любого заказа стоит включать полный набор по умолчанию...;) 
avatar

  20  Anatoly74 Сообщений: 3710 - Анатолий

  • 6 октября 2015, 15:45
+
0
Пусть человек закажет официально, сделаю: zakaz.opentraders.ru/
avatar

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

  • 6 октября 2015, 16:56
+
0
Ему до 1-го уровня дорасти надо:
Теперь пользователи 0-го уровня не могут писать ни в какую публичную группу, только в свой персональный блог.
avatar

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

  • 8 октября 2015, 17:11
+
0
Что изменить/переписать в коде, чтобы сов. только открывал ордера, но не закрывал их?
И не выставлял СЛ, ТП.
Закрывать, ставить СЛ, ТП и разруливать будет др. сов. или руками.
Просьба добавить настройки в сов.:
— только открывать ордера без закрытия;
— не закрывать по обратному сигналу, оставлять встречные ордера (с ТП и СЛ, если вкл.);
— и откл./не выставлять отдельно СЛ, и отдельно ТП.
Редактирован: 3 января 2016, 20:14
avatar

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

  • 3 января 2016, 19:18
+
0
Что изменить/переписать в коде, чтобы сов. только открывал ордера, но не закрывал их?


Уберите или закоментируйте строчку:
else ClosePos();

avatar

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

  • 3 января 2016, 20:12
+
0
убрав else ClosePos(); — сов. вообще больше не открывает ордеров, пока не закроет предыдущий.
А надо, для начала, вариант, чтобы не закрывал предыдущий, открытый ордер по обратному сигналу — только по ТП или СЛ,
но открывал и далее по каждому новому сигналу новые ордера — как бай, так и селл — каждый со своим СЛ и ТП.
А ранее открытые ордера — оставлял до их закрытия по СЛ, ТП или руками (др. сов.)
Редактирован: 3 января 2016, 20:36
avatar

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

  • 3 января 2016, 20:29
+
0
Если хотите открываться при смене цвета индикатора, пропишите соответствующее условие и добавьте контроль на открытии свечи.
avatar

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

  • 3 января 2016, 20:35
+
0
я не программист к сож.… заменить/вставить готовое могу, но не более.
— Надо, чтобы ранее открытые ордера оставались до их закрытия по их же ТП/СЛ/руками, а новые продолжали открываться также со своими СЛ/ТП по каждому новому сигналу.
avatar

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

  • 3 января 2016, 20:39
+
0
Я приду через часок, посмотрю.
avatar

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

  • 3 января 2016, 20:41
+
0
Ордера открылись по сигналу:




//+------------------------------------------------------------------+
//|                                                         ExBB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "BBands expert advisor"

//--- Inputs
extern double Lots         = 0.1;  // лот
extern int    StopLoss     = 5000; // лось
extern int    TakeProfit   = 5000; // язь
extern int    Shift        = 0;    // сдвиг
extern int    Slip         = 30;   // слипаж
//----
extern int    Length       = 20;   // период BB 
extern int    Deviation    = 2;    // отклонение ВВ
extern int    Magic        = 20;   // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,Shift);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,Shift);
   double BBBlue2=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,Shift+1);
   double BBRed2=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,Shift+1);
//--- sell conditions
   if(BBRed>0 && BBBlue2>0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),
                    Slip,NormalizeDouble(Bid+StopLoss*Point,Digits),
                    NormalizeDouble(Bid-TakeProfit*Point,Digits),"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(BBBlue>0 && BBRed2>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),
                    Slip,NormalizeDouble(Ask-StopLoss*Point,Digits),
                    NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      OpenPos();
      t=Time[0];
     }     
  }
//+------------------------------------------------------------------+

avatar

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

  • 3 января 2016, 22:12
+
0
Благодарствуйте, вроде в тестере работает <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp;. Тестирую *hi*
Просьба, подсказать своё мнение, относительно настроек:
Deviation = 2; // отклонение ВВ
Slip = 30; // слипаж
Shift = 0; // сдвиг — что это? это не тот же параметр MoneyRisk – денежный риск?

www.forextimes.ru/texnicheskie-indikatory-2/bbands-stop

Deviation (стандартное отклонение); этот параметр имеет те же свойства что и у оригинальных Полос Боллинджера, измеряет волатильность а так как остальных линий на графике мы не видим, то особого смысла изменять это значение нет необходимости, да и у самих полос боллинджера это значение по умолчанию самое оптимальное.
— Money Risk, (уровень риска при торговле); изменении этого параметра будет влиять на то, как близко будет приближаться индикатор к цене, при уменьшении ближе и наоборот при увеличении отдалятся, при этом, влияния на появление самих сигналов оказывать никак не будет. Использовать можно, при треллинге открытой сделки по линии индикатора с отступом несколько пунктов, если вы хотите уменьшить риск и сопровождать сделку ближе к текущим котировкам, то уменьшаем это значение и наоборот.
— Как считаете, лучше ли уменьшать Slip, Deviation, Shift, Money Risk?

Сейчас тестирую, напр. Slip= 2 ...3 — что это может давать по сравнению с 20...30 например? — и т.д.
Спред беру средний 10. Предполагаю использовать трал.
Редактирован: 5 января 2016, 12:19
avatar

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

  • 5 января 2016, 11:49
+
0
В тестере работает нормально, а на счёте почему-то много сигналов пропускает — не везде открывает ордера.
Причём частенько не открывает в начале более-менее устойчивой тенденции, когда размещённый на графике индикатор BBands_Stop_v1 сигнал даёт,
зато, часто, открывает ордера на случайном выбросе — против движения(т.е. не ложный)

Ни одного ордера не открыто (в тестере работает, открывает на каждом сигнале(вроде как):


***
Может ли советник конфликтовать, если он установлен на нескольких окнах разных пар?

Может ли советник конфликтовать с инд. BBands_Stop_v1, если он тоже установлен в том же окне?
— Поставил на 3 пары рядом, вроде везде ордера открывает, иногда, но с разной частотой пропуска сигналов.
сделал Slip = 2; // слипаж, Shift = 0; // сдвиг, Deviation = 1; // отклонение ВВ
На сервере Уровень стопов: 0.
Редактирован: 5 января 2016, 14:54
avatar

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

  • 5 января 2016, 11:50
+
0
Как-то странно сов. ордера открывает…
На конце шедшего направления сигнала, при появлении обратного, сов. не по новому сигналу открывает, а по уже завершённому (по предыдущему — предыдущей тенденции).
Т.е. открывает Бай, когда рост завершился и сигнал Селл возник, и наоборот: Селл, когда начался Бай уже.

И по-прежнему — не везде открывает ордера. Чаще не открывает — при смене сигнала.


***
И Хорошо бы сов. добавлял в Комментариях к ордерам своё имя (типа): ExBB
чтобы отличать их.
т.к. в окне часто бывают ещё ордера: открытые руками, или др. сов.: трал, разруливатель, доп. сов. для сравнения и т.п.
Редактирован: 6 января 2016, 12:58
avatar

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

  • 5 января 2016, 16:54
+
0
Сов. Открывает ордера в Бай — на сигнале в Селл,
и в Селл на сигнале в Бай.
Наверное в сов. тоже надо добавить настройку Реверс=0


Редактирован: 6 января 2016, 13:19
avatar

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

  • 4 января 2016, 17:51
+
0
также прошу подсказать суть этих параметров и на что повлияет их уменьшение/увеличение:
Slip = 30; // слипаж — как работает именно тут?<br/>
— слипаж, нужен для счетов с инстант исполнением. Если торговый сервер отказывается открыть ордер по цене, заказанной совом, он может сделать это в пределах ± пунктах (сколько стоит в слип) от неё.

Deviation = 2; // отклонение ВВ — как влияет именно в этом сов?

*Нашёл разъяснение:
Shift = 0; // сдвиг — // Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).
Редактирован: 8 января 2016, 14:19
avatar

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

  • 5 января 2016, 10:07
+
0
Проскальзывание (Slip) в тестере вообще не учитывается. Обычно на пяти- трех-знаке берется 30, на 4-х знаке 3.
avatar

  7  kvashnin007 Сообщений: 598 - Андрей

  • 6 апреля 2022, 00:16

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