← К каталогу
Исходный код · ID 3496

partclose.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Торговый советник для платформы MetaTrader 4, предназначенный для управления открытыми позициями. В обработчике OnTick выполняет корректировку уровней стоп-лосса и тейк-профита активных позиций, а также поэтапное частичное закрытие позиций при достижении заданных уровней прибыли. Советник поддерживает фильтрацию по магическим числам и исключение отдельных торговых символов.

Настройки программы

НастройкаОписание
StopLoss (StopLoss) Стоп-лосс — Числовой параметр. Значение стоп-лосса для корректировки позиций.
TakeProfit 1 (TakeProfit1) Тейк-профит 1 — Числовой параметр. Первый уровень тейк-профита, при достижении которого выполняется первое частичное закрытие.
Part 1 close % (Part1) Процент закрытия части 1 — Числовой параметр. Процент объёма позиции для первого частичного закрытия.
TakeProfit 2 (TakeProfit2) Тейк-профит 2 — Числовой параметр. Второй уровень тейк-профита, при достижении которого выполняется второе частичное закрытие.
Part 2 close % (Part2) Процент закрытия части 2 — Числовой параметр. Процент объёма позиции для второго частичного закрытия.
TakeProfit 3 (TakeProfit3) Тейк-профит 3 — Числовой параметр. Третий уровень тейк-профита, при достижении которого выполняется полное закрытие позиции и корректировка стоп-лосса.
All symbols (AllSymbols) Все символы — Логический переключатель. При включении советник обрабатывает позиции на всех символах; при выключении — только на текущем символе.
Exclude symbols (sample: XAUUSD EURGBP) (Exclude) Исключить символы — Текстовый параметр. Список символов, исключаемых из обработки, разделённых пробелами.
Magic list use (false = all magic) (MagicListUse) Использовать список магик — Логический переключатель. При включении используется фильтрация позиций по указанному списку магических чисел; при выключении обрабатываются все магические числа.
Magic list (sample: 0 12345 3444 777) (Magic) Список магик — Текстовый параметр. Список магических чисел для фильтрации обрабатываемых ордеров, разделённых пробелами.
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict

#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>

D StopLoss=90; //StopLoss
D TakeProfit1=20; //TakeProfit 1
D Part1=30; //Part 1 close %
D TakeProfit2=50; //TakeProfit 2
D Part2=30; //Part 2 close %
D TakeProfit3=100; //TakeProfit 3

B AllSymbols=true;  //All symbols
S Exclude=""; //Exclude symbols (sample: XAUUSD EURGBP)

B MagicListUse=false; //Magic list use (false = all magic)
S Magic=""; //Magic list (sample: 0 12345 3444 777)

class CMyOrders: public COrders
  {
public:
   bool              CheckMagic(string symbol,bool bMagicListUse,long imagic,long &lMagic[])
     {

      if(symbol!=m_name && !AllSymbols)
       return false;

      if(StringFind(Exclude,symbol,0)>=0) 
       return false;   

      if(!bMagicListUse)
         return true;

      for(int i=0; i<ArraySize(lMagic); i++)
        {
         if(imagic==lMagic[i])
            return true;
        }

      return false;
     }

   virtual bool      SelectByIndex(int i,bool is_position,bool bMagicListUse,long &lMagic[])
     {
      if(is_position)
        {
         if(!m_position.SelectByIndex(i))
            return false;

         if(CheckMagic(m_position.Symbol(),bMagicListUse,m_position.Magic(),lMagic))
            return true;
        }
      else
        {
         if(!m_order.SelectByIndex(i))
            return false;

         if(m_order.OrderType()>=6)
            return false; //не пропустим ордера с нестандартным типом отложки и рыночные стандартные ордера обрабатываем только

         if(CheckMagic(m_order.Symbol(),bMagicListUse,m_order.Magic(),lMagic))
            return true;
        }

      return false;
     }

   void              ControlOrders(double dtake,double dstop,bool bMagicListUse,long &lMagic[])//
     {
      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         if(!SelectByIndex(i,true,bMagicListUse,lMagic))
            continue;

         int etype=m_position.PositionType();

         if(etype==OP_BUY || etype==OP_SELL)
           {

            double dsl=m_position.StopLoss();
            double dtp=m_position.TakeProfit();
            double dopen=m_position.PriceOpen();

            double dtakeprofit=dtp;
            double dstoploss=dsl;

            if(dstop>0)
              {
               double dnewsl=dopen-TypeToDirect(etype)*dstop*p;

               dsl=dopen-TypeToDirect(etype)*dstop*p;

              }
            else
               if(dstop==0)
                  dsl=0;

            if(dtake>0)
               dtp=dopen+TypeToDirect(etype)*dtake*p;
            else
               if(dtake==0)
                  dtp=0;

            if(CheckPositionModify(true,m_position.Symbol(),etype,dstoploss,dtakeprofit,dsl,dtp))
               OrderModify(m_position.Ticket(),-1,dsl,dtp);
           }
        }

     }

   bool              PartClose(double dpartclose_profit1,double dpartclose_procent1,double dpartclose_profit2,double dpartclose_procent2,bool bMagicListUse,long &lMagic[])
     {

      ulong iticket=0;

      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         if(!SelectByIndex(i,true,bMagicListUse,lMagic))
            continue;

         ENUM_POSITION_TYPE etype=(ENUM_POSITION_TYPE)m_position.PositionType();

         if(etype==POSITION_TYPE_BUY || etype==POSITION_TYPE_SELL)
           {

            m_symbol.Name(m_position.Symbol());
            m_symbol.Refresh();

            double dopen=m_position.PriceOpen();
            double dtake=m_position.TakePr

Показано первые 50% кода (символов: 4637)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
463,70₽ ≈ $5.67