← Назад к списку файлов

partclose.mq4

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

#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 и нажмите кнопку, чтобы перейти к оплате.