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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник помощник.Перевод ордера в безубыток путём выставления отложного стопового ордера.

Необходим советник-помощник который переводит прибыльный ордер в безубыток путём выставления отложного стопового ордера

Т.е. стоплос отсутствует а в место него выставляется отложный стоповый ордер противоположного значения ( если ордер Buy в

профите то выставляется стоповый отложник Sell если ордер Sell в профите то выставляется отложный стоповый ордер Buy ).

Желательно чтобы советник мог определять и вести ордера как свои так и чужие по усмотрению, тоже самое с торгуемым

инструментом.
Объём отложного стопового ордера должен расчитываться автоматически с учётом размера отдельно «локируемого» ордера

помноженный на коэффициент «К» Причём таких ордеров с одинаковым магиком может быть открыто сразу несколько в разных

местах но локироваться должен каждый ордер в отдельности по мере его выхода в точку профита при котором генерируется

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

кажется простой — каждый прибыльный ордер в отдельности должен локироваться стоповым ордером. Думаю реализация будет не

лёгкой во всяком случае для меня, я сам в программировании не селён.

Название советника

«LockPofit»

Внешние параметры советника -----------------------------------------+
extern string _P_Expert = "---------- Параметры советника";
extern bool AllSymbols = True; // Следить за позициями всех символов
extern int Magic = -1; // Идентификатор локируемых позиций
extern int MagicLock = 111; // Идентификатор локирующих позиций
extern int LevelProfit = 250; // Уровень профита в пунктах
extern int LevelLock = 10; // Уровень безубытка-Растояние отолжного стопового ордера от локируемого ордера в

пунктах
extern double Klock = 1; //Коэффициент объема локирующего ордера

//------- Параметры исполнения торговых приказов ------------------------------+
extern string _P_Performance = "---------- Параметры исполнения";
extern bool UseSound = True; // Использовать звуковой сигнал
extern string SoundSuccess = «expert.wav»; // Звук успеха
extern string SoundError = «timeout.wav»; // Звук ошибки
extern int NumberOfTry = 2; // Количество торговых попыток
  • 0
  • Просмотров: 4650
  • 3 октября 2015, 01:31
  • Witar
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

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

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

  • 3 октября 2015, 02:38
+
0
Сделал для одного ордера. Можно погонять в тестере.
www.opentraders.ru/downloads/888/




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

extern double Lots        = 0.1;         // торговый объем
extern int    StopLoss    = 300;         // стоп лосс ордера
extern int    TakeProfit  = 500;         // тейк профит ордера
extern int    BuySell     = 0;           // 0-Off 1-Buy 2-Sell
extern int    LevelProfit = 250;         // Уровень профита в пунктах
extern int    LevelLock   = 250;         // Уровень безубытка-Растояние отолженого стопового ордера от локируемого ордера в пунктах
extern int    Slip        = 30;          // проскальзывание
extern int    Magic       = 111;         // магик  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int    res=0,p=0,b=0,s=0;
   double pr=0,sl=0,tp=0;

   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 || OrderType()==OP_SELL) p++;
            if(OrderType()==OP_BUYSTOP)  b++;
            if(OrderType()==OP_SELLSTOP) s++;
           }
        }
     }
     
   if(p<1)
     {
      if(BuySell==1)
        {
         //---- buy 
         pr=NormalizeDouble(Ask,Digits);
         if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits); else sl=0;
         if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits);
         res=OrderSend(Symbol(),OP_BUY,Lots,pr,Slip,sl,tp,"",Magic,0,Blue);
         return;
        }

      if(BuySell==2)
        {
         //---- sell   
         pr=NormalizeDouble(Bid,Digits);
         if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits); else sl=0;
         if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);  else tp=0;
         res=OrderSend(Symbol(),OP_SELL,Lots,pr,Slip,sl,tp,"",Magic,0,Red);
         return;
        }
     }

   if(p>0)
     {
      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 && s<1 && p<2)
                 {
                  if(Ask-OrderOpenPrice()>LevelProfit*Point)
                    {
                     pr=NormalizeDouble(Ask-LevelLock*Point,Digits);
                     if(StopLoss>0) sl=NormalizeDouble(pr+StopLoss*Point,Digits); else sl=0;
                     if(TakeProfit>0) tp=NormalizeDouble(pr-TakeProfit*Point,Digits);  else tp=0;
                     res=OrderSend(Symbol(),OP_SELLSTOP,Lots,pr,Slip,sl,tp,"",Magic,0,Red);
                     return;
                    }
                 }

               if(OrderType()==OP_SELL && b<1 && p<2)
                 {
                  if(OrderOpenPrice()-Bid>LevelProfit*Point)
                    {
                     pr=NormalizeDouble(Bid+LevelLock*Point,Digits);
                     if(StopLoss>0) sl=NormalizeDouble(pr-StopLoss*Point,Digits); else sl=0;
                     if(TakeProfit>0) tp=NormalizeDouble(pr+TakeProfit*Point,Digits);  else tp=0;
                     res=OrderSend(Symbol(),OP_BUYSTOP,Lots,pr,Slip,sl,tp,"",Magic,0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+


Редактирован: 5 октября 2015, 11:05
avatar

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

  • 3 октября 2015, 16:11

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