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

Рейтинг 2146



РЕКОМЕНДУЮ



Выставление отложенных ордеров сразу в двух направлениях, взамен закрытым.

Здравствуйте! Переделайте пожалуйста советник, который был сделан ранее в Столе заказов MQL — Ордера взамен закрытым по TP.

Т.З

1. Надо убрать из него две пары ордеров бай лимит и сел лимит и одну пару ордеров бай стоп и сел стоп, оставив только одну пару отложенного ордера, бай стоп и сел стоп.
Условия:
2. Ордера должны закрываться и по тейк профиту и по стоп лоссу. К примеру, если ордер бай стоп закрылся по профиту или по стопу лоссу, то автоматически должен закрыться и противоположный сел стоп, и наоборот. После чего, автоматически должна быть установлена новая пара противоположных ордеров, один ордер бай стоп, второй сел стоп, на равно удалённом расстоянии от цены, которое уже регулируется в этом советнике.
Вот пример такого скрипта — СКРИПТ SET 2 STOP ORDERS – ДВА ОТЛОЖЕННЫХ ОРДЕРА
Но он просто выставляет противоположные ордера, не мониторит и не удаляет при срабатывании ТП или СЛ противоположный ордер, и не ставит взамен такую же новую пару.
  • +1
  • Просмотров: 5153
  • 19 февраля 2016, 00:13
  • Vic654321
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
+1
Сначала делаю от 3-го уровня, а пока заказы есть.
avatar

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

  • 19 февраля 2016, 20:26
+
+1
Мне намного проще написать с нуля чем править чужой код. Набросал вариант:
www.opentraders.ru/downloads/1071/




//+------------------------------------------------------------------+
//|                                                   OpenOrders.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 Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Delta        = 300;      // расстояние от цены
extern int Slip         = 30;       // реквот
extern int Magic        = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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) 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()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Last()
  {
   int result=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Last()==1) DelOrder();

   if(CountOrders(0)<1 && CountOrders(1)<1)
     {
      if(CountOrders(4)<1)PutOrder(4,Bid+Delta*Point);
      if(CountOrders(5)<1)PutOrder(5,Bid-Delta*Point);
     }

  }
//+------------------------------------------------------------------+


Редактирован: 26 февраля 2016, 11:14
avatar

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

  • 25 февраля 2016, 10:09
+
0
О, спасибо Андрей огромное:) , то, что нужно. На тестере не плохие результаты*uptrend* , щас на демо буду пробовать, отпишуся потом.
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 26 февраля 2016, 10:11
+
0
Здравствуйте Андрей, ёще раз спасибо за советник. «Любопытные результаты», мягко говоря он выдал...:) .

А можно, ещё добавить в него функцию, чтобы противоположный ордер закрывался и открывалась новая пара не только тогда, когда сработает тейк профит, как сейчас, а и при срабатывании стоп лосс тоже? Заранее премного благодарен.:) 

avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 27 февраля 2016, 08:51
+
0
а по всем тикам? :) 
avatar

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

  • 27 февраля 2016, 16:33
+
0
Да, по всем, думаю так будет справедливо. :) 
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 27 февраля 2016, 21:43
+
0
А можно, ещё добавить в него функцию, чтобы противоположный ордер закрывался и открывалась новая пара не только тогда, когда сработает тейк профит, как сейчас, а и при срабатывании стоп лосс тоже?



//+------------------------------------------------------------------+
//|                                                   OpenOrders.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 Lots      = 0.1;      // лот
extern int StopLoss     = 500;      // лось
extern int TakeProfit   = 500;      // язь
extern int Delta        = 300;      // расстояние от цены
extern int Slip         = 30;       // реквот
extern int Magic        = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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) 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()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Last()
  {
   int result=0;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Last()==1 || Last()==2) DelOrder();

   if(CountOrders(0)<1 && CountOrders(1)<1)
     {
      if(CountOrders(4)<1)PutOrder(4,Bid+Delta*Point);
      if(CountOrders(5)<1)PutOrder(5,Bid-Delta*Point);
     }

  }
//+------------------------------------------------------------------+

avatar

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

  • 10 апреля 2016, 15:45
+
0
Спасибо большое Андрей, это именно то, что я хотел. Правда результаты теста не оправдали мои надежды. Видимо мимо, либо нужно дополнять ещё чем-то. Андрей, а можно попросить Вас переделать этот советник в точности наоборот, т.е вместо бай стоп — сэл лиммит, а вместо сэл стоп — бай лиммит?
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 17 апреля 2016, 20:59
+
0
Жду заявку на доработку.
avatar

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

  • 17 апреля 2016, 22:04
+
0
Ок, сделал zakaz.opentraders.ru/32023.html :) 
avatar

  4  Vic654321 Автор Сообщений: 42 - Виктор

  • 18 апреля 2016, 16:44

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