beton2011

 
Уровень 14

  Моя торговля


График торгового счета beton2011


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

Рейтинг 2087



РЕКОМЕНДУЮ



Советник M-A

Можете написать советника по индикатору МА.

Если цена ниже МА — открывается ордер на продажу, если цена выше МА — тогда на покупку. Только надо сделать так, пока цена находится выше или ниже индикатора МА, советник открывает ордера на каждой новой свече.

Закрытие ордеров по ТП, или закрываются все открытые ордера при смене сигнала индикатора МА.

Нужна еще такая функция, если цена ушла на какое то количество пунктов от индикатора МА, тогда новые ордера не открываются, то есть что бы можно было задать в настройках промежуток в пунктах от индикатора МА в котором будут открываться ордера.

Спасибо
  • +1
  • Просмотров: 5025
  • 13 мая 2015, 12:55
  • beton2011
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
avatar

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

  • 13 мая 2015, 14:26
+
0
Супер, только пожалуйсто добавьте установление ТП для открытых ордеров. Получится что какие то ордера закроются по ТП а остальные закроются по индикатору.
avatar

  14  beton2011 Автор Сообщений: 895

  • 13 мая 2015, 15:05
+
0
Добавил стопы:

//+------------------------------------------------------------------+
//|                                                        MAExp.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131111
//--- Inputs
input double StopLoss      = 500;
input double TakeProfit    = 500;
input double Lots          = 0.1;
input int    MovingPeriod  = 12;
input int    MovingShift   = 6;
input int    Delta         = 6;
input int    Slip          = 30;
input int    Count         = 100;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int Orders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma;
   int    res;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Bid<ma && ma-Bid<Delta*Point)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Ask>ma && Ask-ma<Delta*Point)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double ma;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Ask<ma)
           {
            CloseAll();
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Bid>ma)
           {
            CloseAll();
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseAll()
  {
   bool cl,sel;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
           {
            if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
           }
         Sleep(1000);
        }
     }
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar=0;
   datetime curbar=Time[0];
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return (true);
     }
   else
     {
      return(false);
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(NewBar())
     {
      if(Orders(Symbol())<=Count) OpenPos();
      ClosePos();
     }
//---
  }
//+------------------------------------------------------------------+
avatar

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

  • 13 мая 2015, 15:46
+
0
Спасибо, все отлично работает.

Можно еще кое что добавить в этот советник, это последняя просьба по этому советнику.

Надо сделать так что бы советник не закрывал все открытые ордера по сигналу индикатора, то есть должен оставлять прошлые ордера при смене направления и открывать дальше ордера уже в другом направлении, закрытие всех ордера происходит по достижению процента профита по эквита.
avatar

  14  beton2011 Автор Сообщений: 895

  • 14 мая 2015, 12:06
+
0
Сделал.




//+------------------------------------------------------------------+
//|                                                        MAExp.mq4 |
//|                                              Copyright 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131111
//--- Inputs
input double StopLoss      = 500;
input double TakeProfit    = 500;
input double Lots          = 0.1;
input int    MovingPeriod  = 12;
input int    MovingShift   = 6;
input int    Delta         = 6;
input int    Slip          = 30;
input int    Count         = 100;
input int    EquityRisk    = 20;  // если значение больше 0 включается закрытие по эквити. вычисляется в процентах от баланса.
input int    EquityProfit  = 20;  // если значение больше 0 включается закрытие по профиту эквити. вычисляется в процентах от баланса.

double Prosadka;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int Orders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double ma;
   int    res;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Bid<ma && ma-Bid<Delta*Point)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Ask>ma && Ask-ma<Delta*Point)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void ClosePos()
  {
   double ma;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Ask<ma)
           {
            CloseAll();
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Bid>ma)
           {
            CloseAll();
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+  
void CloseAll()
  {
   bool cl,sel;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      sel=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
           {
            if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
            if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
           }
         Sleep(1000);
        }
     }
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar=0;
   datetime curbar=Time[0];
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return (true);
     }
   else
     {
      return(false);
     }
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(NewBar())
     {
      if(Orders(Symbol())<=Count) OpenPos();
      //ClosePos();
     }
     
   if(EquityRisk>0)
     {
      double BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);
      double EQUITY=AccountInfoDouble(ACCOUNT_EQUITY);
      Prosadka=100*(BALANCE-EQUITY)/BALANCE;
        {
         if(Prosadka>=EquityRisk)
           {
            CloseAll();
            Print("Closed All due to Stop Out");
           }
        }
     }
     
   if(EquityProfit>0)
     {
      BALANCE=AccountInfoDouble(ACCOUNT_BALANCE);
      EQUITY=AccountInfoDouble(ACCOUNT_EQUITY);
      Prosadka=100*(EQUITY-BALANCE)/BALANCE;
        {
         if(Prosadka>=EquityProfit)
           {
            CloseAll();
            Print("Closed All due to All Profit");
           }
        }
     }   
     
//--------------     
   Comment("\n Баланс: ",  DoubleToString(AccountInfoDouble(ACCOUNT_BALANCE),2),
           "\n Средства: ",  DoubleToString(AccountInfoDouble(ACCOUNT_EQUITY),2),
           "\n Прибыль: ",  DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT)),2);
                               
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 14 мая 2015, 12:34
+
0
Спасибо вам большое :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 14 мая 2015, 13:01
комментарий был удален 2015-05-14 13:26:50 beton2011

+
0
У себя смотрел, нормально все. Там только ограничение стоит на количество ордеров открываемых
avatar

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

  • 14 мая 2015, 13:42
+
0
Все нормально :) 
avatar

  14  beton2011 Автор Сообщений: 895

  • 14 мая 2015, 13:59
+
0
*hi* Спасибо за советник
Редактирован: 3 декабря 2015, 22:49
avatar

  8  radox Сообщений: 9

  • 19 ноября 2015, 13:30

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