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

ilan-1.8

ilan-1.8.mq4
Вы автор или правообладатель?

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

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

О программе

ilan-1.8 — торговый советник для MetaTrader 4, работающий на одном символе графика. Советник использует пользовательский индикатор VininI_HMA на таймфрейме H1 для определения направления и открывает сделки по сигналам индикатора с учётом закрытия предыдущих свечей. Дополнительно применяются фильтры по времени и управление рисками.

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

Управление капиталом может осуществляться либо фиксированным лотом, либо расчётом от баланса с заданным процентом риска. Советник не содержит гарантий прибыли и предназначен для автоматизации торговли на реальном или демонстрационном счёте.

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

НастройкаОписание
?????????? ???? ??????? ????? (LotExponent) Множитель лота — Множитель для увеличения объёма следующей сделки при наращивании позиции.
??????????????? (slip) Проскальзывание — Максимально допустимое проскальзывание в пунктах при открытии и закрытии сделок.
???? ???? ?? ????????, ???? ?????? 0 ??? ?? ???? ?????????? ? ??????????? ?? ???? (risk) Риск — Доля риска от баланса для расчёта лота. Если равно 0, используется фиксированный лот.
??????? ??? ?????????? ????????, ????????????? ??? ????? (Percent_Risk) Процент риска — Делитель для расчёта лота от баланса при управлении капиталом.
0-???? 1 ???, 1-???? 0.1-0.9, 2-???? 0.01-0.09 (lotdecimal) Точность лота — Количество знаков после запятой при нормализации объёма лота.
TakeProfit Тейк-профит — Уровень тейк-профита в пунктах от средней цены открытых позиций.
??? ????? (PipStep) Шаг в пунктах — Минимальное расстояние в пунктах между сделками при наращивании позиции.
?????????? ????? (MaxTrades) Максимум сделок — Максимальное количество одновременно открытых сделок по символу.
PerHMA Период HMA — Период пользовательского индикатора VininI_HMA, используемого для определения направления.
?????????? ????? ??? ????????? ????? ?????? ?? ?????? ???? (g_magic_176) Магический номер — Магический номер для идентификации сделок советника.
a Строковый параметр — Строковый параметр, используемый в комментарии к сделкам.
???????????? ??????????? ?? ??????? ? ??????? true, ?? ???????????? false (CloseFriday) Закрытие в пятницу — Включает или отключает закрытие всех позиций в пятницу. При значении true позиции закрываются, при false — нет.
????? ? ??????? ????? ???????? ?? ???????????? ?????? ????? (CloseFridayHour) Час закрытия в пятницу — Час, после которого в пятницу выполняется закрытие позиций, если включено закрытие в пятницу.
Получить полный код

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

int    PauseMin=10;              // ????? ????? ?????? ???????
extern double LotExponent = 1.59;       // ?????????? ???? ??????? ?????
extern double slip = 3.0;               // ???????????????

extern double risk = 0.3;               // ???? ???? ?? ????????, ???? ?????? 0 ??? ?? ???? ?????????? ? ??????????? ?? ????
extern double Percent_Risk = 100;       // ??????? ??? ?????????? ????????, ????????????? ??? ????? 

double Lot = 0.01;               // ???
extern int lotdecimal = 2;              // 0-???? 1 ???, 1-???? 0.1-0.9, 2-???? 0.01-0.09
extern double TakeProfit = 10.0;        
double Stoploss = 500.0;
double TrailStart = 10.0;
double TrailStop = 10.0;
extern double PipStep = 12.0;            // ??? ?????
extern int MaxTrades = 10;              // ?????????? ?????
extern int PerHMA = 14;
bool UseEquityStop = FALSE;      // ???????????? ??????????? ????? ?? ????????
double TotalEquityRisk = 20.0;   // ??????? ????????? ?? ???????? ??? ?????
bool UseTrailingStop = FALSE;    // ????????????? ???????? ?????
bool UseTimeOut = FALSE;         // ??????????? ??? ??????? ? ?????
double MaxTradeOpenHours = 48.0; // ????? ? ????? ????? ???? ?????? ??????? ???? ? ????? ?? ??????? ???????????
extern int g_magic_176 = 123;           // ?????????? ????? ??? ????????? ????? ?????? ?? ?????? ????

extern string a = "?????? ????????? ? ??????? ??";
extern bool CloseFriday=true;            // ???????????? ??????????? ?? ??????? ? ??????? true, ?? ???????????? false
extern int CloseFridayHour=19;           // ????? ? ??????? ????? ???????? ?? ???????????? ?????? ?????

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 = "f***9*@mail.ru";
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);
}

bool TradeTime(){
static int OrdHisCount;int time;double profit;
if(OrdHisCount==OrdersHistoryTotal())return(false);
for(int i=OrdersHistoryTotal()+1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderCloseTime()>time){
        time=OrderCloseTime();
        profit=OrderProfit();
      }
    }
  }
}
if(profit>0){if(TimeCurrent()-time>=PauseMin*60){OrdHisCount=OrdersHistoryTotal();return(true);}else{return(false);}}
return(false);
}
int indHMA1open_val;
int start() {
      // код доступен только после оплаты
   }
   if(!TradeTime()){if (gi_280 == Time[0]) return (0);}
   gi_280 = Time[0];

   double indHMA1open_Yellow = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 0, 1);
	double indHMA1open_Green = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 1, 1);
	double indHMA1open_Red = iCustom(Symbol(), 60, "VininI_HMA", PerHMA, 3, 0, 0, 2, 1);
	if (indHMA1open_Green != EMPTY_VALUE)    indHMA1open_val = 1;
	else    if (indHMA1open_Red != EMPTY_VALUE)    indHMA1open_val = -1;
			  else    if (indHMA1open_Yellow != EMPTY_VALUE)    indHMA1open_val = 0; 

   double l_iclose_8;
   double l_iclose_14;
   if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, g_price_212);
   if (UseTimeOut) {
      if (TimeCurrent() >= gi_284) {
         CloseThisSymbolAll();
         Print("Closed All due to TimeOut");
      }
   }

   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 && indHMA1open_val>0) gi_316 = TRUE;
      if (gi_324 && Bid - gd_244 >= PipStep * Point && indHMA1open_val<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, HotPink);
         if (gi_328 < 0) {
            Print("Error: ", GetLastError());
            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, Lime);
            if (gi_328 < 0) {
               Print("Error: ", GetLastError());
               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_14 = 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(CloseFriday==true&&DayOfWeek()==5&&TimeCurrent()>=StrToTime(CloseFridayHour+":00"))return(0);

       if (l_iclose_8 > l_iclose_14 && indHMA1open_val < 0) 
         {
          if (iHigh(Symbol(), PERIOD_H1, 1)>Bid)
           {
           gi_328 = OpenPendingOrder(1, gd_292, g_bid_220, slip, g_bid_220, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, HotPink);
            if (gi_328 < 0) {
               Print("Error: ", GetLastError());
               return (0);
            }
            gd_236 = FindLastBuyPrice();
            gi_332 = TRUE;
            } 
            }
            if (iLow(Symbol(), PERIOD_H1, 1)<Ask)
            {
            if (l_iclose_8 < l_iclose_14 && indHMA1open_val > 0) 
            {
            gi_328 = OpenPendingOrder(0, gd_292, g_ask_228, slip, g_ask_228, 0, 0, gs_ilan_272 + "-" + gi_288, g_magic_176, 0, Lime);
            if (gi_328 < 0) {
               Print("Error: ", GetLastError());
               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(), NormalizeDouble(g_price

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

Что вы получите после оплаты

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

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

Стоимость полного кода
1 400₽