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

Рейтинг 2146



РЕКОМЕНДУЮ



Самозакрывающийся трейлинг

Прошу сделать советник для МТ-4, работающий по следующему алгоритму:

1.Советник ищет открытый ордер, открытый вручную или другим советником. (Желательно по всем инструментам, но и один сойдет для тестирования)

2.Если цена прошла от цены открытия расстояние, равное «Трал», советник закрывает часть объема открытого ордера. Закрываемая часть объема рассчитывается по формуле Vзакр=Кт*Vоткр с округлением в большую сторону.
Например, при Vоткр=0,05 лота и Кт=0,5, Vзакр=0,5*0,05=0,025=0,03

3.После закрытия части объема Vзакр1, оставшаяся часть Vост1= Vоткр-Vзакр1 переводится в безубыток и тралится с шагом «Шаг трала».

4. Если движение продолжается в ту же сторону, то через еще одно расстояние, равное «Трал», советник закрывает следующую часть от оставшегося объема Vост1 по той же формуле: Vзакр2=Кт*Vост1.
5. Если движение все еще продолжается в ту же сторону, то через еще одно расстояние, равное «Трал», советник закрывает следующую часть от оставшегося объема по той же формуле: Vзакр3=Кт*Vост2.

Процесс закончится когда:
А) цена дойдет до тейкпрофита,
Б) ордер закроется по трейлингу,
В) при последнем шаге закончится объем и ордер самозакроется за счет округления в большую сторону Vзакр3=Кт*Vост2 ====
0,01=0,01 или 0,02=0,02 лота (см. схему).
Параметры советника
1.Трал,
2.Шаг трала,
3.Коэффициент закрытия.
  • 0
  • Просмотров: 1149
  • 27 ноября 2021, 08:45
  • sledopyt
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
+1
не берусь, т.к. это индивидуальный алгоритм, а на такие вещи уходит в разы больше времени и сил
avatar

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

  • 27 ноября 2021, 09:24
+
0
Посмотрите этот вариант cmillion.ru/partial-closing-position/
avatar

  16  ssg Сообщений: 817

  • 27 ноября 2021, 16:42
+
0
Посмотрел. Здесь тоже была подобная разработка АМ2, но здесь нужно указывать для каждого уровня закрытия величину в пунктах и объем закрываемой позиции.
А также нет трейлинга и цена может вернуться к цене открытия, не дойдя до второго уровня 5 пипсов, и закрыться по безубытку.
Идеальный вариант был бы для трейлинга по методу «удавка» с постепенным закрытием объемов.
avatar

  12  sledopyt Автор Сообщений: 151

  • 28 ноября 2021, 15:40
+
0
интересно.
avatar

  14  verta81 Сообщений: 390

  • 27 ноября 2021, 17:56
+
0
Следующим стал самовыставляющий советник по известным мотивам
Редактирован: 28 ноября 2021, 15:44
avatar

  12  sledopyt Автор Сообщений: 151

  • 28 ноября 2021, 15:43
+
0

//+------------------------------------------------------------------+
//|                                               TrailClosePart.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int TrailingStop     = 500;        // трал
extern int TrailingStep     = 50;        // трал степ
extern double KClose        = 0.5;      // K.Close
double MINLOT,MAXLOT;
int countb=1;
int counts=1;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   MAXLOT = MarketInfo(Symbol(),MODE_MAXLOT);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//-------------------
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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())
           {
            if(OrderType()==type || type==-1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|     функция трала и частичного закрытия ордеров                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod,cl;
   double sl=0,lot=0,CloseLot=0;
   
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0)
              {
               if(Bid-OrderOpenPrice()>(TrailingStop*countb)*_Point)
                 { 
                  lot=OrderLots();
                  CloseLot=NormalizeDouble(lot*KClose,2);
                  countb++;
                  if(CloseLot<MINLOT)
                    {
                      CloseLot=MINLOT;
                      countb=1;
                    }
                   cl=OrderClose(OrderTicket(),CloseLot,NormalizeDouble(Bid,Digits),Slip,White);
                  }
                if(Bid-OrderOpenPrice()>TrailingStop*_Point && OrderStopLoss()<Bid-(TrailingStop+TrailingStep)*_Point)
                  {
                   sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                   if(OrderStopLoss()!=sl)
                      mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                  }
               }
            if(OrderType()==1)
              {
               if(OrderOpenPrice()-Ask>(TrailingStop*counts)*_Point)
                 {
                  lot=OrderLots();
                  CloseLot=NormalizeDouble(lot*KClose,2);
                  counts++;
                  if(CloseLot<MINLOT)
                    {
                      CloseLot=MINLOT;
                      counts=1;
                    }
                   cl=OrderClose(OrderTicket(),CloseLot,NormalizeDouble(Bid,Digits),Slip,White);
                  }
                if(OrderOpenPrice()-Ask>TrailingStop*_Point && OrderStopLoss()>(Ask+(TrailingStop+TrailingStep)*_Point))
                  {
                   sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                   if(OrderStopLoss()!=sl)
                      mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                  }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountOrders()>0)
   Trailing();
  }
//+------------------------------------------------------------------+

avatar

  14  verta81 Сообщений: 390

  • 28 ноября 2021, 17:45
+
0
Сейчас же протестируем
avatar

  12  sledopyt Автор Сообщений: 151

  • 29 ноября 2021, 12:31
+
0
Дождался, когда первая часть сработала.
avatar

  12  sledopyt Автор Сообщений: 151

  • 30 ноября 2021, 12:18

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