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