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

ilan_tren_ahp_2010.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Программный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник использует индикаторы BearsPower и BullsPower с сглаживанием SMMA для определения направления тренда и расчёта параметра Delta, который влияет на принятие торговых решений.

Советник поддерживает как рыночные ордера (OP_BUY, OP_SELL), так и отложенные ордера (OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP). Расчёт объёма лота основан на параметре LotExponent, обеспечивающем увеличение размера позиции с ростом количества открытых сделок, либо на фиксированном значении Lot либо на проценте риска от баланса.

В продукт интегрированы дополнительные механизмы управления рисками: стоп-лосс, тейк-профит, трейлинг-стоп, таймаут открытых позиций и стоп-аут по эквити. Доступны фильтры по дню недели и часу для ограничения торговли. Динамический расчёт пипсов на основе диапазона цены за заданное количество баров позволяет адаптировать условия открытия и управления позициями к текущей волатильности рынка.

Настройки программы

НастройкаОписание
LotExponent Экспонента лота — Экспонента для расчёта размера лота с увеличением по мере роста количества открытых сделок.
a Комментарий ордера (риск = 0) — Текстовый параметр, используемый в качестве комментария к ордерам при нулевом значении риска.
Lot Базовый лот — Базовый размер лота, используемый при нулевом значении риска.
b Комментарий ордера (риск > 0) — Текстовый параметр, используемый в качестве комментария к ордерам при положительном значении риска.
risk Риск в процентах от баланса — Процент риска от баланса счёта для расчёта размера лота. При значении 0 используется фиксированный лот.
lotdecimal Десятичные знаки лота — Количество десятичных знаков для округления рассчитанного размера лота.
TakeProfit Тейк-профит в пунктах — Расстояние до уровня тейк-профита в пунктах от цены открытия позиции.
MaxTrades Максимальное количество сделок — Максимальное количество одновременно открытых торговых позиций на символе.
PeriodPower Период силы индикаторов — Период расчёта индикаторов BearsPower и BullsPower.
Period_Bulls Период сглаживания быков — Период сглаживания SMMA для усреднённой линии BullsPower.
Period_Bears Период сглаживания медведей — Период сглаживания SMMA для усреднённой линии BearsPower.
d Подсказка по дню недели без торговли — Текстовый параметр, содержащий подсказку к параметру DayOfWeekOFF.
DayOfWeekOFF День недели без торговли — День недели, в который торговля отключена (0 — воскресенье, 1 — понедельник и т. д. до 6 — суббота).
e Подсказка по часу остановки — Текстовый параметр, содержащий подсказку к параметру HourAfterStop.
HourAfterStop Час остановки торговли — Час, после которого торговля отключается в день, указанный параметром DayOfWeekOFF.
DynamicPips Динамические пипсы — Переключатель, определяющий, используется ли динамический расчёт пипсового шага на основе ценового диапазона.
DefaultPips Пипсы по умолчанию — Значение пипсового шага по умолчанию, используемое при отключённом динамическом режиме.
Bar Количество баров для динамических пипсов — Количество баров, используемых для расчёта диапазона цены при динамическом определении пипсового шага.
g_magic_176 Магический номер ордера — Магический номер для идентификации ордеров, управляемых данным советником.
Получить полный код

Поиск по коду файла

extern double LotExponent = 1.65;
int slip = 5;
extern string a = "???? risk=0, ?????????? ???????? Lot";
extern double Lot = 0.05;
extern string b = "???? risk>0, ???????? ??";
extern double risk = 0;
extern int lotdecimal = 2;
extern double TakeProfit = 10.0;
double Stoploss = 500.0;
double TrailStart = 10.0;
double TrailStop = 10.0;

extern int MaxTrades = 10;

extern string ? = "????????? ???????????? ??????";
extern int     PeriodPower    =13;
extern int     Period_Bulls   =11;
extern int     Period_Bears   =10;

extern string d = "DayOfWeekOFF - ???? ?????? ?????? ? ??????????? (0,1,2,3,4,5,6)";
extern int DayOfWeekOFF = 5;
extern string e = "???, ????? ???????? ?? ??????????? ????? ??????? ? ???? DayOfWeekOFF";
extern int HourAfterStop = 24;

extern bool   DynamicPips = true; 
extern int    DefaultPips = 22;
extern int Bar = 36;
int PipStep;

bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
bool UseTrailingStop = FALSE;
bool UseTimeOut = FALSE;
double MaxTradeOpenHours = 48.0;
extern int g_magic_176 = 1997;
double g_price_180;
double gd_188;
double gd_unused_196;
double gd_unused_204;
double g_price_212;
double g_bid_220;
double g_ask_228;
double gd_236;
double gd_244;
double gd_260;
bool gi_268;
string gs_ilan_272 = "Ilan";
int gi_280 = 0;
int gi_284;
int gi_288 = 0;
double gd_292;
int g_pos_300 = 0;
int gi_304;
double gd_308 = 0.0;
bool gi_316 = FALSE;
bool gi_320 = FALSE;
bool gi_324 = FALSE;
int gi_328;
bool gi_332 = FALSE;
double gd_336;
double gd_344;

int init() {
      // код доступен только после оплаты
   }

int deinit() {
   return (0);
}

int start() {
      // код доступен только после оплаты
   }

 double Bears_array[30]; int cx=0; while (cx<31)
 {Bears_array[cx]= iBearsPower(NULL, 0, PeriodPower,PRICE_CLOSE,cx); cx++; }
 ArraySetAsSeries(Bears_array,true);
 double MA_Bears =iMAOnArray(Bears_array,0,Period_Bears,1,MODE_SMMA,0); 

 double Bulls_array[30]; int lx=0; while (lx<31)
 {Bulls_array[lx]= iBullsPower(NULL, 0, PeriodPower,PRICE_CLOSE,lx); lx++; } 
 ArraySetAsSeries(Bulls_array,true);
 double MA_Bulls =iMAOnArray(Bulls_array,0,Period_Bulls,1,MODE_SMMA,0); 

 double Delta = MA_Bears + MA_Bulls;

 {
 if (DynamicPips)  {
     double hival=High[iHighest(NULL,0,MODE_HIGH,Bar,1)];        // ?????????? ?????????? ???? ?? ????????? 36 ????
     double loval=Low[iLowest(NULL,0,MODE_LOW,Bar,1)];           // ?????????? ?????????? ???? ?? ????????? 36 ????//chart used for symbol and time period
     PipStep=NormalizeDouble((hival-loval)/2/*/Point*/,2);        // ?????? PipStep
     if (PipStep<DefaultPips/2) PipStep = DefaultPips/2;
     if (PipStep>DefaultPips*2) PipStep = DefaultPips*2;    // if dynamic pips fail, assign pips extreme value
   } else PipStep = DefaultPips;
  }

   double l_iclose_8;
   double l_iclose_16;
   if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, g_price_212);
   if (UseTimeOut) {
      if (TimeCurrent() >= gi_284) {
         CloseThisSymbolAll();
         Print("Closed All due to TimeOut");
      }
   }
   if (gi_280 == Time[0]) return (0);
   gi_280 = Time[0];
   double ld_0 = CalculateProfit();
   if (UseEquityStop) {
      if (ld_0 < 0.0 && MathAbs(ld_0) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         gi_332 = FALSE;
      }
   }
   gi_304 = CountTrades();
   if (gi_304 == 0) gi_268 = FALSE;
   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
         if (OrderType() == OP_BUY) {
            gi_320 = TRUE;
            gi_324 = FALSE;
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
         if (OrderType() == OP_SELL) {
            gi_320 = FALSE;
            gi_324 = TRUE;
            break;
         }
      }
   }
   if (gi_304 > 0 && gi_304 <= MaxTrades) {
      RefreshRates();
      gd_236 = FindLastBuyPrice();
      gd_244 = FindLastSellPrice();
      if (gi_320 && gd_236 - Ask >= PipStep * Point && Delta>=0) gi_316 = TRUE;
      if (gi_324 && Bid - gd_244 >= PipStep * Point && Delta<=0) gi_316 = TRUE;
   }
   if (gi_304 < 1) {
      gi_324 = FALSE;
      gi_320 = FALSE;
      gi_316 = TRUE;
      gd_188 = AccountEquity();
   }
   if (gi_316) {
      gd_236 = FindLastBuyPrice();
      gd_244 = FindLastSellPrice();
      if (gi_324) {
         gi_288 = gi_304;
         gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
         RefreshRates();
         gi_328 = OpenPendingOrder(1, gd_292, Bid, slip, Ask, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Red);
         if (gi_328 < 0) {
            Print("Error: ", GetLastError());
            again();
            return (0);
         }
         gd_244 = FindLastSellPrice();
         gi_316 = FALSE;
         gi_332 = TRUE;
      } else {
         if (gi_320) {
            gi_288 = gi_304;
            gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
            gi_328 = OpenPendingOrder(0, gd_292, Ask, slip, Bid, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Blue);
            if (gi_328 < 0) {
               Print("Error: ", GetLastError());
               again();
               return (0);
            }
            gd_236 = FindLastBuyPrice();
            gi_316 = FALSE;
            gi_332 = TRUE;
         }
      }
   }
   if (gi_316 && gi_304 < 1) {
      l_iclose_8 = iClose(Symbol(), 0, 2);
      l_iclose_16 = iClose(Symbol(), 0, 1);
      g_bid_220 = Bid;
      g_ask_228 = Ask;
      if (!gi_324 && !gi_320) {
         gi_288 = gi_304;
         gd_292 = NormalizeDouble(GetLots() * MathPow(LotExponent, gi_288), lotdecimal);
         if (l_iclose_8 > l_iclose_16 && Delta<=0) 
          {
            if(DayOfWeekOFF!=DayOfWeek()&&HourAfterStop>Hour())
            {
               gi_328 = OpenPendingOrder(1, gd_292, g_bid_220, slip, g_bid_220, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Red);
               if (gi_328 < 0) 
               {
                  Print("Error: ", GetLastError());
                  again();
                  return (0);
               }
               gd_236 = FindLastBuyPrice();
               gi_332 = TRUE;
            }
          }
         if (l_iclose_8 < l_iclose_16 && Delta>=0)
          {
            if(DayOfWeekOFF!=DayOfWeek()&&HourAfterStop>Hour())
             {     
               gi_328 = OpenPendingOrder(0, gd_292, g_ask_228, slip, g_ask_228, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Blue);
               if (gi_328 < 0) 
               {
                  Print("Error: ", GetLastError());
                  again();
                  return (0);
               }
               gd_244 = FindLastSellPrice();
               gi_332 = TRUE;
             }
          }
         if (gi_328 > 0) gi_284 = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
         gi_316 = FALSE;
      }
   }
   gi_304 = CountTrades();
   g_price_212 = 0;
   double ld_24 = 0;
   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
            g_price_212 += OrderOpenPrice() * OrderLots();
            ld_24 += OrderLots();
         }
      }
   }
   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);
   if (gi_332) {
      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
            if (OrderType() == OP_BUY) {
               g_price_180 = g_price_212 + TakeProfit * Point;
               gd_unused_196 = g_price_180;
               gd_308 = g_price_212 - Stoploss * Point;
               gi_268 = TRUE;
            }
         }
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {
            if (OrderType() == OP_SELL) {
               g_price_180 = g_price_212 - TakeProfit * Point;
               gd_unused_204 = g_price_180;
               gd_308 = g_price_212 + Stoploss * Point;
               gi_268 = TRUE;
            }
         }
      }
   }
   if (gi_332) {
      if (gi_268 == TRUE) {
         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {
            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);
            g

Показано первые 50% кода (символов: 13309)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

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