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

gold_trend_revers.mq5

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

ares_indicator.pineTradingView · 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 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Gold_Trend_Revers — торговый советник для MetaTrader 5, который анализирует ценовые данные с помощью скользящей средней (MA) и индикатора RSI. Советник открывает позиции BUY при условии, что цена находится выше MA, RSI выше заданного уровня перекупленности, а также при наличии заданного количества бычьих свечей с минимальным размером. Для SELL используются зеркальные условия: цена ниже MA, RSI ниже заданного уровня перепроданности и наличие медвежьих свечей.

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

В качестве торгового инструмента советник использует стандартные API MetaTrader 5 для отправки ордеров и управления позициями. Все торговые параметры настраиваются через входные параметры советника.

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

НастройкаОписание
Notice Текстовый параметр для отображения предупреждения о рисках торговли.
SimpleForexTeam__ Текстовый параметр для отображения информации о команде разработчика.
SETUP1 Группа настроек торговых параметров: таймфрейм, скользящая средняя, RSI и условия по свечам.
TradeTimeframe Торговый таймфрейм, на котором советник анализирует данные и открывает позиции.
MAPeriod Период скользящей средней (MA), используемой для определения тренда.
RSIPeriod Период индикатора RSI (Relative Strength Index), используемого для определения условий перекупленности и перепроданности.
RSI_Overbought Уровень перепроданности для продажи. При значении RSI ниже этого уровня выполняется проверка условий для открытия позиции SELL.
RSI_Oversold Уровень перекупленности для покупки. При значении RSI выше этого уровня выполняется проверка условий для открытия позиции BUY.
MinBullishCandles Минимальное количество бычьих свечей подряд, необходимое для открытия позиции BUY.
MinBearishCandles Минимальное количество медвежьих свечей подряд, необходимое для открытия позиции SELL.
MinBullishCandlesize Минимальный размер бычьей свечи в пунктах. Свечи меньшего размера не учитываются при проверке условий.
MinBearishCandlesize Минимальный размер медвежьей свечи в пунктах. Свечи меньшего размера не учитываются при проверке условий.
SETUP2 Группа настроек управления позицией: фиксированный лот, инкремент лота и множители от депозита.
FixedLot Фиксированный размер лота для открытия позиций. Должен быть больше нуля.
LotIncrement Увеличение лота после каждого убыточного результата. При наличии серии убытков лот увеличивается на указанное значение.
DepositLotMultiplier Множитель лота от депозита. Если больше нуля, размер лота рассчитывается как доля от текущего баланса счёта.
DepositIncrementMultiplier Множитель инкремента лота от депозита. Используется при расчёте автомасштабирования уровней ТП/СЛ и траллинг-стопа при наличии серии убытков.
MagicNumber Магический номер для идентификации ордеров и позиций, открытых данным советником.
SETUP3 Группа настроек тейк-профита, стоп-лосса и траллинг-стопа.
ManualTakeProfitPoints Тейк-профит в пунктах (0=отключен). Определяет расстояние тейк-профита от цены открытия в пунктах.
ManualStopLossPoints Стоп-лосс в пунктах (0=отключен). Определяет расстояние стоп-лосса от цены открытия в пунктах.
TrailingStopStepPoints Шаг траллинг-стопа в пунктах (0=отключен). Определяет расстояние трала от цены открытия позиции в пунктах.
ManualTakeProfitCurrency Тейк-профит в долларах США (USD). Если значение больше нуля, используется для расчёта уровня тейк-профита.
ManualStopLossCurrency Стоп-лосс в долларах США (USD). Если значение больше нуля, используется для расчёта уровня стоп-лосса.
TrailingStopStepCurrency Шаг траллинг-стопа в долларах США (USD). Если больше нуля, используется для расчёта шага трала.
AutoScaleTPSLTrail Автомасштабирование тейк-профита, стоп-лосса и траллинг-стопа при наличии серии убытков. При включении уровни ТП/СЛ и шаг трала корректируются в зависимости от текущей серии убытков.
Получить полный код

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

#property version   "5.04"

input string Notice = "Trading are risky! Trade only if you can loss your money";
input string SimpleForexTeam__ = "free tools for forex! Join our channel for more free eas";
input string The_our_telegram = "";
input string VIP_group = "";

input string   SETUP1 = "=== Trading Settings ===";       // ---
input ENUM_TIMEFRAMES TradeTimeframe = PERIOD_H2;         // Торговый таймфрейм
input int      MAPeriod = 50;                             // Период скользящей средней
input int      RSIPeriod = 14;                            // Период RSI
input double   RSI_Overbought = 70.0;                     // Уровень перепроданности для продажи
input double   RSI_Oversold = 30.0;                       // Уровень перекупленности для покупки
input int      MinBullishCandles = 3;                     // Минимальное количество бычьих свечей
input int      MinBearishCandles = 5;                     // Минимальное количество медвежьих свечей
input double   MinBullishCandlesize = 100;                // Минимальный размер бычьей свечи (пункты)
input double   MinBearishCandlesize = 100;                // Минимальный размер медвежьей свечи (пункты)

input string   SETUP2 = "=== Money Management ===";       // ---
input double   FixedLot = 0.10;                           // Фиксированный лот
input double   LotIncrement = 0;                       // Увеличение лота после убытка
input double   DepositLotMultiplier =0;                // Множитель лота от депозита
input double   DepositIncrementMultiplier =0;          // Множитель инкремента от депозита
input int      MagicNumber = 13678;                       // Магический номер

input string   SETUP3 = "=== Take Profit & Stop Loss ==="; // ---
input int      ManualTakeProfitPoints = 0;                // Тейк-профит в пунктах (0=отключен)
input int      ManualStopLossPoints = 0;                  // Стоп-лосс в пунктах (0=отключен)
input double   TrailingStopStepPoints = 0.0;              // Шаг трала в пунктах (0=отключен)

input double   ManualTakeProfitCurrency = 500.0;          // Тейк-профит в USD
input double   ManualStopLossCurrency = 300.0;             // Стоп-лосс в USD
input double   TrailingStopStepCurrency = 200.0;           // Шаг трала в USD

input bool     AutoScaleTPSLTrail = true;                 // Автомасштабирование ТП/СЛ/Трала

int      rsi_handle;                    // Хэндл индикатора RSI
int      ma_handle;                     // Хэндл индикатора MA
double   last_rsi;                      // Последнее значение RSI
double   last_ma;                       // Последнее значение MA
double   last_close;                    // Последнее закрытие
int      loss_streak = 0;               // Серия убыточных сделок
double   last_lot = FixedLot;           // Последний использованный лот
datetime last_trade_time = 0;           // Время последней сделки
MqlTick  last_tick;                     // Последний тик

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

void OnDeinit(const int reason)
{

   if(ma_handle != INVALID_HANDLE) IndicatorRelease(ma_handle);
   if(rsi_handle != INVALID_HANDLE) IndicatorRelease(rsi_handle);

   Print("Советник деинициализирован");
}

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

void CheckForTrade()
{

   if(PositionSelect(_Symbol))
   {
      Print("Позиция уже открыта, пропускаем проверку");
      return;
   }

   double ma_buffer[1], rsi_buffer[1];

   if(CopyBuffer(ma_handle, 0, 1, 1, ma_buffer) < 1 ||
      CopyBuffer(rsi_handle, 0, 1, 1, rsi_buffer) < 1)
   {
      Print("Ошибка получения данных индикаторов");
      return;
   }

   last_ma = ma_buffer[0];
   last_rsi = rsi_buffer[0];
   last_close = iClose(_Symbol, TradeTimeframe, 1);

   if(CheckBuyConditions())
   {
      OpenBuyPosition();
   }

   else if(CheckSellConditions())
   {
      OpenSellPosition();
   }
}

bool CheckBuyConditions()
{

   if(last_close <= last_ma)
   {
      Print("BUY: Цена (", last_close, ") не выше MA (", last_ma, ")");
      return false;
   }

   if(last_rsi <= RSI_Oversold)
   {
      Print("BUY: RSI (", last_rsi, ") не выше ", RSI_Oversold);
      return false;
   }

   if(!CheckBullishCandles())
   {
      Print("BUY: Не выполнено условие по бычьим свечам");
      return false;
   }

   Print("Все условия для BUY выполнены!");
   return true;
}

bool CheckSellConditions()
{

   if(last_close >= last_ma)
   {
      Print("SELL: Цена (", last_close, ") не ниже MA (", last_ma, ")");
      return false;
   }

   if(last_rsi >= RSI_Overbought)
   {
      Print("SELL: RSI (", last_rsi, ") не ниже ", RSI_Overbought);
      return false;
   }

   if(!CheckBearishCandles())
   {
      Print("SELL: Не выполнено условие по медвежьим свечам");
      return false;
   }

   Print("Все условия для SELL выполнены!");
   return true;
}

bool CheckBullishCandles()
{
   int bullish_count = 0;

   for(int i = 1; i <= MinBullishCandles; i++)
   {
      double open = iOpen(_Symbol, TradeTimeframe, i);
      double close = iClose(_Symbol, TradeTimeframe, i);
      double high = iHigh(_Symbol, TradeTimeframe, i);
      double low = iLow(_Symbol, TradeTimeframe, i);

      if(close <= open)
      {
         Print("Свеча ", i, " не бычья: Close=", close, ", Open=", open);
         return false;
      }

      double candle_size = (high - low) / _Point;
      if(candle_size < MinBullishCandlesize)
      {
         Print("Свеча ", i, " слишком маленькая: ", candle_size, " < ", MinBullishCandlesize);
         return false;
      }

      bullish_count++;
   }

   Print("Найдено ", bullish_count, " бычьих свечей подряд");
   return true;
}

bool CheckBearishCandles()
{
   int bearish_count = 0;

   for(int i = 1; i <= MinBearishCandles; i++)
   {
      double open = iOpen(_Symbol, TradeTimeframe, i);
      double close = iClose(_Symbol, TradeTimeframe, i);
      double high = iHigh(_Symbol, TradeTimeframe, i);
      double low = iLow(_Symbol, TradeTimeframe, i);

      if(close >= open)
      {
         Print("Свеча ", i, " не медвежья: Close=", close, ", Open=", open);
         return false;
      }

      double candle_size = (high - low) / _Point;
      if(candle_size < MinBearishCandlesize)
      {
         Print("Свеча ", i, " слишком маленькая: ", candle_size, " < ", MinBearishCandlesize);
         return false;
      }

      bearish_count++;
   }

   Print("Найдено ", bearish_count, " медвежьих свечей подряд");
   return true;
}

void OpenBuyPosition()
{

   double lot = CalculateLot();

   double tp_price = 0, sl_price = 0;
   CalculateTPSL(ORDER_TYPE_BUY, lot, tp_price, sl_price);

   MqlTradeRequest request;
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);

   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = lot;
   request.type = ORDER_TYPE_BUY;
   request.price = last_tick.ask;
   request.sl = sl_price;
   request.tp = tp_price;
   request.deviation = 10;
   request.magic = MagicNumber;
   request.comment = "Gold_Trend_Revers BUY";

   if(MyOrderSend(request, result))
   {
      Print("BUY позиция открыта: Ticket=", result.order, ", Price=", result.price, ", Lot=", lot);

      if(tp_price > 0) Print("TP установлен на: ", tp_price);
      if(sl_price > 0) Print("SL установлен на: ", sl_price);

      last_trade_time = TimeCurrent();
      last_lot = lot;
   }
   else
   {
      Print("Ошибка открытия BUY позиции: ", GetLastError());
   }
}

void OpenSellPosition()
{

   double lot = CalculateLot();

   double tp_price = 0, sl_price = 0;
   CalculateTPSL(ORDER_TYPE_SELL, lot, tp_price, sl_price);

   MqlTradeRequest request;
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);

   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   reque

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

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

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

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

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

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

Стоимость полного кода
1 316,70₽ ≈ $16.09