RSI Averaging EA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «rsi_averaging_ea.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
RSI Averaging EA — торговый советник для MetaTrader 5, который использует индикатор RSI для определения зон перекупленности и перепроданности. При достижении RSI заданных уровней советник открывает первую позицию (BUY или SELL), а затем усредняет убыток, добавляя дополнительные слои с увеличенным лотом при неблагоприятном движении цены.
Советник работает только по новым барам и отслеживает текущий спред — при превышении порога MaxSpread вход в рынок блокируется. Позиции открываются через торговый API CTrade без индивидуальных стоп-лоссов и тейков-профитов; управление закрытием полностью возложено на советника.
Закрытие всех позиций одного типа происходит при достижении RSI обратного уровня, возврате цены к цене первого входа (если включён CloseAtFirstEntry) или при срабатывании жёсткого глобального стоп-лосса. После перезапуска советник восстанавливает количество активных слоёв и цены входа по открытым позициям.
Настройки программы
| Настройка | Описание |
|---|---|
| RSI_Period | Период расчёта индикатора RSI. |
| RSI_Sell_Entry | Уровень RSI, при пересечении вверх которого открывается первая SELL-позиция. |
| RSI_Buy_Entry | Уровень RSI, при пересечении вниз которого открывается первая BUY-позиция. |
| RSI_Sell_Close | Уровень RSI, при достижении которого все SELL-позиции закрываются. |
| RSI_Buy_Close | Уровень RSI, при достижении которого все BUY-позиции закрываются. |
| BaseLot | Размер лота для первого входа в позицию. |
| LotMultiplier | Множитель лота для каждого последующего слоя усреднения (например, 2 означает удвоение лота). |
| AvgStep_Pips | Расстояние в пунктах, на которое цена должна сместиться в неблагоприятном направлении для открытия следующего слоя усреднения. |
| MaxLayers | Максимальное количество слоёв усреднения, включая первый вход. |
| CloseAtFirstEntry | При включении все позиции одного типа закрываются также при возврате цены к уровню первого входа. |
| GlobalStopLoss | Жёсткий стоп-лосс в пунктах (0 — отключён). При достижении убытка заданного размера все позиции закрываются. |
| MagicNumber | Магический номер для идентификации позиций, открытых данным советником. |
| TradeComment | Комментарий, присваиваемый каждой открытой позиции. |
| MaxSpread | Максимально допустимый спред в пунктах. При превышении советник не открывает новые позиции. |
Поиск по коду файла
#property version "2.00"
#property strict
#include <Trade\Trade.mqh>
input group "=== RSI Settings ==="
input int RSI_Period = 19; // RSI Period
input double RSI_Sell_Entry = 70.0; // RSI level to open first SELL
input double RSI_Buy_Entry = 30.0; // RSI level to open first BUY
input double RSI_Sell_Close = 60.0; // RSI level to close all SELLs
input double RSI_Buy_Close = 40.0; // RSI level to close all BUYs
input group "=== Averaging Settings ==="
input double BaseLot = 0.01; // Base lot size (first entry)
input double LotMultiplier = 2.0; // Lot multiplier per layer (e.g. 2 = double)
input double AvgStep_Pips = 10.0; // Pips to add next layer (adverse move)
input int MaxLayers = 5; // Maximum number of averaging layers
input group "=== Exit Settings ==="
input bool CloseAtFirstEntry = true; // Also close when price returns to 1st entry
input double GlobalStopLoss = 500.0; // Hard stop loss in pips (0 = disabled)
input group "=== Trade Settings ==="
input int MagicNumber = 789101; // Magic Number
input string TradeComment = "RSI_AVG";
input int MaxSpread = 60; // Max spread in points
CTrade trade;
int rsiHandle;
double rsiBuffer[];
double firstEntryPrice_Sell = 0;
double firstEntryPrice_Buy = 0;
double lastLayer_Sell_Price = 0;
double lastLayer_Buy_Price = 0;
int sellLayers = 0;
int buyLayers = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(rsiHandle != INVALID_HANDLE) IndicatorRelease(rsiHandle);
}
void OnTick()
{
// код доступен только после оплаты
}
if(!IsNewBar()) return;
if((int)SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) > MaxSpread) return;
if(CopyBuffer(rsiHandle, 0, 0, 3, rsiBuffer) < 3) return;
double rsiNow = rsiBuffer[1]; // last closed bar
double rsiPrev = rsiBuffer[2];
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double pip = 10 * _Point; // 1 pip in price units
SyncLayerCounts();
if(sellLayers == 0 && rsiPrev < RSI_Sell_Entry && rsiNow >= RSI_Sell_Entry)
{
double lot = BaseLot;
if(OpenSell(lot, bid))
{
firstEntryPrice_Sell = bid;
lastLayer_Sell_Price = bid;
sellLayers = 1;
Print("SELL Layer 1 opened @ ", bid, " | Lot: ", lot, " | RSI: ", rsiNow);
}
}
if(sellLayers > 0 && sellLayers < MaxLayers)
{
double nextLayerPrice = lastLayer_Sell_Price + AvgStep_Pips * pip;
if(ask >= nextLayerPrice)
{
double lot = NormalizeLot(BaseLot * MathPow(LotMultiplier, sellLayers));
if(OpenSell(lot, bid))
{
lastLayer_Sell_Price = bid;
sellLayers++;
Print("SELL Layer ", sellLayers, " opened @ ", bid, " | Lot: ", lot, " | RSI: ", rsiNow);
}
}
}
if(sellLayers > 0)
{
bool rsiExit = (rsiNow <= RSI_Sell_Close);
bool priceExit = (CloseAtFirstEntry && ask <= firstEntryPrice_Sell);
bool stopExit = (GlobalStopLoss > 0 && ask >= firstEntryPrice_Sell + GlobalStopLoss * pip);
if(rsiExit || priceExit || stopExit)
{
string reason = rsiExit ? "RSI reached " + DoubleToString(RSI_Sell_Close,0) :
priceExit ? "Price returned to first entry" : "Global Stop Loss hit";
Print("Closing all SELL positions. Reason: ", reason);
CloseAllByType(ORDER_TYPE_SELL);
firstEntryPrice_Sell = 0;
lastLayer_Sell_Price = 0;
sellLayers = 0;
}
}
if(buyLayers == 0 && rsiPrev > RSI_Buy_Entry && rsiNow <= RSIПоказано первые 50% кода (символов: 5860)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.