partclose.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «partclose.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 4, предназначенный для управления открытыми позициями. В обработчике OnTick выполняет корректировку уровней стоп-лосса и тейк-профита активных позиций, а также поэтапное частичное закрытие позиций при достижении заданных уровней прибыли. Советник поддерживает фильтрацию по магическим числам и исключение отдельных торговых символов.
Настройки программы
| Настройка | Описание |
|---|---|
| StopLoss (StopLoss) | Стоп-лосс — Числовой параметр. Значение стоп-лосса для корректировки позиций. |
| TakeProfit 1 (TakeProfit1) | Тейк-профит 1 — Числовой параметр. Первый уровень тейк-профита, при достижении которого выполняется первое частичное закрытие. |
| Part 1 close % (Part1) | Процент закрытия части 1 — Числовой параметр. Процент объёма позиции для первого частичного закрытия. |
| TakeProfit 2 (TakeProfit2) | Тейк-профит 2 — Числовой параметр. Второй уровень тейк-профита, при достижении которого выполняется второе частичное закрытие. |
| Part 2 close % (Part2) | Процент закрытия части 2 — Числовой параметр. Процент объёма позиции для второго частичного закрытия. |
| TakeProfit 3 (TakeProfit3) | Тейк-профит 3 — Числовой параметр. Третий уровень тейк-профита, при достижении которого выполняется полное закрытие позиции и корректировка стоп-лосса. |
| All symbols (AllSymbols) | Все символы — Логический переключатель. При включении советник обрабатывает позиции на всех символах; при выключении — только на текущем символе. |
| Exclude symbols (sample: XAUUSD EURGBP) (Exclude) | Исключить символы — Текстовый параметр. Список символов, исключаемых из обработки, разделённых пробелами. |
| Magic list use (false = all magic) (MagicListUse) | Использовать список магик — Логический переключатель. При включении используется фильтрация позиций по указанному списку магических чисел; при выключении обрабатываются все магические числа. |
| Magic list (sample: 0 12345 3444 777) (Magic) | Список магик — Текстовый параметр. Список магических чисел для фильтрации обрабатываемых ордеров, разделённых пробелами. |
Поиск по коду файла
#property version "1.00"
#property strict
#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>
D StopLoss=90; //StopLoss
D TakeProfit1=20; //TakeProfit 1
D Part1=30; //Part 1 close %
D TakeProfit2=50; //TakeProfit 2
D Part2=30; //Part 2 close %
D TakeProfit3=100; //TakeProfit 3
B AllSymbols=true; //All symbols
S Exclude=""; //Exclude symbols (sample: XAUUSD EURGBP)
B MagicListUse=false; //Magic list use (false = all magic)
S Magic=""; //Magic list (sample: 0 12345 3444 777)
class CMyOrders: public COrders
{
public:
bool CheckMagic(string symbol,bool bMagicListUse,long imagic,long &lMagic[])
{
if(symbol!=m_name && !AllSymbols)
return false;
if(StringFind(Exclude,symbol,0)>=0)
return false;
if(!bMagicListUse)
return true;
for(int i=0; i<ArraySize(lMagic); i++)
{
if(imagic==lMagic[i])
return true;
}
return false;
}
virtual bool SelectByIndex(int i,bool is_position,bool bMagicListUse,long &lMagic[])
{
if(is_position)
{
if(!m_position.SelectByIndex(i))
return false;
if(CheckMagic(m_position.Symbol(),bMagicListUse,m_position.Magic(),lMagic))
return true;
}
else
{
if(!m_order.SelectByIndex(i))
return false;
if(m_order.OrderType()>=6)
return false; //не пропустим ордера с нестандартным типом отложки и рыночные стандартные ордера обрабатываем только
if(CheckMagic(m_order.Symbol(),bMagicListUse,m_order.Magic(),lMagic))
return true;
}
return false;
}
void ControlOrders(double dtake,double dstop,bool bMagicListUse,long &lMagic[])//
{
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(!SelectByIndex(i,true,bMagicListUse,lMagic))
continue;
int etype=m_position.PositionType();
if(etype==OP_BUY || etype==OP_SELL)
{
double dsl=m_position.StopLoss();
double dtp=m_position.TakeProfit();
double dopen=m_position.PriceOpen();
double dtakeprofit=dtp;
double dstoploss=dsl;
if(dstop>0)
{
double dnewsl=dopen-TypeToDirect(etype)*dstop*p;
dsl=dopen-TypeToDirect(etype)*dstop*p;
}
else
if(dstop==0)
dsl=0;
if(dtake>0)
dtp=dopen+TypeToDirect(etype)*dtake*p;
else
if(dtake==0)
dtp=0;
if(CheckPositionModify(true,m_position.Symbol(),etype,dstoploss,dtakeprofit,dsl,dtp))
OrderModify(m_position.Ticket(),-1,dsl,dtp);
}
}
}
bool PartClose(double dpartclose_profit1,double dpartclose_procent1,double dpartclose_profit2,double dpartclose_procent2,bool bMagicListUse,long &lMagic[])
{
ulong iticket=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(!SelectByIndex(i,true,bMagicListUse,lMagic))
continue;
ENUM_POSITION_TYPE etype=(ENUM_POSITION_TYPE)m_position.PositionType();
if(etype==POSITION_TYPE_BUY || etype==POSITION_TYPE_SELL)
{
m_symbol.Name(m_position.Symbol());
m_symbol.Refresh();
double dopen=m_position.PriceOpen();
double dtake=m_position.TakePrПоказано первые 50% кода (символов: 4637)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.