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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.