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

Рейтинг 2151



РЕКОМЕНДУЮ



Мультивалютный MT4 советник с мувингами

Сравниваем два мувинга EMA(25) и EMA(50), если EMA(25) выше EMA(50) то входим на покупку с фиксированными лотом, стоп лосом и тейк профитом. Цена пошла против на D пунктов и EMA(25) выше EMA(50) докупаемся тем же лотом, ставим стоп лосс равного стоп лоссу предыдущей сделки, и сдвигаем тейк профит на общий уровень, что бы в сумме получили размер ТП, указанного параметрах советника. Если цена пошла в нашу сторону, дожидаемся достижения ТП. Если после входа на покупку EMA(25) стал ниже EMA(50) то закрываем все сделки по текущей цене, и входим на продажу фиксированными лотом, стоп лоссом и тейк профитом. И повторяем все вышесказанные действия. В день разрешается только одна сделка по одной валютной паре. Советник мультивалютный, в параметрах будет указан список валютных пар, которые будут использованы в торговле.

Заранее благодарю за разработку.
  • +1
  • Просмотров: 3563
  • 6 октября 2016, 13:17
  • izzatilla
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Реально думаю будет сделать, но точно только в процессе выполнения можно будет сказать. Сегодня начну делать.
avatar

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

  • 6 октября 2016, 17:50
+
+1
Вот для одной пары, если все правильно перепишу на мульт.


//+------------------------------------------------------------------+
//|                                                  2MAMultiAvg.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

extern double Lots        = 0.1;         // торговый объем
extern int    StopLoss    = 350;         // стоп лосс ордера
extern int    TakeProfit  = 90;          // тейк профит ордера
extern int    Step        = 10;          // шаг между ордерами
extern int    Slip        = 3;           // проскальзывание
extern int    Shift       = 1;           // на каком баре сигнал индикатора
extern int    MA1Period   = 25;          // период МА1
extern int    MA2Period   = 50;          // период МА2
extern int    Magic       = 123;         // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Одна сделка в день                                               |
//+------------------------------------------------------------------+
bool OneDayDeal()
  {
   bool result=true;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2 && TimeDay(OrderOpenTime())==Day())
           {
            result=false;//tp  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,0,0,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifyOrders()
  {
   bool m;
   double all=0,tp=0,sl=0,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)
              {
               all+=OrderOpenPrice()*OrderLots();
               count+=OrderLots();
              }
           }
        }
     }

   all=NormalizeDouble(all/count,Digits);

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0)
              {
               tp=NormalizeDouble(all+TakeProfit*Point,Digits);
               sl=NormalizeDouble(all-StopLoss*Point,Digits);
               if(OrderTakeProfit()!=tp || OrderStopLoss()!=sl)
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }

            if(OrderType()==1)
              {
               tp=NormalizeDouble(all-TakeProfit*Point,Digits);
               sl=NormalizeDouble(all+StopLoss*Point,Digits);
               if(OrderTakeProfit()!=tp || OrderStopLoss()!=sl)
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double MA11=iMA(NULL,0,MA1Period,0,1,0,Shift);
   double MA12=iMA(NULL,0,MA1Period,0,1,0,Shift+1);
   double MA21=iMA(NULL,0,MA2Period,0,1,0,Shift);
   double MA22=iMA(NULL,0,MA2Period,0,1,0,Shift+1);

   if((CountTrades()<1 && (MA11>MA21 && MA12<MA22) && OneDayDeal()) || (CountTrades()>0 && (MA11>MA21 && MA12<MA22) && FindOrderType()==0 && (FindLastBuyPrice()-Ask)/Point>=Step))
     {
      PutOrder(0,Ask);
      ModifyOrders();
     }

   if((CountTrades()<1 && (MA11<MA21 && MA12>MA22) && OneDayDeal()) || (CountTrades()>0 && (MA11<MA21 && MA12>MA22) && FindOrderType()==1 && (Bid-FindLastSellPrice())/Point>=Step))
     {
      PutOrder(1,Bid);
      ModifyOrders();
     }

   if(MA11<MA21 && MA12>MA22) CloseAll(0);
   if(MA11>MA21 && MA12<MA22) CloseAll(1);
  }
//+------------------------------------------------------------------+

avatar

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

  • 6 октября 2016, 19:04
+
0
Спасибо, сейчас проверю и напишу.
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 19:30
+
0
prntscr.com/cqlywc
Почему то здесь не докупается, настройки по умолчанию
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 19:45
+
0
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 19:47
+
0
В целом отрабатывает большинство сигналов, может проблема в особенностях самих мувингов
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 19:50
+
0
а вы не забыли про одну сделку в день?
avatar

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

  • 6 октября 2016, 20:07
+
0
кажется забыл. Все верно. Спасибо.
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 20:17
+
0
avatar

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

  • 6 октября 2016, 20:51
+
0
Большое спасибо!
avatar

  5  izzatilla Автор Сообщений: 107 - telma

  • 6 октября 2016, 21:03

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