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

closebyprofit.mq5

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

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

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

О программе

Этот советник для MetaTrader 5 предназначен для контроля совокупной прибыли открытых рыночных позиций и закрытия всех позиций при достижении заданного порога. Он работает по таймеру, периодически обновляя сведения об ордерах и вычисляя суммарную прибыль с учётом фильтра по магическим номерам. При превышении порога прибыли в валюте депозита или в процентах от баланса советник закрывает все отслеживаемые рыночные позиции, а при включённой опции также удаляет отложенные ордера. Дополнительно на графике может отображаться текущая суммарная прибыль и её процент от баланса. Советник не открывает новые позиции и не выполняет торговых операций, кроме закрытия и удаления ордеров по заданным условиям.

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

НастройкаОписание
ProfitValute Числовой порог прибыли в валюте депозита. При значении 0 контроль по сумме отключён. При достижении или превышении порога выполняется закрытие отслеживаемых позиций.
ProfitProcent Числовой порог прибыли в процентах от баланса счёта. При значении 0 контроль по проценту отключён. При достижении или превышении порога выполняется закрытие отслеживаемых позиций.
DeletePendingUse Логический переключатель. Если включён, при срабатывании условия по прибыли удаляются также отложенные ордера; если выключен, обрабатываются только рыночные позиции.
ShowInfo Логический переключатель. Если включён, на графике отображается текущая суммарная прибыль и её процент от баланса счёта.
MagicListUse Логический переключатель. Если включён, учитываются только ордера с магическими номерами из заданного списка; если выключен, учитываются все ордера.
Magic Строка со списком магических номеров, разделённых пробелами. Используется для фильтрации ордеров, когда включён учёт списка магических номеров.
Получить полный код

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

#property version   "1.00"
#property strict

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

D ProfitValute=0; //Profit in $ (0 - off)
D ProfitProcent=0; //Profit in % (0 - off)
B DeletePendingUse=false; //Delete pending use
B ShowInfo=true; //Show profit use

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

class CMyOrders: public COrders
  {
public:
   virtual double    getProfit(bool bMagicListUse,long &lMagic[])
     {
      double pr=0;

      int icount=ArraySize(m_orders);

      for(int i=icount-1; i>=0; i--)
        {
         if(m_orders[i].OrderCloseTime>0)
            continue;

         if(!CheckMagic(bMagicListUse,m_orders[i].OrderMagicNumber,lMagic))
            continue; //пропустим если не наш меджик

         if(m_orders[i].OrderType<2)
            pr+=m_orders[i].Profit;
        }

      return NormalizeDouble(pr,3);
     }

   virtual bool      OrderCloseAll(bool bMagicListUse,long &lMagic[],bool bDeletePending)
     {
      __COPYRIGHT__
      double currents[][3]; //профит, тикет, i
      ArrayResize(currents,0);
      int c=0;

      bool bRet=false;

      for(int i=ArraySize(m_orders)-1; i>=0; i--)
        {
         if(m_orders[i].OrderCloseTime>0)
            continue;

         if(!CheckMagic(bMagicListUse,m_orders[i].OrderMagicNumber,lMagic))
            continue; //пропустим если не наш меджик

         if(bDeletePending || (!bDeletePending && m_orders[i].OrderType<2))
           {
            ArrayResize(currents,c+1);
            currents[c][0]=m_orders[i].Profit;
            currents[c][1]=(double)m_orders[i].OrderTicket;
            currents[c][2]=i;
            c++;
           }
        }

      if(c>0)
        {
         for(int i=0; i<ArrayRange(currents,0); i++)
           {

            if(Close((int)currents[i][1],-1,clrNONE))
               bRet=true;
           }
        }

      if(bRet)
        {

         UpdateOrders(); //чистим от удаленных
        }

      return bRet;
     }

   bool              CheckMagic(bool bMagicListUse,long imagic,long &lMagic[])
     {
      if(!bMagicListUse)
         return true;

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

      return false;
     }
  };

class CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main;
   CTimer               m_timer;
   long        

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

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

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

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

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

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

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