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

ilan_hilo_rsi_dinamic.mq4

Похожие материалы по тегам

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой торговый советник для платформы MetaTrader 4. Советник автоматизирует открытие и управление ордерами, используя анализ ценовых данных и технический индикатор RSI. Поддерживаются как отложенные ордера (BuyLimit, SellLimit, BuyStop, SellStop), так и рыночные ордера с настройкой проскальзывания.

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

Логика открытия позиций основана на оценке текущей динамики цены и значений индикатора RSI. Советник отслеживает существующие ордера на текущем символе по магическому числу, определяет момент для размещения новых ордеров и после их открытия модифицирует их, устанавливая целевые цены.

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

НастройкаОписание
????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.4 (LotExponent) LotExponent — Показатель степени для расчёта размера лота при увеличении количества открытых позиций
?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16 (Lots) Lots — Начальный размер лота для первой позиции
2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0 (lotdecimal) lotdecimal — Количество знаков после запятой в размере лота: 2 — лот с точностью 0.01, 1 — 0.1, 0 — 1.0
???? ?????? (TakeProfit) TakeProfit — Расстояние до цели в пипсах для фиксации прибыли
??????????????? (slip) slip — Допустимое проскальзывание при исполнении ордеров
??????????? ?????????? ???????????? ???????? ??????? (MaxTrades) MaxTrades — Максимальное количество одновременно открытых позиций
????? (MagicNumber) MagicNumber — Магическое число для идентификации ордеров, управляемых советником
DynamicPips DynamicPips — Переключатель для включения или отключения автоматической корректировки пипсов на основе ценового диапазона
????????? ??????? (DefaultPips) DefaultPips — Значение пипсов по умолчанию, используемое при отключённом динамическом режиме
?????? ??????? ????????????? (Bar) Bar — Количество баров для расчёта диапазона цены при определении динамических пипсов
Получить полный код

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

extern double LotExponent = 1.6;  // ????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.43 ...
extern double Lots = 0.01;        // ?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16
extern int lotdecimal = 2;        // 2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0
extern double TakeProfit = 10.0;  // ???? ??????

extern double slip = 3.0;         // ???????????????
extern int MaxTrades = 10;         // ??????????? ?????????? ???????????? ???????? ???????
extern int MagicNumber = 111;     // ?????

bool UseEquityStop = FALSE;       // ???????????? ???? ? ?????????
double TotalEquityRisk = 20.0;    // ???? ? ????????? ?? ????????
bool UseTrailingStop = FALSE;     // ???????????? ???????? ????
bool UseTimeOut = FALSE;          // ???????????? ???????????? ??????? ?? ???????
double MaxTradeOpenHours = 48.0;  // ????? ?????? ????? ??????????? ??????? ??????

extern bool   DynamicPips = true; 
extern int    DefaultPips = 22;   // ????????? ???????
extern int Bar = 36;              // ?????? ??????? ?????????????
int Delitel_1 = 2;
int PipStep;

double Stoploss = 5000.0;         // ??? ??? ????????? ?? ????????
double TrailStart = 100.0;
double TrailStop = 100.0;

double PriceTarget, StartEquity, BuyTarget, SellTarget ;
double AveragePrice, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName = "RSI_Dinamic";
int timeprev = 0, expiration;
int NumOfTrades = 0;
double iLots;
int cnt = 0, total;
double Stopper = 0.0;
bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlaced = FALSE;
double AccountEquityHighAmt, PrevEquity;

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

int deinit() {
   return (0);
}

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

 {
 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)/*/Delitel_1/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;
  }

   if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
   if (UseTimeOut) {
      if (TimeCurrent() >= expiration) {
         CloseThisSymbolAll();
         Print("Closed All due to TimeOut");
      }
   }
   if (timeprev == Time[0]) return (0);
   timeprev = Time[0];
   double CurrentPairProfit = CalculateProfit();
   if (UseEquityStop) {
      if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         NewOrdersPlaced = FALSE;
      }
   }
   total = CountTrades();
   if (total == 0) flag = FALSE;
   for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_BUY) {
            LongTrade = TRUE;
            ShortTrade = FALSE;
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
         if (OrderType() == OP_SELL) {
            LongTrade = FALSE;
            ShortTrade = TRUE;
            break;
         }
      }
   }
   if (total > 0 && total <= MaxTrades) {
      RefreshRates();
      LastBuyPrice = FindLastBuyPrice();
      LastSellPrice = FindLastSellPrice();
      if (LongTrade && LastBuyPrice - Ask >= PipStep * Point) TradeNow = TRUE;
      if (ShortTrade && Bid - LastSellPrice >= PipStep * Point) TradeNow = TRUE;
   }
   if (total < 1) {
      ShortTrade = FALSE;
      LongTrade = FALSE;
      TradeNow = TRUE;
      StartEquity = AccountEquity();
   }
   if (TradeNow) {
      LastBuyPrice = FindLastBuyPrice();
      LastSellPrice = FindLastSellPrice();
      if (ShortTrade) {
         NumOfTrades = total;
         iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
         RefreshRates();
         ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
         if (ticket < 0) {
            Print("Error: ", GetLastError());
            return (0);
         }
         LastSellPrice = FindLastSellPrice();
         TradeNow = FALSE;
         NewOrdersPlaced = TRUE;
      } else {
         if (LongTrade) {
            NumOfTrades = total;
            iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
            ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
            if (ticket < 0) {
               Print("Error: ", GetLastError());
               return (0);
            }
            LastBuyPrice = FindLastBuyPrice();
            TradeNow = FALSE;
            NewOrdersPlaced = TRUE;
         }
      }
   }
   if (TradeNow && total < 1) {
      PrevCl = iHigh(Symbol(), 0, 1);
      CurrCl =  iLow(Symbol(), 0, 2);
      SellLimit = Bid;
      BuyLimit = Ask;
      if (!ShortTrade && !LongTrade) {
         NumOfTrades = total;
         iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
         if (PrevCl > CurrCl) {

            if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > 30.0) {
               ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
               LastBuyPrice = FindLastBuyPrice();
               NewOrdersPlaced = TRUE;
            }
         } else {

            if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < 70.0) {
               ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
               LastSellPrice = FindLastSellPrice();
               NewOrdersPlaced = TRUE;
            }
         }

if (ticket > 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
TradeNow = FALSE;
}
}
total = CountTrades();
AveragePrice = 0;
double Count = 0;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
AveragePrice += OrderOpenPrice() * OrderLots();
Count += OrderLots();
}
}
}
if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY) {
PriceTarget = AveragePrice + TakeProfit * Point;
BuyTarget = PriceTarg

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

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

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

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

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

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

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