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