part close v1.0.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «part close v1.0.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник использует библиотеку sovetnikovGUI для управления ордерами и рисования графических объектов. Все ключевые параметры — размер закрываемой части, расстояние до уровня, допустимое проскальзывание и магический номер — задаются через пользовательские настройки. В тестере стратегий при отсутствии активных позиций советник отправляет тестовые заявки на покупку и продажу для проверки работоспособности.
Настройки программы
| Настройка | Описание |
|---|---|
| slippage | Проскальзывание — Допустимое отклонение цены при исполнении ордера в пунктах; 0 означает отсутствие ограничения. |
| Magic | Магический номер — Идентификатор ордеров советника; -1 обрабатывает все ордера, 0 — только ручные сделки. |
| Part Lot (%) (PartLot) | Доля закрытия — Процент от текущего объёма лота, который будет закрыт при достижении уровня частичного закрытия. |
| Part Profit (pt) (PartProfit) | Прибыль для частичного закрытия — Расстояние в пунктах от цены открытия, на котором устанавливается уровень частичного закрытия. |
| Alert Use (Alert_PartClose_Use) | Использовать оповещение — Включает или отключает звуковое уведомление при частичном закрытии позиции. |
| Sound File (Alert_Sound_File) | Файл звука — Имя звукового файла, который воспроизводится при частичном закрытии позиции. |
| TakeProfit (pt) (TakeProfit) | Тейк-профит — Расстояние в пунктах от цены открытия для установки тейк-профита, если он отсутствует. |
| Line Width (Line_Width) | Толщина линии — Толщина горизонтальной линии уровня частичного закрытия на графике. |
| Text Size (Text_Size) | Размер текста — Размер шрифта текстовой метки, отображаемой рядом с уровнем частичного закрытия. |
Поиск по коду файла
#property version "1.00"
#property strict
#include <sovetnikovGUI\Orders.mqh>
I slippage=0;
I Magic=-1;
D PartLot=50; //Part Lot (%)
D PartProfit=12; //Part Profit (pt)
B Alert_PartClose_Use=true; //Alert Use
S Alert_Sound_File="news.wav"; //Sound File
D TakeProfit=50; //TakeProfit (pt)
C Line_Color=clrBlue; //Line Color
I Line_Width=0; //Line Width
STYLE Line_Style=STYLE_DASHDOTDOT; //Line Style
C Text_Color=clrBlue; //Text Color
I Text_Size=12; //Text Size
class CMyOrders: public COrders
{
public:
void OrdersControl(CDraw &draw,datetime tmStart)
{
__COPYRIGHT__
for(int i=ArraySize(m_orders)-1; i>=0; i--)
{
if(m_orders[i].OrderCloseTime>0)
continue;
if(m_orders[i].OrderType>=2)
continue; //отложки не трогаем
if(CheckMagic(m_orders[i].OrderMagicNumber,m_orders[i].OrderComment) && CheckSymbol(m_orders[i].OrderSymbol))
{
/*
проверяем если ли у ордера запомненные тр, сл и уровень.
если нету , то проверяем открыт ли ордер после запуска, если открыт то создаем им с настройками по умолчанию
если подошли к уровню частичного закрытия, то если ордер не закрывался - закроем часть
если дошли до сл или тр то закроем ордер
*/
long iticket=m_orders[i].OrderTicket;
double dopen=m_orders[i].OrderOpenPrice;
double dstop=m_orders[i].OrderStopLoss;
double dtake=m_orders[i].OrderTakeProfit;
string spart=StringFormat("%d_part",iticket);
double dpart=virtual_get_var(iticket,"part"); //уровень частичного закрытия
int idir=0;
if(m_orders[i].OrderType==OP_BUY)
idir=1;
if(m_orders[i].OrderType==OP_SELL)
idir=-1;
double dAsk=Ask(m_orders[i].OrderSymbol);
double dBid=Bid(m_orders[i].OrderSymbol);
bool bModify=false;
if(dstop==0)
{
dstop=dopen-idir*PartProfit*p;
bModify=true;
}
if(dtake==0)
{
dtake=dopen+idir*TakeProfit*p;
bModify=true;
}
if(bModify)
{
OrderModify((int)iticket,-1,dstop,dtake,0,clrNONE,false,true);
}
double dsumm=0;
int icount=get_part((int)iticket,dsumm);
if(icount>0)
{
draw.Delete(0,spart); //удалим линию если уже часть ордера закрыли
continue; //удалим и пропустим работу с этим ордером
}
if(dpart==0)
{
if(icount==0 && m_orders[i].OrderOpenTime>=tmStart)
{
dpart=dopen+idir*PartProfit*p;
if(dstop>0)
{
double ddelta=Abs(dopen-dstop);
if(ddelta>0)
{
dpart=dopen+idir*ddelta;
}
}
if(idir==1 && dstop>=dopen && dstop>0)
{
dpart=0;
}
if(idir==-1 && dstop<=dopen && dstop>0)
{
dpart=0;
}
if(dpart==0)
{
draw.Delete(0,spart); //удалим линию если уже часть ордера закрыли
virtual_set_var(iticket,"part",0); //уровень частичного закрытия сохраним новы
}
else
{
draw.DrawHLine(0,spart,0,Time[1],dpart,Line_Width,Line_Style,Line_Color,true,false);
virtual_set_var(iticket,"part",dpart); //уровень частичного закрытия сохраним новы
}
}
}
else
{
double dprice=nd(draw.GetValuePrice1(0,spart),m_orders[i].OrderSymbol);//получим линию
if(dprice==0)
{
dprice=dpart;
virtual_set_var(iticket,"part",dprice); //уровень частичного закрытия сохраним новы
draw.DrawHLine(0,spart,0,Time[1],dprice,Line_Width,Line_Style,Line_Color,true,false);//восстановим линию
}
else
{
if(dpart!=dprice)
{
double ddelta=Abs(dopen-dprice);
if(idir==1 && dprice>dopen)
{
dstop=dopen-idir*ddelta;
virtual_set_var(iticket,"part",dprice); //уровень частичного закрытия сохраним новы
dpart=dprice;
OrderModify((int)iticket,-1,dstop,dtake,0,clrNONE,false,true);
}
if(idir==-1 && dprice<dopen)
{
dstop=dopen-idir*ddelta;
virtual_set_var(iticket,"part",dprice); //уровень частичного закрытия сохраним новы
dpart=dprice;
OrderModify((int)iticket,-1,dstop,dtake,0,clrNONE,false,true);
}
}
else
{
double doldstop=m_orders[i].OrderStopLoss;
double ddelta=Abs(dopen-dprice);
if(idir==1 && dprice>dopen)
{
dstop=dopen-idir*ddelta;
if(doldstop!=dstop)
{
ddelta=Abs(dopen-doldstop);
if(ddelta>0)
Показано первые 50% кода (символов: 6828)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.