ea hedging full.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ea hedging full.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой советник (Expert Advisor) для платформы MetaTrader 4, написанный на языке MQL4. Он реализует стратегию хеджирования, позволяя одновременно удерживать покупательские и продажные позиции на одном символе.
Открытие позиций осуществляется на основе пересечения скользящей средней 7-периодной LWMA и индикатора Parabolic SAR, с возможностью дополнительного фильтра через индикатор CCI. Советник поддерживает многоуровневое хеджирование с настраиваемыми расстояниями в пунктах и объёмами лотов на каждом уровне.
Встроена система управления рисками с расчётом лота на основе процента от свободного маржинального капитала. Также реализован фильтр по времени торгов, ограничение количества сделок в день, цели по прибыли и убыткам для закрытия позиций, а также информационный дисплей на графике с основными показателями счёта.
Настройки программы
| Настройка | Описание |
|---|---|
| __c1 | Разделитель 1 — Разделитель групп настроек |
| __lotsize | Метка размера лота — Метка группы настроек управления размером лота |
| MM | Управление рисками — Переключатель системы управления рисками на основе процента свободного маржинального капитала |
| Risk | Процент риска — Процент свободного маржинального капитала, используемый для расчёта размера лота |
| Lots | Размер лота — Фиксированный размер лота для открытия позиций при отключённом управлении рисками |
| __c2 | Разделитель 2 — Разделитель групп настроек |
| multiplier | Множитель лота — Множитель размера лота для увеличения позиций при хеджировании (0 — фиксированные лоты) |
| profit | Цель по прибыли — Целевая прибыль в денежном эквиваленте для закрытия всех позиций одного направления |
| SingleOrderProfit | Прибыль одиночной позиции — Целевая прибыль в денежном эквиваленте для закрытия одиночной позиции |
| globalprofit | Общая цель по прибыли — Целевая общая прибыль для остановки торговли и закрытия всех позиций |
| pairglobalprofit | Цель по прибыли пары — Целевая совокупная прибыль пары позиций для закрытия всех позиций при наличии более одного ордера |
| maximaloss | Максимальный убыток — Максимальный убыток в денежном эквиваленте для остановки торговли (отрицательное значение) |
| tradesperday | Сделок в день — Максимальное количество сделок в день |
| openonnewcandle | Открытие на новой свече — Переключатель открытия дополнительных позиций только на новых свечах |
| __c3 | Разделитель 3 — Разделитель групп настроек |
| spacePips | Пункты базового уровня — Расстояние в пунктах для первого уровня хеджирования |
| spaceOrders | Ордера базового уровня — Максимальное количество ордеров на первом уровне хеджирования |
| spaceLots | Лот базового уровня — Размер лота для первого уровня хеджирования |
| space1Pips | Пункты уровня 1 — Расстояние в пунктах для второго уровня хеджирования |
| space1Orders | Ордера уровня 1 — Максимальное количество ордеров на втором уровне хеджирования |
| space1Lots | Лот уровня 1 — Размер лота для второго уровня хеджирования |
| space2Pips | Пункты уровня 2 — Расстояние в пунктах для третьего уровня хеджирования |
| space2Orders | Ордера уровня 2 — Максимальное количество ордеров на третьем уровне хеджирования |
| space2Lots | Лот уровня 2 — Размер лота для третьего уровня хеджирования |
| space3Pips | Пункты уровня 3 — Расстояние в пунктах для четвёртого уровня хеджирования |
| space3Orders | Ордера уровня 3 — Максимальное количество ордеров на четвёртом уровне хеджирования |
| space3Lots | Лот уровня 3 — Размер лота для четвёртого уровня хеджирования |
| __c4 | Разделитель 4 — Разделитель групп настроек |
| magicbuy | Магический номер покупок — Магический номер для идентификации покупательских ордеров |
| buycomment | Комментарий покупки — Комментарий для покупательских ордеров |
| magicsell | Магический номер продаж — Магический номер для идентификации продажных ордеров |
| sellcomment | Комментарий продажи — Комментарий для продажных ордеров |
| __c5 | Разделитель 5 — Разделитель групп настроек |
| __timeFilter | Метка временного фильтра — Метка группы настроек временного фильтра |
| Start_Hour | Час начала торгов — Час начала разрешённого торгового интервала (0-24) |
| Start_Minute | Минута начала торгов — Минута начала разрешённого торгового интервала (0-59) |
| Finish_Hour | Час окончания торгов — Час окончания разрешённого торгового интервала (0-24) |
| Finish_Minute | Минута окончания торгов — Минута окончания разрешённого торгового интервала (0-59) |
| __c6 | Разделитель 6 — Разделитель групп настроек |
| __entry1 | Описание входа SMA/Parabolic — Описание метода определения входа на основе SMA/Parabolic |
| smaParabolicEntry | Вход по SMA/Parabolic — Переключатель использования пересечения SMA и Parabolic SAR для определения входа |
| __entry2 | Описание входа CCI — Описание метода определения входа на основе CCI |
| cciperiod | Период CCI — Период индикатора CCI (0 — без фильтра) |
| ccimax | Верхний порог CCI — Верхний порог CCI для сигнала на покупку |
| ccimin | Нижний порог CCI — Нижний порог CCI для сигнала на продажу |
| __c7 | Разделитель 7 — Разделитель групп настроек |
| suspendtrades | Приостановка торгов — Переключатель приостановки открытия новых позиций |
| closeallsellsnow | Закрыть все продажи — Переключатель немедленного закрытия всех продажных позиций |
| closeallbuysnow | Закрыть все покупки — Переключатель немедленного закрытия всех покупательских позиций |
| closeallnow | Закрыть все позиции — Переключатель немедленного закрытия всех позиций |
| __c8 | Разделитель 8 — Разделитель групп настроек |
| Disable the chart in foreground CrapTx setting so the candles do not obscure the text (KeepTextOnTop) | Текст поверх свечей — Переключатель отображения информационного текста поверх свечей на графике |
| DisplayX | Позиция отображения X — Горизонтальная позиция отображения информационного блока на графике в пикселях |
| DisplayY | Позиция отображения Y — Вертикальная позиция отображения информационного блока на графике в пикселях |
| fontSise | Размер шрифта — Размер шрифта информационного текста на графике |
| fontName | Шрифт текста — Шрифт информационного текста на графике |
| colour | Цвет текста — Цвет информационного текста на графике |
Поиск по коду файла
#property description "Join Telegram Channel for daily Unlimited Source Codes @ex4tomq4decompilercom"
#property description "Find Fresh Decompiled Source Codes - "
#property strict
extern string __c1="----------------------------------";
extern string __lotsize = "Money management";
extern bool MM = true;
extern double Risk = 2.0;
extern double Lots = 0.01;
double LotDigits = 2;
extern string __c2="----------------------------------";
extern double multiplier = 1.5;
extern double profit = 0;
extern double SingleOrderProfit = 3.0;
extern double globalprofit = 0;
extern double pairglobalprofit= 1;
extern double maximaloss = 0;
extern int tradesperday = 99;
extern bool openonnewcandle = true;
bool ReverseOrder = false;
extern string __c3="----------------------------------";
extern double spacePips = 14;
extern int spaceOrders = 5;
extern double spaceLots = 0.01;
extern double space1Pips = 50;
extern int space1Orders = 1;
extern double space1Lots = 0.02;
extern double space2Pips = 100;
extern int space2Orders = 1;
extern double space2Lots = 0.03;
extern double space3Pips = 200;
extern int space3Orders = 99;
extern double space3Lots = 0.09;
extern string __c4="----------------------------------";
extern int magicbuy = 1;
extern string buycomment = "buy";
extern int magicsell = 2;
extern string sellcomment = "sell";
extern string __c5="----------------------------------";
extern string __timeFilter="Timer filter (Hour 0-24 Minute 0-59)";
extern int Start_Hour = 00;
extern int Start_Minute = 00;
extern int Finish_Hour = 23;
extern int Finish_Minute = 30;
extern string __c6="----------------------------------";
extern string __entry1="Determine entry based on SMA/parabolic";
extern bool smaParabolicEntry = true;
extern string __entry2="Determine entry based on CCI";
extern int cciperiod = 0;
extern double ccimax = 100;
extern double ccimin = -100;
extern string __c7="----------------------------------";
extern bool suspendtrades = false;
extern bool closeallsellsnow = false;
extern bool closeallbuysnow = false;
extern bool closeallnow = false;
extern string __c8="----------------------------------";
extern bool KeepTextOnTop = true;//Disable the chart in foreground CrapTx setting so the candles do not obscure the text
extern int DisplayX = 50;
extern int DisplayY = 50;
extern int fontSise = 8;
extern string fontName = "Courier New";
extern color colour = Yellow;
double totalprofit;
bool sellallowed=false;
bool buyallowed=false;
bool firebuy=true;
bool firesell=true;
string stoptrading="0";
bool validSetup=true;
string error;
int DisplayCount = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void RemoveAllObjects()
{
for(int i = ObjectsTotal() - 1; i >= 0; i--)
{
if (StringFind(ObjectName(i),"EA-",0) > -1) ObjectDelete(ObjectName(i));
}
}
void Display(string text)
{
string lab_str = "EA-" + IntegerToString(DisplayCount);
double ofset = 0;
ObjectCreate("EA-BG",OBJ_RECTANGLE_LABEL,0,0,0);
ObjectSet("EA-BG", OBJPROP_XDISTANCE, DisplayX-20);
ObjectSet("EA-BG", OBJPROP_YDISTANCE, DisplayY-20);
ObjectSet("EA-BG", OBJPROP_XSIZE,700);
ObjectSet("EA-BG", OBJPROP_YSIZE,500);
ObjectSet("EA-BG", OBJPROP_BGCOLOR,C'50,50,50');
ObjectSet("EA-BG", OBJPROP_BORDER_TYPE,BORDER_SUNKEN);
ObjectSet("EA-BG", OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSet("EA-BG", OBJPROP_STYLE,STYLE_SOLID);
ObjectSet("EA-BG", OBJPROP_COLOR,clrWhite);
ObjectSet("EA-BG", OBJPROP_WIDTH,1);
ObjectSet("EA-BG", OBJPROP_BACK,false);
ObjectCreate(lab_str, OBJ_LABEL, 0, 0, 0);
ObjectSet(lab_str, OBJPROP_CORNER, 0);
ObjectSet(lab_str, OBJPROP_XDISTANCE, DisplayX + ofset);
ObjectSet(lab_str, OBJPROP_YDISTANCE, DisplayY+DisplayCount*(fontSise+9));
ObjectSet(lab_str, OBJPROP_BACK, false);
ObjectSetText(lab_str, text, fontSise, fontName, colour);
}
void SM(string message)
{
DisplayCount++;
Display(message);
}//End void SM()
void DisplayErrors()
{
DisplayCount=0;
colour=Red;
SM("Trading turned OFF");
SM("");
SM("Invalid settings:");
SM(error);
}
void ShowStatus()
{
if(IsOptimization()) return;
DisplayCount=0;
double lotsTrading=0;
int openTrades=0;
double profitLoss=0;
for (int k = OrdersTotal();k >=0 ;k--)
{
if (OrderSelect(k, SELECT_BY_POS))
{
if ( OrderSymbol() == Symbol() )
{
if (OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell)
{
lotsTrading+=OrderLots();
openTrades=openTrades+1;
profitLoss += (OrderProfit() + OrderSwap() + OrderCommission());
}
}
}
}
int wonTrades=0;
int lostTrades=0;
double profitToday=0;
double profitYesterday=0;
double profitTotal=0;
double totalLotsTraded=0;
double maxLotsizeUsed=0;
double profitFactor=-1;
double totalAmountWon=0;
double totalAmountLost=0;
datetime today = TimeCurrent() ;
datetime yesterday = TimeCurrent() - (60 * 60 * 24);
for (int l=OrdersHistoryTotal();l >= 0;l--)
{
if(OrderSelect(l, SELECT_BY_POS,MODE_HISTORY))
{
if ( OrderSymbol() == Symbol() )
{
if ( OrderMagicNumber() == magicbuy || OrderMagicNumber() == magicsell )
{
totalLotsTraded += OrderLots();
maxLotsizeUsed = MathMax(maxLotsizeUsed, OrderLots());
if (OrderProfit() > 0) wonTrades++;
else lostTrades++;
double orderProfit = (OrderProfit() + OrderSwap() + OrderCommission());
if (orderProfit<0) totalAmountLost += orderProfit;
else totalAmountWon += orderProfit;
profitTotal += orderProfit;
if( TimeDay (OrderCloseTime()) == TimeDay(today) &&
TimeMonth (OrderCloseTime()) == TimeMonth(today) &&
TimeYear (OrderCloseTime()) == TimeYear(today) )
{
profitToday += orderProfit;
}
if( TimeDay (OrderCloseTime()) == TimeDay(yesterday) &&
TimeMonth(OrderCloseTime()) == TimeMonth(yesterday) &&
TimeYear (OrderCloseTime()) == TimeYear(yesterday) )
{
profitYesterday += orderProfit;
}
}
}
}
}
if (totalAmountWon!=0 && totalAmountLost!=0)
{
profitFactor=MathAbs(totalAmountWon / totalAmountLost);
}
double totalTradeCount=(wonTrades+lostTrades);
SM("Account balance : " + DoubleToString(AccountBalance(),2) +" " + AccountCurrency());
SM("Account equity : " + DoubleToString(AccountEquity(),2) +" " + AccountCurrency());
SM("Account free margin : " + DoubleToString(AccountFreeMargin(),2) +" " + AccountCurrency());
SM("Account margin : " + DoubleToString(AccountMargin(),2) +" " + AccountCurrency());
SM("");
SM("Open trades : " + (GetBuyOrderCount()+GetSellOrderCount()) + " ( "+DoubleToString(profitLoss,2)+" "+AccountCurrency()+" )" );
SM(" buy trades : " + GetBuyOrderCount());
SM(" sell trades : " + GetSellOrderCount() );
SM(" lots in trades : " + DoubleToString(lotsTrading, 2) + " lots");
SM("");
SM("Total trades today : " + TradesToday()+" / "+tradesperday);
SM("Total trades all time : " + (wonTrades+lostTrades) + ", Won:"+wonTrades+" / Lost:"+lostTrades);
double percentage=0;
if (totalTradeCount >0) percentage=(wonTrades / totalTradeCount) * 100;
SM(" winrate : " + DoubleToString( percentage, 2)+"%");
SM("");
SM("Profit today : " + DoubleToString(profitToday, 2)+ " " + AccountCurrency() );
SM("Profit yesterday : " + DoubleToString(profitYesterday,2 )+ " " + AccountCurrency() );
SM("Profit all time : " + DoubleToString(profitTotal, 2)+ " " + AccountCurrency() );
double payoff=0;
if (totalTradeCount>0 ) payoff=profitTotal/totalTradeCount;
SM("Payoff expectancy/trade : " + DoubleToString(payoff, 2)+ " " + AccountCurrency() );
if (profitFactor>=0)
SM("Profit factor : " + DoubleToString(profitFactor, 2));
else SM("");
SM("");
double averageLots=0;
if (totalTradeCount >0) averageLots = totalLotsTraded / totalTradeCount;
SM("Overall volume traded : " + DoubleToString(totalLotsTraded, 2) +" lots");
SM("Average volume/trade : " + DoubleToString(averageLots, 2) +" lots");
SM("Max volume traded : " + DoubleToString(maxLotsizeUsed, 2) +" lots");
}
double GetLotSize()
{
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double leverage = AccountLeverage();
double lotsize = MarketInfo(Symbol(), MODE_LOTSIZE);
double stoplevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
double MinLots = 0.01;
double MaximalLots = 50.0;
double lots = Lots;
if(MM)
{
lots = NormalizeDouble(AccountFreeMargin() * Risk/100 / 1000.0, LotDigits);
if(lots < minlot) lots = minlot;
if (lots > MaximalLots) lots = MaximalLots;
if (AccountFreeMargin() < Ask * lots * lotsize / leverage)
{
Print("We have no money. Lots = ", lots, " , Free Margin = ", AccountFreeMargin());
Comment("We have no money. Lots = ", lots, " , Free Margin = ", AccountFreeMargin());
}
}
else lots=NormalizeDouble(Lots, Digits);
return(lots);
}
void OnTick()
{
// код доступен только после оплаты
}
if (!validSetup)
{
DisplayErrors();
return;
}
int ticketBuyOrder = GetTicketOfLargestBuyOrder();
int ticketSellOrder = GetTicketOfLargestSellOrder();
bool isNewBar = IsNewBar();
int totalTradesDoneToday = TradesToday();
int index;
ShowStatus();
if (GlobalVariableGet(stoptrading) == 1 && OrdersTotal() == 0 && CheckTradingTime() == true)
{
GlobalVariableSet(stoptrading,0);
}
if (!smaParabolicEntry)
{
if (cciperiod == 0)
{
firesell = true;
firebuy = true;
}
}
if (smaParabolicEntry)
{
if (isNewBar==true)
{
firebuy = false;
firesell = false;
double ima = iMA(NULL, 0, 7, 0, MODE_LWMA, PRICE_WEIGHTED, 0);
double isar = iSAR(NULL, 0, 0.1, 0.8, 0);
if (ReverseOrder)
{
if(isar < ima)
{
firesell = false;
firebuy = true;
}
if( isar > ima)
{
firesell = true;
firebuy = false;
}
} else
Показано первые 50% кода (символов: 18709)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.