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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от Vitalik5675



Заказ советника попытка №2
2017-01-27 02:23:06Рейтинг 0

Восстановления после BREXIT
2016-11-18 14:38:40Рейтинг 0

06.06.2017 EURUSD H4
2017-06-06 15:36:28Рейтинг 0

Welcome Bonus Forex $20 Комментариев 18
2016-12-02 22:01:36Рейтинг 0

Адская прибыль Комментариев 2
2016-05-21 15:55:32Рейтинг 0

MA сейф

Привет.
Надеюсь в этот раз советник будет сделан :D 
Нужен простой советник какой будет открывать ордера по двум скользящим средним.
На каждом пересечении открывать по два ордера по мартину в ту сторону куда произошло пересечение после закрытия свечи до максимального лота.

Общие настройки:
МА 1
МА 2

Настройки ордера №1:
минимальный лот
мартин
максимальный лот
тейк
стоп
бу
трал
магик

Настройки ордера №2:
минимальный лот
мартин
максимальный лот
тейк
стоп
бу
трал
магик

Советник должен следить только за последними двумя ордерами какие были открыты на последнем пересечении.
Если сработал стоп по ордерам то на следующем пересечении открывать дальше два ордера по мартину.
А если один ордер из двух последних закроется по тейку то другой переводить в бу, дальше на следующем пересечении можно будет открывать новые два ордера минимальным лотом сначала.
Заранее спасибо)
  • +4
  • Просмотров: 2114
  • 9 сентября 2017, 14:17
  • Vitalik5675
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
+3
Надеюсь в этот раз советник будет сделан

Как нам платят так мы и работаем :D 
avatar

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

  • 9 сентября 2017, 14:39
+
+1
Во вторник где то буду смотреть.
avatar

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

  • 9 сентября 2017, 15:49
+
0
Основу набросал теперь поясняйте подробнее со скринами:


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

extern double Lots      = 0.1;
extern double KLot      = 2;
extern double MaxLot    = 5;
extern int StopLoss     = 1200;
extern int TakeProfit   = 1400;
extern int TrailingStop = 300;
extern int Slip         = 50;
extern int MA1Period    = 9;
extern int MA2Period    = 22;
extern int Magic        = 123;

datetime t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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)
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }

            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,Yellow);
                        return;
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
   double ma22=iMA(NULL,0,MA2Period,0,0,0,2);

//---- buy 
   if(ma11>ma21 && ma12<ma22)
     {
      PutOrder(0,Ask);
     }
//---- sell   
   if(ma11<ma21 && ma12>ma22)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//| Лот для усреднителя                                              |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   double MinimumLot = MarketInfo(NULL,MODE_MINLOT);
   double MaximumLot = MarketInfo(NULL,MODE_MAXLOT);

   lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot<MinimumLot) lot=MinimumLot;
   if(lot>MaximumLot) lot=MaximumLot;
   if(lot>MaxLot)lot=Lots;

   return(lot);
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      OpenPos();
      t=Time[0];
     }

   if(TrailingStop!=0) Trailing();
  }
//+------------------------------------------------------------------+

avatar

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

  • 12 сентября 2017, 20:05
+
0
Протестировал вчера набросок со своими настройками.
В итоге получается нужен другой индикатор или дополнительный, чтобы было меньше входов, а то каждый раз задевает стопы и профита нет даже с одним ордером на пересечении, то с двумя будет в два раза больше просадка.
Суть в том чтобы первый ордер закрывал всю просадку в небольшом профите, а второй переводился в бу когда закроется первый и зарабатывал дальше.
avatar

  7  Vitalik5675 Автор Сообщений: 282

  • 13 сентября 2017, 10:56
+
0
Просьба пояснить все на скринах.
avatar

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

  • 13 сентября 2017, 17:40
+
0
Например вот тренда нет и цена болтается

А тест получился

Нужно чтобы получился тест с почти ровный и немножко в профите.
Еще мартин не работает как нужно местами не увеличивает лот(
Редактирован: 13 сентября 2017, 18:20
avatar

  7  Vitalik5675 Автор Сообщений: 282

  • 13 сентября 2017, 18:18
+
0
Нужно чтобы получился тест с почти ровный и немножко в профите.

Так и получается после оптимизации:



Еще мартин не работает как нужно местами не увеличивает лот

Увеличение лота ограничено переменной макслот. Добавил БУ еще.


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

extern double Lots      = 0.1;
extern double KLot      = 2;
extern double MaxLot    = 5;
extern int StopLoss     = 1200;
extern int TakeProfit   = 1400;
extern int TrailingStop = 300;
extern int BULevel      = 0;      
extern int BUPoint      = 30;       
extern int Slip         = 50;
extern int MA1Period    = 9;
extern int MA2Period    = 22;
extern int Magic        = 123;

datetime t=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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)
                       {
                        mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                        return;
                       }
                    }
                 }
              }

            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,Yellow);
                        return;
                       }
                    }
                 }
              }
           }
        }
     }
  }
  //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   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)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss()==0))
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Yellow);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma11=iMA(NULL,0,MA1Period,0,0,0,1);
   double ma21=iMA(NULL,0,MA2Period,0,0,0,1);
   double ma12=iMA(NULL,0,MA1Period,0,0,0,2);
   double ma22=iMA(NULL,0,MA2Period,0,0,0,2);

//---- buy 
   if(ma11>ma21 && ma12<ma22)
     {
      PutOrder(0,Ask);
     }
//---- sell   
   if(ma11<ma21 && ma12>ma22)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//| Лот для усреднителя                                              |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   double MinimumLot = MarketInfo(NULL,MODE_MINLOT);
   double MaximumLot = MarketInfo(NULL,MODE_MAXLOT);

   lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot<MinimumLot) lot=MinimumLot;
   if(lot>MaximumLot) lot=MaximumLot;
   if(lot>MaxLot)lot=Lots;

   return(lot);
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      OpenPos();
      t=Time[0];
     }

   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
  }
//+------------------------------------------------------------------+

avatar

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

  • 13 сентября 2017, 21:30
+
0
Это с теми настройками что сейчас?
Немножко неправильно подсчитал :)  так как тест только с одной сделкой на пересечении, то он должен получиться в профите чтобы перекрывать убыток с двоих ордеров на каждом пересечении = тейк в два раза больше стопа чтобы не уйти в вечную просадку + несколько пунктов в запасе.
Мартин так и не работает как надо
Советник должен следить только за последними двумя ордерами какие были открыты на последнем пересечении.

Как только происходит пересечение и ордер закрыт по стопу или не закрылся тейком нужно открывать по мартину следующую сделку.

На скриншоте как должно быть открывается первый ордер минимальным лотом но он закрывается сразу по стопу до пересечения.
Дальше на следующем пересечении открываем второй ордер он не закрылся по тейку до пересечения перестаем за ним следить.
Открываем третий ордер и он тоже не закрылся по тейку не следим за ним.
Открываем четвертый ордер зарылся по стопу.
На следующем пересечении открываем пятый ордер с ним все тоже самое закрылся по стопу.
И на конец открываем шестой он закрывается по тейку все как нужно и теперь когда будет следующее пересечение начинать открывать ордера заново с минимального лота.
avatar

  7  Vitalik5675 Автор Сообщений: 282

  • 14 сентября 2017, 01:06

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