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

Рейтинг 2089



РЕКОМЕНДУЮ



Советник на RSI

Добрый день, Андрей. У Вас есть советник Universal. Можно переделать его в сеточник со стоп-ордерами, т.е. RSI пересекает уровень 30 снизу вверх-мы открыли сетку стоп-ордеров на покупку ( отступ от цены, шаг, тп, стоплосс, трал, МН, слип, трай). RSI пересекает уровень 70 сверху вниз-закрываем предыдущую сетку и открываем новую, на продажу. Уровень RSI (в настройках) на покупку и продажу- раздельный.
  • 0
  • Просмотров: 2934
  • 9 июня 2016, 08:22
  • obals
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Можно переделать, но еще проще из него сделать доливатор. Через шаг будет доливаться, почти тоже что и с отложками будет.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 9 июня 2016, 09:54
+
0
Я не сильно разбираюсь в нюансах названий, поэтому пусть будет доливатор, а дальше будем посмотреть.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 9 июня 2016, 10:40
+
0
Вечером буду делать.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 9 июня 2016, 10:59
+
0
Как то все:




//+------------------------------------------------------------------+
//|                                                       Grider.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2."
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Semi grid EA <<Universal Grider>>." 
#property description "This EA can be used as a Supplement to your trading strategy,"  
#property description "if you trade manually and use it as a standard grid EA."    
#property icon        "\\Images\\drawing.ico";                                   
#property strict

//--- Inputs
extern double Lot          = 0.1;      // Trade volume
extern double KLot         = 1.3;      // Lot increase
extern double MaxLot       = 5;        // Maximum lot
extern int StopLoss        = 0;        // Order sroploss
extern int TakeProfit      = 0;        // Order takeprofit
extern int TrailingStop    = 0;        // Trailing stop
extern int TrailingStep    = 0;        // Trailing step
extern int Count           = 5;        // Orders count
extern int Expiration      = 55;       // The expiry of the order in hours
extern int Step            = 100;      // Order step
extern int Delta           = 100;      // Distance from the price
extern int Slip            = 3;        // Slippage
extern int RSIPer          = 14;       // Period of RSI indicator
extern int UpLevel         = 55;       // Up level of RSI indicator
extern int DnLevel         = 45;       // Dn level of RSI indicator
extern int Magic           = 123;      // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!IsTradeAllowed())Alert("Allow the EA to trade!");
   if(!IsLibrariesAllowed())Alert("Allow DLL import!");
   if(!IsExpertEnabled()) Alert("Allow startup advisors!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0,err=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,Lots(type),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Ступенчатый трал               if(TrailingStop>0) Trailing();    |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*Point,Digits),OrderTakeProfit(),0,Yellow);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*Point,Digits),OrderTakeProfit(),0,Yellow);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   int err=0;
   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 CountOrders(int type=-1)
  {
   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()==type || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Лот для усреднителя                                              |
//+------------------------------------------------------------------+
double Lots(int type)
  {
   double lots=Lot;
   lots=NormalizeDouble(Lot*MathPow(KLot,CountOrders(type)),2);
   if(lots>MaxLot)lots=Lot;
   return(lots);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int type)
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double rsi1=iRSI(NULL,0,RSIPer,PRICE_CLOSE,1);
   double rsi2=iRSI(NULL,0,RSIPer,PRICE_CLOSE,2);

   if(TrailingStop>0) Trailing();

   if(CountOrders(-1)<1)
     {
      for(int i=0; i<Count;i++)
        {         
         if(rsi2<DnLevel && rsi1>DnLevel) {DelOrder(5); PutOrder(4,Bid+Delta*Point+Step*Point*i);}//buystop
         if(rsi2>UpLevel && rsi1<UpLevel) {DelOrder(4); PutOrder(5,Bid-Delta*Point-Step*Point*i);}//sellstop  
        }
     }

   Comment("\n All Profit: ",AllProfit(-1),
           "\n Buy Profit:  ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Buy Positions:  ",CountOrders(0),
           "\n Sell Positions: ",CountOrders(1),
           "\n All Positions:  ",CountOrders(0)+CountOrders(1));
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 9 июня 2016, 11:58
+
0
Спасибо за оперативность, попробуем сей фрукт.
avatar

  5  obals Автор Сообщений: 36 - слава

  • 9 июня 2016, 13:22
+
0
Андрей, у меня проблема при компиле выдаёт «cannot open icon file 'C:\Users\user\AppData\Roaming\MetaQuotes\Terminal\3F73F5301A2A2B329CFC8731B09270FD\MQL4\\Images\drawing.ico' Делал я как всегда- сохранял файл в буфере, копировал в мету, сохранял как… в mql4\'experts 0 0
»
avatar

  5  obals Автор Сообщений: 36 - слава

  • 9 июня 2016, 14:15
+
0
Удалите в коде эту строку #property icon "\\Images\\drawing.ico";

Если конечно Андрей разрешит :) 
avatar

  14  beton2011 Сообщений: 895

  • 9 июня 2016, 14:58
+
0
Да я это с другого грида переделывал.


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

//--- Inputs
extern double Lot          = 0.1;      // Trade volume
extern double KLot         = 1.3;      // Lot increase
extern double MaxLot       = 5;        // Maximum lot
extern int StopLoss        = 0;        // Order sroploss
extern int TakeProfit      = 0;        // Order takeprofit
extern int TrailingStop    = 0;        // Trailing stop
extern int TrailingStep    = 0;        // Trailing step
extern int Count           = 5;        // Orders count
extern int Expiration      = 55;       // The expiry of the order in hours
extern int Step            = 100;      // Order step
extern int Delta           = 100;      // Distance from the price
extern int Slip            = 3;        // Slippage
extern int RSIPer          = 14;       // Period of RSI indicator
extern int UpLevel         = 55;       // Up level of RSI indicator
extern int DnLevel         = 45;       // Dn level of RSI indicator
extern int Magic           = 123;      // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(!IsTradeAllowed())Alert("Allow the EA to trade!");
   if(!IsLibrariesAllowed())Alert("Allow DLL import!");
   if(!IsExpertEnabled()) Alert("Allow startup advisors!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0,err=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,Lots(type),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Ступенчатый трал               if(TrailingStop>0) Trailing();    |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   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(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*Point,Digits),OrderTakeProfit(),0,Yellow);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*Point,Digits),OrderTakeProfit(),0,Yellow);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   int err=0;
   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 CountOrders(int type=-1)
  {
   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()==type || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Лот для усреднителя                                              |
//+------------------------------------------------------------------+
double Lots(int type)
  {
   double lots=Lot;
   lots=NormalizeDouble(Lot*MathPow(KLot,CountOrders(type)),2);
   if(lots>MaxLot)lots=Lot;
   return(lots);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder(int type)
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double rsi1=iRSI(NULL,0,RSIPer,PRICE_CLOSE,1);
   double rsi2=iRSI(NULL,0,RSIPer,PRICE_CLOSE,2);

   if(TrailingStop>0) Trailing();

   if(CountOrders(-1)<1)
     {
      for(int i=0; i<Count;i++)
        {         
         if(rsi2<DnLevel && rsi1>DnLevel) {DelOrder(5); PutOrder(4,Bid+Delta*Point+Step*Point*i);}//buystop
         if(rsi2>UpLevel && rsi1<UpLevel) {DelOrder(4); PutOrder(5,Bid-Delta*Point-Step*Point*i);}//sellstop  
        }
     }

   Comment("\n All Profit: ",AllProfit(-1),
           "\n Buy Profit:  ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Buy Positions:  ",CountOrders(0),
           "\n Sell Positions: ",CountOrders(1),
           "\n All Positions:  ",CountOrders(0)+CountOrders(1));
  }
//+------------------------------------------------------------------+




avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 9 июня 2016, 17:51
+
0
Можно убрать экспирацию и закрывать все ордера при очередном наступлении условий по рси?
avatar

  5  obals Автор Сообщений: 36 - слава

  • 10 июня 2016, 06:14
+
0
Экспирацию можно поставить большое значение например 5555. Сейчас отложки удаляются при обратном сигнале, нужно закрывать позиции?
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 10 июня 2016, 06:53
+
0
Можно сделать выбор -закрыть все или закрыть только открытые?
avatar

  5  obals Автор Сообщений: 36 - слава

  • 10 июня 2016, 11:13
+
0
Cейчас есть выбор закрыть открытые: www.opentraders.ru/downloads/1205/

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 12 июня 2016, 09:48
+
0
Спасибо, попробуем!
avatar

  5  obals Автор Сообщений: 36 - слава

  • 13 июня 2016, 20:21

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