gold_trend_revers.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «gold_trend_revers.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.