hedging pro_ultimate.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «hedging pro_ultimate.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Товар представляет собой торговый советник для MetaTrader 4, предназначенный для работы на ECN-счетах с инструментами золота (XAUUSD, XAUEUR). Советник реализует хеджинг, одновременно открывая противоположные позиции на двух валютных парах.
Поддерживаются фиксированный и динамический лот (рассчитываемый на основе баланса счета). Имеются настройки фиксации прибыли, стоп-лосса, а также механизм доливки позиций при просадке. Торговля может ограничиваться временными интервалами и часами.
Советник отслеживает позиции по магическим числам и отображает текущий профит, общую лотность и просадку в процентах на графике. Доступна инфопанель с кнопками для ручного управления сделками.
Настройки программы
| Настройка | Описание |
|---|---|
| фиксированный лот (fixlot) | фиксированный лот — Фиксированный лот для открытия позиций |
| динамический лот (dynlot) | динамический лот — Включение динамического расчёта лота |
| объём (dynlotvalue) | объём — Базовое значение объёма для динамического лота |
| объём в деньгах (dynlotstepmoney) | объём в деньгах — Шаг расчёта динамического лота в деньгах |
| первая пара 1 (activ1) | первая пара 1 — Название первой торговой пары (по умолчанию XAUUSD) |
| вторая пара 2 (activ2) | вторая пара 2 — Название второй торговой пары (по умолчанию XAUEUR) |
| magic 1 (magic1) | Magic 1 — Магическое число для первой группы позиций |
| magic 2 (magic2) | Magic 2 — Магическое число для второй группы позиций |
| прибыль в деньгах (startprofitmoney) | прибыль в деньгах — Целевая прибыль в деньгах для закрытия стартовой пары |
| прибыль в процентах от депозита (startprofitpercent) | прибыль в процентах от депозита — Целевая прибыль в процентах от депозита для закрытия стартовой пары |
| безубыток (0) или в деньгах (1) (bezubitok) | безубыток (0) или в деньгах (1) — Порог безубытка: 0 — выключен, 1 — в деньгах |
| в проценте от депозита % (procentotdepo) | в проценте от депозита % — Процент от депозита для закрытия остаточной пары |
| сколько раз торговать (countkrug) | сколько раз торговать — Максимальное количество торговых циклов |
| Час старта торговли (starthour) | Час старта торговли — Час старта торгового интервала |
| Минута старта торговли (startminute) | Минута старта торговли — Минута старта торгового интервала |
| Час окончания торговли (endhour) | Час окончания торговли — Час окончания торгового интервала |
| Минута окончания торговли (endminute) | Минута окончания торговли — Минута окончания торгового интервала |
Поиск по коду файла
#property strict
#property description "================"
#property description "Advisor for ECN accounts"
#property description "Gold (XAUUSD,XAUEUR)"
#property description "================"
#define LICENSE_PANEL
const string VERSION="1.30";
const int ADMIN_ID=36;
const int PRODUCT_ID=72;//Торговый робот Hedging Pro Ultimate MT5
#include <TradeFunctions.mqh>
#include <EA_Protect/Protect.mqh>
SHOW_LICENSE_PARAMS
PROTECT_CREATE
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0);
EventKillTimer();
PROTECT_DEINIT
}
void OnTimer()
{
PROTECT_TIMER
f_mouseclick();
}
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) {PROTECT_EVENT}
input group "========= Основные настройки ========="
enum danet
{
da,//yes
net//no
};
danet manualtrade=net;//открытие сделок вручную
input double fixlot=0.01;//фиксированный лот
input danet dynlot=net;//динамический лот
input double dynlotvalue=0.01;//объём
input double dynlotstepmoney=100;//объём в деньгах
input string activ1="XAUUSD";//первая пара 1
input string activ2="XAUEUR";//вторая пара 2
input int magic1=111;//magic 1
input int magic2=222;//magic 2
double koefforactiv2=1.0;//коэффициент лота для второго актива
input group "========= Прибыль на стартовой паре ========="
input double startprofitmoney=1;//прибыль в деньгах
input double startprofitpercent=1;//прибыль в процентах от депозита
danet tralprofita=net;//трал профита
double starttralaprofita=10;//старт трала профита
double shagtralaprofita=5;//шаг трала профита
danet starttrala=net;//сделать алерт на старт трала
danet shagtrala=net;//сделать алерт на каждый шаг трала
input group "========= Закрытие остаточной пары ========="
input double bezubitok=1;//безубыток (0) или в деньгах (1)
input double procentotdepo=1;//в проценте от депозита %
danet dolivka=net;//догон, доливка
danet lossdolivka=net;//доливка только по убыточной сделке
double ddinmoney=100;//просадка в деньгах
double ddinpercent=20;//просадка в процентах
double koefmartin=1;//коэфф добавки лота актив 1
double koefmartin2=1;//коэфф добавки лота актив 2
danet stoploss=net;//стоплосс
double stoplossmoney=300;//стоплосс в деньгах
double stoplosspercent=25;//стоплосс в процентах
input group "========= Настройки времени торговли ========="
input int countkrug=2;//сколько раз торговать
danet timeinterval=da;//Торговля в заданном временном интервале
input int starthour=08;//Час старта торговли
input int startminute=30;//Минута старта торговли
input int endhour=22;//Час окончания торговли
input int endminute=50;//Минута окончания торговли
danet closeallatendtime=net;//закрывать все позы по времени окончания
danet vikluchitsovetnik=net;//выключать советник по времени окончания
danet krugipovremeny=net;//круги по времени
int hourkrug1=12;//Час круга
int minkrug1=0;//Минута круга
bool krug1,krug2,krug3;
int hourkrug2=16;//Час круга
int minkrug2=0;//Минута круга
int hourkrug3=19;//Час круга
int minkrug3=30;//Минута круга
danet ShowPanel=net;//показать панель
color TextColor=clrWhite;//цвет текста
int FontSize=9;//размер текста
color PanelColor=clrDarkGreen;//фон панели
danet marketclose=da;//Запретить торговлю при закрытом рынке
int marketclosehour=22;//Час закрытия рынка
int marketcloseminute=50;//Минута закрытия рынка
int marketcloseendhour=1;//Час открытия рынка
int marketcloseendminute=10;//Минута открытия рынка
int Slippage=123;
string Komment="Hedging Pro Ultimate";
double tralmag1,tralmag2;
double dolivka1,dolivka2;
int cdolivka1,cdolivka2;
double dolivka1perc,dolivka2perc;
int cdolivka1perc,cdolivka2perc;
double firstlot;
int kolkrug;
datetime daykrug;
datetime tektime;
void OnTick()
{
// код доступен только после оплаты
}
if(!PROTECT_STATUS) return;
if(SymbolInfoDouble(activ1,SYMBOL_ASK)==0||
SymbolInfoDouble(activ1,SYMBOL_BID)==0||
SymbolInfoDouble(activ2,SYMBOL_ASK)==0||
SymbolInfoDouble(activ2,SYMBOL_BID)==0)
return;
if(TimeCurrent()>tektime+3&&ShowPanel==da)
{
DrawTextLabel("profm1",0,5,204,"текущий профит по магику "+IntegerToString(magic1)+" : "+DoubleToString(f_profit(magic1),2),FontSize,TextColor);
DrawTextLabel("profm2",0,5,234,"текущий профит по магику "+IntegerToString(magic2)+" : "+DoubleToString(f_profit(magic2),2),FontSize,TextColor);
DrawTextLabel("lott",0,5,264,"общая лотность позиций : "+DoubleToString(f_lot(),2),FontSize,TextColor);
DrawTextLabel("alldd",0,5,294,"просадка в процентах : "+DoubleToString(
(100.0*(f_allprofit()/AccountInfoDouble(ACCOUNT_BALANCE))<0?MathAbs(100.0*(f_allprofit()/AccountInfoDouble(ACCOUNT_BALANCE))):0)
,2)+"%",FontSize,TextColor);
}
f_mouseclick();
if(daykrug!=iTime(_Symbol,PERIOD_D1,0))
{
daykrug=iTime(_Symbol,PERIOD_D1,0);
kolkrug=0;
krug1=false;
krug2=false;
krug3=false;
}
if(marketclose==da)
{
datetime tstart=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
+IntegerToString(DayMQL4())+" "+IntegerToString(marketclosehour)+":"+IntegerToString(marketcloseminute)+":00");
datetime tend=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
+IntegerToString(DayMQL4())+" "+IntegerToString(marketcloseendhour)+":"+IntegerToString(marketcloseendminute)+":00");
if(tstart<tend)
if(TimeCurrent()>tstart&&TimeCurrent()<tend)
return;
if(tstart>tend)
if(TimeCurrent()>tstart||TimeCurrent()<tend)
return;
}
if(f_count_of_magic(magic1)==0&&f_count_of_magic(magic2)>0)
{
if(f_profit(magic2)>=bezubitok)
f_close(magic2);
if(procentotdepo)
if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))>=procentotdepo)
f_close(magic2);
if(stoploss==da)
{
if(MathAbs(stoplossmoney)>0)
if(f_profit(magic2)<=(-1)*MathAbs(stoplossmoney))
f_close(magic2);
if(MathAbs(stoplosspercent)>0)
if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))<=(-1)*MathAbs(stoplosspercent))
f_close(magic2);
}
if(dolivka==da)
{
if(MathAbs(ddinmoney)>0)
{
if(f_profit(magic2)<=(-1)*MathAbs(ddinmoney)&&dolivka2==0)
{
dolivka2=f_profit(magic2);
cdolivka2=1;
double tradelot=firstlot*MathPow(koefmartin,cdolivka2);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
if(OrderSend(activ1,OP_BUY,
MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)) {}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
if(OrderSend(activ2,OP_SELL,
MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)) {}
cdolivka2++;
}
/*if(f_profit(magic2)<=(-1)*MathAbs(ddinmoney)+dolivka2&&dolivka2!=0){
dolivka2=f_profit(magic2);
double tradelot=firstlot*MathPow(koefmartin,cdolivka2);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
if(OrderSend(activ1,OP_BUY,tradelot,
SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)){}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
if(OrderSend(activ2,OP_SELL,tradelot2,
SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)){}
cdolivka2++;
}*/
}
if(MathAbs(ddinpercent)>0)
{
if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))
<=(-1)*MathAbs(ddinpercent)&&dolivka2perc==0)
{
dolivka2perc=100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE));
cdolivka2perc=1;
double tradelot=firstlot*MathPow(koefmartin,cdolivka2perc);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2perc);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
if(OrderSend(activ1,OP_BUY,
MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)) {}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
if(OrderSend(activ2,OP_SELL,
MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)) {}
cdolivka2perc++;
}
/*if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))
<=(-1)*MathAbs(ddinpercent)+dolivka2perc&&dolivka2perc!=0){
dolivka2perc=100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE));
double tradelot=firstlot*MathPow(koefmartin,cdolivka2perc);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2perc);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
if(OrderSend(activ1,OP_BUY,tradelot,
SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)){}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
if(OrderSend(activ2,OP_SELL,tradelot2,
SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)){}
cdolivka2perc++;
}*/
}
}
}
if(f_count_of_magic(magic2)==0&&f_count_of_magic(magic1)>0)
{
if(f_profit(magic1)>=bezubitok)
f_close(magic1);
if(procentotdepo)
if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))>=procentotdepo)
f_close(magic1);
if(stoploss==da)
{
if(MathAbs(stoplossmoney)>0)
if(f_profit(magic1)<=(-1)*MathAbs(stoplossmoney))
f_close(magic1);
if(MathAbs(stoplosspercent)>0)
if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))<=(-1)*MathAbs(stoplosspercent))
f_close(magic1);
}
if(dolivka==da)
{
if(MathAbs(ddinmoney)>0)
{
if(f_profit(magic1)<=(-1)*MathAbs(ddinmoney)&&dolivka1==0)
{
dolivka1=f_profit(magic1);
cdolivka1=1;
double tradelot=firstlot*MathPow(koefmartin,cdolivka1);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
if(OrderSend(activ1,OP_SELL,
MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)) {}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
if(OrderSend(activ2,OP_BUY,
MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)) {}
cdolivka1++;
}
/*if(f_profit(magic1)<=(-1)*MathAbs(ddinmoney)&&dolivka1!=0){
dolivka1=f_profit(magic1);
double tradelot=firstlot*MathPow(koefmartin,cdolivka1);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
if(OrderSend(activ1,OP_SELL,tradelot,
SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)){}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
if(OrderSend(activ2,OP_BUY,tradelot2,
SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)){}
cdolivka1++;
}*/
}
if(MathAbs(ddinpercent)>0)
{
if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))
<=(-1)*MathAbs(ddinpercent)&&dolivka1perc==0)
{
dolivka1perc=100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE));
cdolivka1perc=1;
double tradelot=firstlot*MathPow(koefmartin,cdolivka1perc);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1perc);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
if(OrderSend(activ1,OP_SELL,
MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)) {}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
if(OrderSend(activ2,OP_BUY,
MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)) {}
cdolivka1perc++;
}
/*if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))
<=(-1)*MathAbs(ddinpercent)&&dolivka1perc!=0){
dolivka1perc=100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE));
double tradelot=firstlot*MathPow(koefmartin,cdolivka1perc);
double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1perc);
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
if(OrderSend(activ1,OP_SELL,tradelot,
SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)){}
if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
if(OrderSend(activ2,OP_BUY,tradelot2,
SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)){}
cdolivka1perc++;
}*/
}
}
}
if(tralprofita==net)
{
if(startprofitmoney>0)
{
if(f_profit(magic1)>=startprofitmoney&&f_count_of_magic(magic2)>0)
f_close(magic1);
if(f_profit(magic2)>=startprofitmoney&&f_count_of_magic(magic1)>0)
f_close(magic2);
}
if(startprofitpercent>0)
{
if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))>=startprofitpercent&&f_count_of_magic(magic2)>0)
f_close(magic1);
if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))>=startprofitpercent&&f_count_of_magic(magic1)>0)
f_close(magic2);
}
}
else
{
if(f_profit(magic1)>=starttralaprofita&&tralmag1==0&&f_count_of_magic(magic2)>0)
{
tralmag1=f_profit(magic1);
if(starttrala==da)
Alert("алерт на старт трала профита");
}
if(f_profit(magic1)>=tralmag1+shagtralaprofita&&tralmag1>0&&f_count_of_magic(magic2)>0)
{
tralmag1=f_profit(magic1);
if(shagtrala==da)
Alert("алерт на каждый шаг трала профита");
}
if(f_profit(magic1)<=tralmag1-shagtralaprofita&&tralmag1>0&&f_count_of_magic(magic2)>0)
{
f_close(magic1);
}
if(f_profit(magic2)>=starttralaprofita&&tralmag2==0&&f_count_of_magic(magic1)>0)
{
tralmag2=f_profit(magic2);
if(starttrala==da)
Alert("алерт на старт трала профита");
}
if(f_profit(magic2)>=tralmag2+shagtralaprofita&&tralmag2>0&&f_count_of_magic(magic1)>0)
{
tralmag2=f_profit(magic2);
if(shagtrala==da)
Alert("алерт на каждый шаг трала профита");
}
if(f_profit(magic2)<=tralmag2-shagtralaprofita&&tralmag2>0&&f_count_of_magic(magic1)>0)
{
f_close(magic2);
}
}
if(timeinterval==da)
{
datetime tstart=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"Показано первые 50% кода (символов: 28807)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.