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

Рейтинг 2089



РЕКОМЕНДУЮ



советник меняла

Добрый день Андрей. Можете сделать советник, который меняет у уже открытых ордеров (с определённым МН) ТП и стоп лосс? Сов должен передвигать их на тот же уровень что и у последнего открытого ордера, т.е. не закрывать все ордера по достижению ТП или стоп лосс уровней последнего открытого ордера, а именно менять-подтягивать уровни всех ранее открытых ордеров к уровню последнего открытого ордера. Хорошо бы в настройках иметь; 1.МН-ордеров у которых должен менять, 2.Выбор ТП (вкл-выкл), 3… Выбор Стоп лосс (вкл-выкл)
  • 0
  • Просмотров: 3182
  • 13 июля 2016, 13:51
  • obals
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
3 штуки подряд! Что это было? :D 
Схемку нарисуйте как располагаются ордера чтобы можно было смоделировать в тестере и попробую сейчас сообразить.
avatar

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

  • 13 июля 2016, 13:59
+
0
За 3 отсыла извиняюсь, видимо повис инет, а я тупо жал кнопку. Схемку попробую нарисовать.
avatar

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

  • 13 июля 2016, 14:03
+
0
Цена 1.3 открыт ПЕРВЫЙ ордер buy лот 0.1 с ТП при 1.4 и СЛ при 1.0
Цена пошла вниз
Цена 1.2 открыт ВТОРОЙ ордер селл лот 0.2 с ТП при 1.1 и СЛ при 1.5
ИЗМЕНИЛСЯ ПЕРВЫЙ ордер buy лот 0.1 ТП стал при 1.1 и СЛ при 1.5 Цена пошла вверх
Цена 1.3 открыт ТРЕТИЙ ордер buy лот 0.3 с ТП при 1.4 и СЛ при 1.0 ИЗМЕНИЛСЯ ВТОРОЙ ордер селл лот 0.2 с ТП стал при 1.4 и СЛ при 1.0
ИЗМЕНИЛСЯ ПЕРВЫЙ ордер buy лот 0.1 ТП стал при 1.4 и СЛ при 1.0
avatar

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

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

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

  • 13 июля 2016, 15:07
+
0
Cмоделировал в тестере. Выставил ордера с разными стопами, затем все модифицировались по последнему. Пока сырой набросок.






//+------------------------------------------------------------------+
//|                                                       Change.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 int StopLoss    = 0;    // Order sroploss
extern int TakeProfit  = 0;    // Order takeprofit
extern int Magic       = 123;  // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,0.1,NormalizeDouble(price,Digits),3,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastSL()
  {
   double sl=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) sl=OrderStopLoss();
     }
   return(sl);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastTP()
  {
   double tp=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) tp=OrderTakeProfit();
     }
   return(tp);
  }
//+------------------------------------------------------------------+
//|  Модификация стопов                                              |
//+------------------------------------------------------------------+
void StopMode(double sl,double tp)
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               return;
              }
           }

         if(OrderType()==OP_SELL)
           {
            if(OrderStopLoss()!=sl && OrderTakeProfit()!=tp)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
               return;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      for(int i=1;i<=2;i++)
        {
         PutOrder(2,Bid-222*Point*i);
         PutOrder(5,Bid-666*Point);
        }
     }

   StopMode(LastSL(),LastTP());

   Comment("\n SL: ",LastSL(),
           "\n TP: ",LastTP());
  }
//+------------------------------------------------------------------+

avatar

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

  • 13 июля 2016, 15:50
+
0
Я пользуюсь разработанным Вами советником Гридер на пробое свечи zakaz.opentraders.ru/32407.html
avatar

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

  • 13 июля 2016, 17:08
+
0
Когда разные ордера и стоп не туда попадет ошибка будет, здесь или большие стопы ставить или учитывать цену открытия.
avatar

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

  • 13 июля 2016, 19:03
+
0
Хорошо бы «разжевать» последнюю фразу для «тех кто в танке» Иначе мой мозг перегреется.
avatar

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

  • 13 июля 2016, 23:11
+
0
У меня также мозг кипит когда нет четкого ТЗ, необходимо чтобы было все предельно ясно и наглядно. Чтобы не приходилось все додумывать и догадываться а тем более вытягивать задание. Когда не ясности это просто выносит мозг. Чем доступнее и понятнее вы сможете донести до программиста желаемое тем лучше будет результат.
avatar

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

  • 14 июля 2016, 07:54
+
+1
avatar

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

  • 14 июля 2016, 08:15
+
+1
Еще
avatar

  13  Fargo Сообщений: 495

  • 14 июля 2016, 09:01
+
0
Fargo, беру на вооружение :D 
avatar

  27  Oxy Сообщений: 3418 - ..ιllιlι.lι.ιllι.ιlι..

  • 14 июля 2016, 12:52
+
0
Памятка заказчику :) 

avatar

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

  • 14 июля 2016, 13:37
+
0
Ваше задание индивидуальное, все функции нужно писать и отлаживать с нуля, это долго. Мне здесь оплачивается только небольшой объем работы. Пока такой вариант.




//+------------------------------------------------------------------+
//|                                                       Change.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 int StopLoss    = 0;    // Order sroploss
extern int TakeProfit  = 0;    // Order takeprofit
extern int Magic       = 123;  // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,0.1,NormalizeDouble(price,Digits),3,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastSL()
  {
   double sl=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) sl=OrderStopLoss();
     }
   return(sl);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastTP()
  {
   double tp=0;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) tp=OrderTakeProfit();
     }
   return(tp);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
  {
   int type=8;
   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) type=OrderType();
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|  Модификация стопов                                              |
//+------------------------------------------------------------------+
void StopMode(double sl,double tp)
  {
   bool m;
   double st=0,tk=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            st=NormalizeDouble(sl,5);
            tk=NormalizeDouble(tp,5);
            
            if(OrderStopLoss()!=tk && OrderTakeProfit()!=st)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),tk,st,0,Yellow);
               return;
              }
           }

         if(OrderType()==OP_SELL)
           {
            st=NormalizeDouble(sl,5);
            tk=NormalizeDouble(tp,5);
            if(OrderStopLoss()!=st && OrderTakeProfit()!=tk)
              {
               m=OrderModify(OrderTicket(),OrderOpenPrice(),st,tk,0,Yellow);
               return;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      for(int i=1;i<=2;i++)
        {
         PutOrder(2,Bid-222*Point*i);
         PutOrder(5,Bid-666*Point);
        }
     }

   StopMode(LastSL(),LastTP());

   Comment("\n SL: ",LastSL(),
           "\n TP: ",LastTP(),
           "\n Type: ",LastType());
  }
//+------------------------------------------------------------------+

avatar

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

  • 14 июля 2016, 08:52
+
0
И за это спасибо.
avatar

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

  • 14 июля 2016, 20:26

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