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

CloseAtProfit

-closeatprofit.mq4
Вы автор или правообладатель?

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

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

О программе

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

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

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

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

НастройкаОписание
useProfitToClose Переключатель автоматического закрытия позиций при достижении заданного уровня прибыли. При выключении проверка прибыли не выполняется.
profitToClose Порог прибыли в денежном выражении. При достижении совокупным профитом этого значения советник закрывает позиции и удаляет ордера.
useLossToClose Переключатель автоматического закрытия позиций при достижении заданного уровня убытка. При выключении проверка убытка не выполняется.
lossToClose Порог убытка в денежном выражении. При достижении совокупным убытком этого значения советник закрывает позиции и удаляет ордера.
AllSymbols Режим работы со всеми символами на сервере. При включении советник закрывает позиции и удаляет ордера по всем инструментам; при выключении — только по символу текущего графика.
PendingOrders Учёт отложенных ордеров при закрытии и удалении. При включении советник также закрывает и удаляет отложенные ордера; при выключении — работает только с рыночными позициями.
MaxSlippage Допустимое максимальное проскальзывание цены при закрытии позиций. Задаётся в пунктах текущего инструмента.
showMenu Переключатель отображения информационного меню на графике. При выключении советник не рисует и не обновляет графические объекты.
menuColor Цвет текстовых элементов информационного меню (заголовки и подписи).
variablesColor Цвет динамических значений в информационном меню (количество позиций, лоты, профит).
font Размер шрифта информационного меню, отображаемого на графике.
Получить полный код

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

extern bool      useProfitToClose       = true;
extern double    profitToClose          = 0.05;
extern bool      useLossToClose         = false;
extern double    lossToClose            = 100;
extern bool      AllSymbols             = true;
extern bool      PendingOrders          = true;
extern double    MaxSlippage            = 0;   
extern bool      showMenu               = true;
extern color     menuColor              = White; 
extern color     variablesColor         = Red;
extern int       font                   = 14;

double pips2dbl, pips2point, pipValue, maxSlippage,
       profit;

bool   clear;

int   medzera = 8,
      trades;

double menulots;

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {

   if(showMenu)
   {
      ObjectDelete("name");
      ObjectDelete("Openl");
      ObjectDelete("Open");
      ObjectDelete("Lotsl");
      ObjectDelete("Lots");
      ObjectDelete("Profitl");
      ObjectDelete("Profit");
   }

   return(0);
  }

int start()
{
      // код доступен только после оплаты
   }

bool CloseDeleteAll()
{
    int total  = OrdersTotal();
      for (int cnt = total-1 ; cnt >=0 ; cnt--)
      {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) 
         {
            switch(OrderType())
            {
               case OP_BUY       :
               {
                  if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),maxSlippage,Violet))
                     return(false);
               }break;                  
               case OP_SELL      :
               {
                  if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),maxSlippage,Violet))
                     return(false);
               }break;
            }             

            if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
               if(!OrderDelete(OrderTicket()))
               { 
                  Print("Error deleting " + OrderType() + " order : ",GetLastError());
                  return (false);
               }
          }
      }
      return (true);
}

bool CloseDeleteAllCurrent()
{
    int total  = OrdersTotal();
      for (int cnt = total-1 ; cnt >=0 ; cnt--)
      {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) 
         {
            if(OrderSymbol()==Symbol())
            {
               switch(OrderType())
               {
                  case OP_BUY       :
                  {
                     if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),maxSlippage,Violet))
                        return(false);
                  }break;

                  case OP_SELL      :
                  {
                     if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),maxSlippage,Violet))
                        return(false);
                  }break;
               }             

            if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
               if(!OrderDelete(OrderTicket()))
               { 
                  return (false);
               }
            }
         }
      }
      return (true);
}

bool CloseDeleteAllNonPending()
{
    int total  = OrdersTotal();
      for (int cnt = total-1 ; cnt >=0 ; cnt--)
      {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

         if(O

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

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

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

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

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

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

Стоимость полного кода
740₽ ≈ $10