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

ilan_rsi_macd.mq4

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

xauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 2 общих теговtm sniper pro.pineTradingView · 2 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 2 общих теговpro +.pineTradingView · 2 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 2 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Программный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник анализирует ценовые данные с использованием технических индикаторов MACD и RSI, а также ценовых данных (Close), и на основе их пересечений и уровней принимает решения о открытии сделок.

Основная логика работы основана на анализе гистограммы и сигнальной линии MACD, а также уровня RSI. При совпадении условий по индикаторам советник открывает ордера на покупку или продажу. Размер лота рассчитывается по формуле с экспонентой, что позволяет наращивать позицию при увеличении количества открытых сделок.

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

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

НастройкаОписание
UrovenNedokup Уровень недокупки RSI — Уровень RSI, выше которого индикатор RSI должен находиться для открытия продажи (сигнал перекупленности). Значение по умолчанию — 30.
UrovenPerekupl Уровень перепокупки RSI — Уровень RSI, ниже которого индикатор RSI должен находиться для открытия покупки (сигнал перепроданности). Значение по умолчанию — 70.
????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.4 (LotExponent) Экспонента лота — Экспонента для расчёта размера лота при открытии дополнительных сделок. Определяет коэффициент нарастания лота: например, при значении 3.37 лот увеличивается в 3.37 раза с каждой новой сделкой. Допустимые значения: 0.1, 0.15, 0.26, 0.4 и т.д.
?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16 (Lots) Базовый лот — Базовый размер лота для торговых операций. Значение задаётся в долях лота, например 0.01, 0.1 или 0.16.
2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0 (lotdecimal) Десятичность лота — Точность отображения размера лота: 2 — лот в долях 0.01, 1 — лот в долях 0.1, 0 — лот целыми единицами (1.0).
???? ?????? (TakeProfit) Тейк-профит — Тейк-профит для ордеров, выраженный в пунктах. Определяет целевой уровень прибыли для фиксации результата.
??? ?????? (PipStep) Шаг пипсов — Шаг в пунктах для открытия дополнительных ордеров при наличии существующих позиций. Определяет расстояние между уровнями усреднения.
????? (MagicNumber) Магическое число — Магическое число, используемое для идентификации ордеров, открытых данным советником. Позволяет отличать его сделки от ордеров других программ и ручных сделок.
??????????????? (slip) Проскальзывание — Допустимое проскальзывание цены при открытии и закрытии ордеров, выраженное в пунктах.
Получить полный код

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

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

extern int UrovenNedokup = 30;
extern int UrovenPerekupl = 70;

extern double LotExponent = 3.37;  // ????????? ????? ? ????? ?? ?????????? ??? ?????? ? ?????????. ?????? ??? 0.1, ?????: 0.15, 0.26, 0.43 ...
extern double Lots = 0.1;         // ?????? ????? ? ????????? 0.01 ??? ???? ???? ????? 0.1 ?? ????????? ??? ? ????? ????? 0.16
extern int lotdecimal = 1;         // 2 - ????????? 0.01, 1 - ???? ???? 0.1, 0 - ?????????? ???? 1.0
extern double TakeProfit = 10.0;  // ???? ??????
extern double PipStep = 30.0;     // ??? ??????
extern int MagicNumber = 54321;    // ?????
extern double slip = 30.0;          // ???????????????
int MaxTrades = 10;                // ??????????? ?????????? ???????????? ???????? ???????

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

double PriceTarget, StartEquity, BuyTarget, SellTarget ;
double AveragePrice, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flag;
string EAName = "Ilan_RSI"; // ? ?????? ?????? ????? ?????? ??????
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 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   double MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   double SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

   double PrevCl;
   double CurrCl;
   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) {  // ??? ????? ???
            if(OrderTakeProfit()==0)NewOrdersPlaced = true;
            LongTrade = TRUE;           // ????? ??? 
            ShortTrade = FALSE;          //????? ???
            break;                       //
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { //???? ???? ??? ?????
         if (OrderType() == OP_SELL) { //??? ????? ????
            if(OrderTakeProfit()==0)NewOrdersPlaced = true;
            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 = iClose(Symbol(), 0, 2); // ????? ???? ???? ????????? ???????? ????
      CurrCl = iClose(Symbol(), 0, 1); // ????? ???? ????????? ???????? ???? 
      SellLimit = Bid;                  // ????????? = ??????? ????????? ???? 
      BuyLimit = Ask;                      //???????? = ??????? ???????? ????
      if (!ShortTrade && !LongTrade) {      // ???? ??? ??????? ???? ? ????? ???????? ????? ?????. (????????????)
         NumOfTrades = total;                // ?????????? ???????? = ??????

         iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);

            if (MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious&& /*MaCurrent<MaPrevious&&*/iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > UrovenNedokup) { //??????  >

               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; // ????? ????? ??????????
            }

            if (MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && /*MaCurrent>MaPrevious&& */iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < UrovenPerekupl) { // ??????  <

               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; // ????????? ???? =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 = PriceTarget; // ????????? ??? ?? ??? ?????? 
               Stopper = AveragePrice - Stoploss * Point; // ?????????? ???? ????
               flag = TRUE; //?????? ?????? 
            }
         }
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { // ?????????? ??? ???? ??????? ???? ??????? 
            if (OrderType() == OP_SELL) { // ???? ???? ? ???? ??????.
               PriceTarget = AveragePrice - TakeProfit * Point;
               SellTarget = PriceTarget;
               Stopper = AveragePrice + Stoploss * Point;
               flag = TRUE;
            }
         }
      

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

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

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

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

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

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

Стоимость полного кода
1 666,10₽ ≈ $20.36