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

Рейтинг 2146



РЕКОМЕНДУЮ



РОБОТ – СТОХАСТИК DSS

Здравствуйте. Нужен робот по этому индюку. Это вариант Стохана, но он немного иначе отрисовывает.

Stoch_DSS_Bressert.mq4 (3 Kb)

Алгоритм:

1. Ордер открывается, когда конец Стохана начинает спадать после пика, предварительно пробив уровень.

Пример для Селл:
Стохан проходит уровень 85 снизу вверх – робот отмечает это и ждет, когда кривая начнет спадать. Ордер открывается на следующей свече после того, как зафиксирован спад пика.

Технически, полагаю, это можно описать так: как сигнальный уровень пройден, на каждой новой свече робот «для себя» отмечает уровень Стохана закрытия предыдущей свечи. Как только он оказывается ниже максимума, открывает ордер. Например: 86 – 87 – 88 – 87.2 – открывает Селл. На Бай аналогично.

Очень желательно реализовать именно такой вариант, а не ждать возврата за уровень, как в РСИ. Пересечение с другой кривой и прочие фильтры дают сильное запаздывание.

2. Ордер открывается каждый раз при повторном наступлении условия. Для этого Стохан должен вернуться за уровень, а потом опять пробить его. На фото пример.

3. Опция – закрытие при оппозитном сигнале.

4. Мартин.

5. Желательно сделать так, чтобы, если вручную перетаскивать Стоп и Тейк, робот их не возвращал обратно.



Настройки:

Лот.
Мартин.
ТП / СЛ.
Уровень Стохана.
EMA_period.
Stochastic_period.
Закрытие при оппозитном сигнале – да/нет.
  • +2
  • Просмотров: 5066
  • 16 июня 2017, 01:03
  • mikeford
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
После выходных буду смотреть.
avatar

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

  • 16 июня 2017, 17:19
+
0
Есть все кроме этого:
Для этого Стохан должен вернуться за уровень, а потом опять пробить его.





//+------------------------------------------------------------------+
//|                                                       Stohan.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, 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      = 250;      // лось
extern int TakeProfit    = 150;      // язь
extern int Count         = 10;       // число трейдов
extern int CloseSig      = 1;        // закрытие по сигналу
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик

extern string IndName    = "DssBresert";
extern int EMAPeriod     =  25;
extern int StochPeriod   =  80;
extern int Level         =  15;

datetime t=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(CountTrades()>0) lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double st1=iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift);
   double st2=iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift+1);

   if(st1>st2 && st1<Level)
     {
      PutOrder(0,Ask);
     }

   if(st1<st2 && st1>100-Level)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double st1 = iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift);
   double st2 = iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift+1);
//---
   if(st1<st2 && st1>100-Level)
     {
      CloseAll(0);
     }

   if(st1>st2 && st1<Level)
     {
      CloseAll(1);
     }
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
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,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double st1 = iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift);
   double st2 = iCustom(NULL,0,IndName,EMAPeriod,StochPeriod,1,Shift+1);

   if(t!=Time[0])
     {
      if(CountTrades()<=Count) OpenPos();
      if(CloseSig>0) ClosePos();
      t=Time[0];
     }

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

avatar

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

  • 18 июня 2017, 11:31
+
0
Теперь все по ТЗ: www.opentraders.ru/downloads/1611/

avatar

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

  • 18 июня 2017, 11:46
+
0
Спасибо. В общем то что надо, но есть две нестыковки.

1. Мартин должен увеличивать после срабатывания стопа. В этой версии он увеличивает каждый следующий ордер только, если стопа не было. А как раз после стопа обнуляется. Надо наоборот. Пока стоп или тейк не сработал, каждый следующий ордер должен быть объема предыдущего.

2. Если поставить закрытие по оппозитному сигналу = 0, то открывается только один первый ордер, а дальше ничего.

Такая ситуация в тестере, на реале я не запускал. Это можно поправить?
avatar

  9  mikeford Автор Сообщений: 57

  • 20 июня 2017, 01:46
+
0
Все поправил: www.opentraders.ru/downloads/1611/



avatar

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

  • 20 июня 2017, 20:16
+
0
Спасибо, теперь всё как надо.
avatar

  9  mikeford Автор Сообщений: 57

  • 22 июня 2017, 03:41

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