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

CloseAtTime

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

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

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

О программе

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

Советник поддерживает несколько режимов фильтрации закрываемых ордеров: закрытие всех позиций, только по конкретному символу, по магическому номеру или по номеру тикета. Также доступны отдельные переключатели для закрытия отложенных ордеров и рыночных позиций.

При закрытии рыночных позиций реализована логика повторных попыток (до трёх) в случае неудачного закрытия, а также выводится информация об ошибках через стандартный журнал терминала. Отложенные ордера удаляются с помощью OrderDelete, рыночные — с помощью OrderClose.

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

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

НастройкаОписание
__s7 Разделитель настроек закрытия — Разделитель группы настроек закрытия
Close All (bAllClose) Закрыть все — Переключатель закрытия всех ордеров без фильтрации
Close by Symbol (bSymClose) Закрыть по символу — Переключатель закрытия ордеров по символу
Close by Magic Number (bMNClose) Закрыть по магическому номеру — Переключатель закрытия ордеров по магическому номеру
Close by Ticket Number (bTNClose) Закрыть по тикету — Переключатель закрытия ордера по номеру тикета
Close Pending Orders (PO) Закрытие отложенных ордеров — Переключатель включения удаления отложенных ордеров
Close Market Orders (MO) Закрытие рыночных ордеров — Переключатель включения закрытия рыночных позиций
Local time to close (TimeToClose) Время для закрытия — Локальное дата и время, при достижении которых запускается закрытие ордеров
__s3 Разделитель параметров закрытия — Разделитель группы параметров закрытия
Symbol to close (SymClose) Символ для закрытия — Символ торгового инструмента для выборочного закрытия
Magic Number to close (MNClose) Магический номер для закрытия — Магический номер для идентификации ордеров, подлежащих закрытию
Ticket Number to close (TNClose) Тикет для закрытия — Номер тикета ордера для выборочного закрытия
Получить полный код

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

#property strict

extern string __s7="-----  Close Settings  -----------------------";
extern bool bAllClose = false; //Close All
extern bool bSymClose = false; //Close by Symbol
extern bool bMNClose = false; //Close by Magic Number
extern bool bTNClose = false; //Close by Ticket Number
extern bool PO = false; //Close Pending Orders
extern bool MO = false; //Close Market Orders
extern string TimeToClose="YYYY.MM.DD HH:MI"; //Local time to close

extern string __s3="-----  Close Parameters  ---------------------";
extern string SymClose=""; //Symbol to close
extern int MNClose = 0; //Magic Number to close
extern int TNClose = 0; //Ticket Number to close

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

int deinit()
  {
   return(0);
  }

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

void CloseProcess()
  {
   int error;
   int MaxSlippage=3;
   double AskOrBid;

   string DigitsS=StringConcatenate(MarketInfo(StringConcatenate(OrderSymbol()),MODE_DIGITS));
   int vDigits=StrToInteger(DigitsS);

   RefreshRates();
   if(OrderType()==OP_BUY) { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_BID),vDigits); } else { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_ASK),vDigits); }

   if(PO==true)
     {
      if(OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)
        {
         if(!OrderDelete(OrderTicket()))
           {
            error=GetLastError();
            Print("Error deleting order for ticket:"+StringConcatenate(OrderTicket())+" Error: "+StringConcatenate(error)+" : "+ErrorDescription(error));
           }
        }
     }

   if(MO==true)
     {
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         if(OrderClose(OrderTicket(),OrderLots(),AskOrBid,MaxSlippage)==false)
           {
            error=GetLastError();
            Print("Error closing order for ticket:"+StringConcatenate(OrderTicket())+" Error: "+StringConcatenate(error)+" : "+ErrorDescription(error));
            Sleep(1000);

            RefreshRates();
            if(OrderType()==OP_BUY) { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_BID),vDigits); } else { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_ASK),vDigits); }

            if(OrderClose(OrderTicket(),OrderLots(),AskOrBid,MaxSlippage)==false)
              {
               error=GetLastError();
               Print("Error closing order for ticket:"+StringConcatenate(OrderTicket())+" Error: "+StringConcatenate(error)+" : "+ErrorDescription(error));
               Sleep(1000);

               RefreshRates();
               if(OrderType()==OP_BUY) { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_BID),vDigits); } else { AskOrBid=NormalizeDouble(MarketInfo(StringConcatenate(OrderSymbol()),MODE_ASK),vDigits); }

               if(OrderClose(OrderTicket(),OrderLots(),AskOrBid,MaxSlippage)==false)
                 {
                  error=GetLastError();
                  Print("Error closing order for ticket:"+StringConcatenate(OrderTicket())+" Error: "+StringConcatenate(error)+" : "+ErrorDescription(error));
                 }
              }
           }
        }
     }
   return;
  }

string ErrorDescription(int error_code)
  {
   string error_string;

   switch(error_code)
     {

      case 0:
      case 1:   error_string="no error";                                                  break;
      case 2:   error_string="common error";                                              break;
      case 3:   error_string="invalid trade parameters";                                  break;
      case 4:   error_string="trade server is busy";                                      break;
      case 5:   error_string="old version of the client terminal";                        break;
      case 6:   error_string="no connection with trade server";                           break;
      case 7:   error_string="not enough rights";                                         break;
      case 8:   error_string="too frequent requests";                                     break;
      case 9:   error_string="malfunctional trade operation (never returned error)";      break;
      case 64:  error_string="account disabled";                                          break;
      case 65:  error_string="invalid account";                                           break;
      case 128: error_string="trade timeout";                                             break;
      case 129: error_string="invalid price";                                             break;
      case 130: error_string="invalid stops";                                             break;
      case 131: error_string="invalid trade volume";                                      break;
      case 132: error_string="market is closed";                                          break;
      case 133: error_string="trade is disabled";                                         break;
      case 134: error_string="not enough money";                                          break;
      case 135: error_string="price changed";                                             break;
      case 136: error_string="off quotes";                                                break;
      case 137: error_string="broker is busy (never returned error)";                     break;
      case 138: error_string="requote";                                                   break;
      case 139: error_string="order is locked";                                           break;
      case 140: error_string="long positions only allowed";                               break;
      case 141: error_string="too many requests";                                         break;
      case 145: error_string="modification denied 

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

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

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

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

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

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

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