← К каталогу
Исходный код · ID 2826

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 и перейдите к оплате.

Стоимость полного кода
1 870,90₽ ≈ $22.87