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

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от div15



может все просто Комментариев 7
2012-03-22 17:38:38Рейтинг 0

советник помощник по магик номеру.

советник выставляет отложенный ордер BUY LIMIT SELL LIMIT или SELL STOP BUY STOP по
следующим условиям

1. если есть открытый ордер, (например BUY) С МАГИКОМ 123
то советник выставляет отложенный ордер SELL STOP или BUY LIMITт (на выбор)
НО УЖЕ С ДРУГИМ МАГИКОМ(ЧТОБ НЕ ПУТАЛИСЬ)
2. тоже что и первое только для SELL ордера
3. если ордер с магиком (123) закрылся А ОРДЕР ОТЛОЖЕННЫЙ НЕ СРАБОТАЛ ЕГО УДАЛЯЕМ, если сработал
то закрывается по стоп лоссу или тейк профиту.

заранее благодарен если получится*hi* 
  • +0
  • Просмотров: 3432
  • 28 августа 2018, 10:26
  • div15
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник по индикатору "Следопыт".
Следующая запись в группе  
РОБОТ ПО ИНДИКАТОРУ "GOLDEN MA".
26 августа 2018
29 августа 2018

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

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

+
0
посмотрю сегодня
avatar

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

  • 28 августа 2018, 17:43
+
0
сделал набросок. распишите все подробно на скринах, весь цикл.




//+------------------------------------------------------------------+
//|                                                         Help.mq4 |
//|                                              Copyright 2018, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lot1       = 0.1;      // лот 1
extern double Lot2       = 0.2;      // лот 2
extern int StopLoss      = 444;      // лось
extern int TakeProfit    = 555;      // язь
extern int Slip          = 30;       // реквот
extern int BuySell       = 1;        // 1-бай 2-селл 0-нет
extern int Delta         = 200;      // расстояние от позы
extern int StopLimit     = 1;        // 1-стоп 2-лимит
extern int Magic1        = 111;      // магик 1
extern int Magic2        = 222;      // магик 2

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,double lot,int magic)
  {
   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()==Magic1 || OrderMagicNumber()==Magic2))
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TypeOrder()
  {
   int type=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic1)
           {
            if(OrderType()<2) type=OrderType();
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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()==Magic2)
           {
            if(OrderType()==type || type==-1) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic2)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      DelOrder();
      if(BuySell==1) PutOrder(0,Ask,Lot1,Magic1);
      if(BuySell==2) PutOrder(1,Bid,Lot1,Magic1);
     }

   if(CountTrades()>0)
     {
      if(StopLimit==1)
        {
         if(CountOrders(4)<1 && TypeOrder()==1) PutOrder(4,Bid+Delta*_Point,Lot2,Magic2);
         if(CountOrders(5)<1 && TypeOrder()==0) PutOrder(5,Bid-Delta*_Point,Lot2,Magic2);
        }

      if(StopLimit==2)
        {
         if(CountOrders(2)<1 && TypeOrder()==0) PutOrder(2,Bid-Delta*_Point,Lot2,Magic2);
         if(CountOrders(3)<1 && TypeOrder()==1) PutOrder(3,Bid+Delta*_Point,Lot2,Magic2);
        }
     }
  }
//+------------------------------------------------------------------+

avatar

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

  • 28 августа 2018, 21:11
+
0
здравствуйте. сам советник не должен выставлять ордера.
советник должен проверять есть ли ордер с магиком (123) если есть то должен выставить ордер SELL STOP или BUY LIMITт
3. если ордер с магиком (123) закрылся А ОРДЕР ОТЛОЖЕННЫЙ НЕ СРАБОТАЛ ЕГО УДАЛЯЕМ, если сработал
то закрывается по стоп лоссу или тейк профиту.
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 29 августа 2018, 18:24
+
0
здравствуйте. сам советник не должен выставлять ордера.

это нужно для теста. если не надо ставьте 0. а иначе как его тестировать?

extern int BuySell = 1; // 1-бай 2-селл 0-нет
avatar

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

  • 29 августа 2018, 20:06
+
0
понятно. тогда спасибо за оперативность в выполнении задачи.
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 29 августа 2018, 20:19

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