OGT Zone Recovery EA
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ogt zone recovery ea v1.5.1@amazing_owner.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
OGT Zone Recovery EA — торговый советник для MetaTrader 4, реализующий стратегию восстановления позиций (zone recovery). Советник отслеживает сигналы RSI на множестве таймфреймов (от M1 до месячного) и открывает начальные рыночные ордера в направлении противоположном текущему тренду. При движении цены в зону убытка активируется механизм восстановления с открытием противоположных стоп-ордеров и увеличением объёма.
В советнике реализованы управление рисками (процент от депозита или фиксированный лот), динамическое определение зон через индикатор ATR, торговый таймер с возможностью использования локального времени, а также визуальная панель с кнопками управления и полями ввода параметров. Поддерживается ограничение максимального количества сделок и максимального убытка.
Советник работает на каждом тике или только при открытии нового бара (настраиваемый параметр). Включена имитация комиссии и проскальзывания для бэктестинга. Все торговые операции выполняются через стандартный API OrderSend с обработкой ошибок и повторными попытками.
Настройки программы
| Настройка | Описание |
|---|---|
| ZONE RECOVERY SETTINGS ** (RecoverySettings) | Настройки Восстановления Зон — Заголовок раздела настроек восстановления зон |
| Recovery Zone Size (points) (RecoveryZoneSize) | Размер Зоны Восстановления — Размер зоны восстановления (в пунктах) |
| Take Profit (points) (TakeProfit) | Тейк-Профит — Тейк-профит начального ордера (в пунктах) |
| Max Trades (0 for unlimited) (MaxTrades) | Максимальное Количество Сделок — Максимальное количество одновременных сделок (0 — без ограничений) |
| Max Loss after Max Trades reached? (SetMaxLoss) | Установить Максимальный Убыток — Включение ограничения убытка по сумме после достижения максимального количества сделок |
| Max Loss after Max Trades (0 for unlimted) in deposit currency. (MaxLoss) | Максимальный Убыток — Максимальный убыток в валюте депозита, после которого все сделки закрываются (0 — без ограничений) |
| Use a Recovery Take Profit (UseRecoveryTakeProfit) | Использовать Тейк-Профит Восстановления — Включение отдельного тейк-профита для ордеров восстановления |
| Recovery Take Profit (points). (RecoveryTakeProfit) | Тейк-Профит Восстановления — Тейк-профит для ордеров восстановления (в пунктах) |
| Price for pending orders (PendingPrice) | Цена Отложенных Ордеров — Цена для открытия отложенных ордеров |
| ATR Dynamic Zone Sizing ** (ATRHeader) | ATR Динамические Зоны — Заголовок раздела настроек динамического определения зон через ATR |
| Use ATR? (UseATR) | Использовать ATR — Включение использования индикатора ATR для динамического определения размеров зон и тейк-профитов |
| ATR Period (ATRPeriod) | Период ATR — Период индикатора ATR для расчёта зон и тейк-профитов |
| Fraction of ATR to use as Recovery Zone (ATRZoneFraction) | Доля ATR для Зоны — Доля ATR, используемая для определения размера зоны восстановления |
| Fraction or ATR to use for TP sizes (ATRTPFraction) | Доля ATR для Тейк-Профита — Доля ATR, используемая для определения размера тейк-профита |
| Fraction of ATR to use for recovery TP. (ATRRecoveryZone) | Доля ATR для Восстановления — Доля ATR, используемая для определения тейк-профита восстановления |
| MONEY MANAGEMENT SETTINGS ** (MoneyManagement) | Управление Деньгами — Заголовок раздела настроек управления денежными средствами |
| Account % Initial Lot Size (set to 0 if not used) (RiskPercent) | Процент Риска — Процент риска от депозита для расчёта размера лота (0 — не используется) |
| Initial Lot Size (if % not used) (InitialLotSize) | Начальный Размер Лота — Начальный размер лота (используется при отключённом управлении риском в процентах) |
| Multiplier for Lots (LotMultiplier) | Множитель Лота — Множитель для увеличения размера лота при каждом последующем ордере восстановления |
| LotAdditions | Добавка к Лоту — Дополнительное значение, добавляемое к объёму при расчёте лота восстановления |
| CUSTOM LOT SIZES ** (CustomLotSizing) | Пользовательские Размеры Лота — Заголовок раздела пользовательских размеров лота |
| CustomLotSize1 | Пользовательский Лот 1 — Первый пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize2 | Пользовательский Лот 2 — Второй пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize3 | Пользовательский Лот 3 — Третий пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize4 | Пользовательский Лот 4 — Четвёртый пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize5 | Пользовательский Лот 5 — Пятый пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize6 | Пользовательский Лот 6 — Шестой пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize7 | Пользовательский Лот 7 — Седьмой пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize8 | Пользовательский Лот 8 — Восьмой пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize9 | Пользовательский Лот 9 — Девятый пользовательский размер лота (если используется кастомное управление объёмом) |
| CustomLotSize10 | Пользовательский Лот 10 — Десятый пользовательский размер лота (если используется кастомное управление объёмом) |
| TIMER SETTINGS ** (TimerSettings) | Настройки Таймера — Заголовок раздела настроек торгового таймера |
| Use a Trade Timer? (UseTimer) | Использовать Таймер — Включение торгового таймера с заданными часами начала и окончания |
| Start Hour (StartHour) | Час Начала — Час начала торгового таймера |
| Start Minute (StartMinute) | Минута Начала — Минута начала торгового таймера |
| End Hour (EndHour) | Час Окончания — Час окончания торгового таймера |
| End Minute (EndMinute) | Минута Окончания — Минута окончания торгового таймера |
| Use local time? (UseLocalTime) | Использовать Локальное Время — Использование локального времени вместо серверного для торгового таймера |
| EA SETTINGS ** (TradeSettings) | Настройки Советника — Заголовок раздела основных настроек советника |
| EA_Mode | Режим Советника — Режим работы советника: ручной (Manual) или на основе RSI на множестве таймфреймов (RSI_MTF) |
| RSI Period (RSIPeriod) | Период RSI — Период индикатора RSI, используемого для определения сигналов |
| Over-bought level (OverboughtLevel) | Уровень Перекупленности — Уровень перекупленности RSI для генерации сигнала на продажу |
| Over-sold level (OversoldLevel) | Уровень Перепроданности — Уровень перепроданности RSI для генерации сигнала на покупку |
| Use M1 Timeframe? (UseM1Timeframe) | Использовать Таймфрейм M1 — Включение 1-минутного таймфрейма для определения сигналов RSI |
| Use M5 Timeframe? (UseM5Timeframe) | Использовать Таймфрейм M5 — Включение 5-минутного таймфрейма для определения сигналов RSI |
| Use M15 Timeframe? (UseM15Timeframe) | Использовать Таймфрейм M15 — Включение 15-минутного таймфрейма для определения сигналов RSI |
| Use M30 Timeframe? (UseM30Timeframe) | Использовать Таймфрейм M30 — Включение 30-минутного таймфрейма для определения сигналов RSI |
| Use H1 Timeframe? (UseH1Timeframe) | Использовать Таймфрейм H1 — Включение часового таймфрейма для определения сигналов RSI |
| Use H4 Timeframe? (UseH4Timeframe) | Использовать Таймфрейм H4 — Включение четырёхчасового таймфрейма для определения сигналов RSI |
| Use Daily Timeframe? (UseDailyTimeframe) | Использовать Таймфрейм D1 — Включение ежедневного таймфрейма для определения сигналов RSI |
| Use Weekly Timeframe? (UseWeeklyTimeframe) | Использовать Таймфрейм W1 — Включение недельного таймфрейма для определения сигналов RSI |
| Use Monthly Timeframe? (UseMonthlyTimeframe) | Использовать Таймфрейм MN1 — Включение месячного таймфрейма для определения сигналов RSI |
| VISUALS ** (Visuals) | Визуальные Настройки — Заголовок раздела визуальных настроек |
| profitLineColor | Цвет Линии Прибыли — Цвет линии тейк-профита на графике |
| Panel X coordinate. (Panel_X) | X-координата Панели — Координата X положения торговой панели на графике |
| Panel Y coordinate. (Panel_Y) | Y-координата Панели — Координата Y положения торговой панели на графике |
| Panel background colour. (Panel_Color) | Цвет Фона Панели — Цвет фона торговой панели на графике |
| Panel lable text color. (Panel_Lable_Color) | Цвет Текста Панели — Цвет текста меток на торговой панели |
| OTHER SETTINGS ** (BacktestingSettings) | Настройки Бэктестинга — Заголовок раздела настроек бэктестинга |
| Magic Number (MagicNumber) | Магический Номер — Магический номер для идентификации ордеров, открытых данным советником |
| Slippage Max (Points). (Slippage) | Проскальзывание — Максимальное допустимое проскальзывание (в пунктах) |
| Trade on New Bar? (TradeOnBarOpen) | Торговля при Открытии Бара — Открытие сделок только при появлении нового бара |
| Back tester speed (speed) | Скорость Тестирования — Скорость бэктестера (количество тиков в секунду при визуальном тестировании) |
| Back tester simulated commission (TestCommission) | Комиссия для Тестирования — Симулированная комиссия для бэктестинга |
Поиск по коду файла
#property description "Coded by: A Sweeney"
#property strict
enum EA_Setting {Manual, RSI_MTF};
enum CLOSE_PENDING_TYPE
{
CLOSE_BUY_LIMIT,
CLOSE_SELL_LIMIT,
CLOSE_BUY_STOP,
CLOSE_SELL_STOP,
CLOSE_ALL_PENDING
};
sinput string RecoverySettings; // ** ZONE RECOVERY SETTINGS **
extern int RecoveryZoneSize = 200; // Recovery Zone Size (points)
extern int TakeProfit = 200; // Take Profit (points)
input int MaxTrades = 0; // Max Trades (0 for unlimited)
input bool SetMaxLoss = false; // Max Loss after Max Trades reached?
input double MaxLoss = 0; // Max Loss after Max Trades (0 for unlimted) in deposit currency.
input bool UseRecoveryTakeProfit = true; // Use a Recovery Take Profit
input int RecoveryTakeProfit = 50; // Recovery Take Profit (points).
extern double PendingPrice = 0; // Price for pending orders
sinput string ATRHeader; // ** ATR Dynamic Zone Sizing **
input bool UseATR = false; // Use ATR?
input int ATRPeriod = 14; // ATR Period
input double ATRZoneFraction = 0.2; // Fraction of ATR to use as Recovery Zone
input double ATRTPFraction = 0.3; // Fraction or ATR to use for TP sizes
input double ATRRecoveryZone = 0.15; // Fraction of ATR to use for recovery TP.
sinput string MoneyManagement; // ** MONEY MANAGEMENT SETTINGS **
input double RiskPercent = 0; // Account % Initial Lot Size (set to 0 if not used)
input double InitialLotSize = 0.1; // Initial Lot Size (if % not used)
input double LotMultiplier = 2; // Multiplier for Lots
input double LotAdditions = 0;
sinput string CustomLotSizing; // ** CUSTOM LOT SIZES **
input double CustomLotSize1 = 0;
input double CustomLotSize2 = 0;
input double CustomLotSize3 = 0;
input double CustomLotSize4 = 0;
input double CustomLotSize5 = 0;
input double CustomLotSize6 = 0;
input double CustomLotSize7 = 0;
input double CustomLotSize8 = 0;
input double CustomLotSize9 = 0;
input double CustomLotSize10 = 0;
sinput string TimerSettings; // ** TIMER SETTINGS **
input bool UseTimer = false; // Use a Trade Timer?
input int StartHour = 0; // Start Hour
input int StartMinute = 0; // Start Minute
input int EndHour = 0; // End Hour
input int EndMinute = 0; // End Minute
input bool UseLocalTime = false; // Use local time?
sinput string TradeSettings; // ** EA SETTINGS **
input EA_Setting EA_Mode= Manual;
input int RSIPeriod = 14; // RSI Period
input double OverboughtLevel = 70; //Over-bought level
input double OversoldLevel = 30; // Over-sold level
input bool UseM1Timeframe = false; // Use M1 Timeframe?
input bool UseM5Timeframe = false; // Use M5 Timeframe?
input bool UseM15Timeframe = true; // Use M15 Timeframe?
input bool UseM30Timeframe = true; // Use M30 Timeframe?
input bool UseH1Timeframe = false; // Use H1 Timeframe?
input bool UseH4Timeframe = false; // Use H4 Timeframe?
input bool UseDailyTimeframe = false; // Use Daily Timeframe?
input bool UseWeeklyTimeframe = false; // Use Weekly Timeframe?
input bool UseMonthlyTimeframe = false; // Use Monthly Timeframe?
sinput string Visuals; // ** VISUALS **
input color profitLineColor = clrLightSeaGreen;
input int Panel_X = 40; // Panel X coordinate.
input int Panel_Y = 40; // Panel Y coordinate.
input color Panel_Color = clrBlack; // Panel background colour.
input color Panel_Lable_Color = clrWhite; // Panel lable text color.
sinput string BacktestingSettings; // ** OTHER SETTINGS **
input int MagicNumber = 141020; // Magic Number
input int Slippage = 100; // Slippage Max (Points).
input bool TradeOnBarOpen = true; // Trade on New Bar?
input int speed = 500; // Back tester speed
input double TestCommission = 7; // Back tester simulated commission
#define EA_NAME "OGT Zone Recovery v1.5.0"
#define SELL_BUTTON "Sell Button"
#define BUY_BUTTON "Buy Button"
#define PENDING_EDIT "Pending Edit"
#define CLOSE_ALL_BUTTON "Close All Button"
#define TP_EDIT "TP Edit"
#define ZONE_EDIT "Zone Edit"
string gTradingPanelObjects[100];
#define PROFIT_LINE "Profit Line"
datetime gLastTime;
int gInitialTicket;
double gBuyOpenPrice;
double gSellOpenPrice;
double gBuyTakeProfit;
double gSellTakeProfit;
double gLotSize;
double gInitialLotSize;
double gInitialProfitTarget;
bool gRecoveryInitiated;
int gBuyStopTicket = 0;
int gSellStopTicket = 0;
int gBuyTicket = 0;
int gSellTicket = 0;
double gCustomLotSizes[10];
double UsePip;
double UseSlippage;
double gCurrentDirection;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
switch(reason)
{
case 0:
{
DeleteTradePanel();
Print("EA De-Initialised, removed by EA");
break;
}
case 1:
{
DeleteTradePanel();
Print("EA De-Initialised, removed by user");
break;
}
case 2:
{
DeleteTradePanel();
Print("EA De-Initialised, EA recompiled");
break;
}
case 3:
{
DeleteTradePanel();
Print("EA De-Initialised, Symbol changed");
break;
}
case 4:
{
DeleteTradePanel();
Print("EA De-Initialised, chart closed by user.");
break;
}
case 5:
{
Print("EA De-Initialised, input parameters changed.");
break;
}
case 6:
{
Print("EA De-Initialised, account changed");
break;
}
case 7:
{
DeleteTradePanel();
Print("EA De-Initialised, A new template has been applied.");
break;
}
case 8:
{
DeleteTradePanel();
Print("EA De-Initialised, EA failed to initialize.");
break;
}
case 9:
{
DeleteTradePanel();
Print("EA De-Initialised, Terminal closed by user.");
break;
}
}
}
void OnTick()
{
// код доступен только после оплаты
}
void TakeTrade(int direction)
{
double tp = 0;
double rz = 0;
if(UseATR == true)
{
double atr = iATR(_Symbol, PERIOD_D1, ATRPeriod, 1);
tp = atr*ATRTPFraction;
rz = atr*ATRZoneFraction;
} else if(UseATR == false)
{
tp = TakeProfit*_Point; // tp as price units
rz = RecoveryZoneSize*_Point; // rz as price
}
if(CustomLotSize1 != 0) gLotSize = CustomLotSize1;
else gLotSize = gInitialLotSize;
double price = 0;
if(direction == 1)
{
gBuyTicket = OpenMarketOrder(Symbol(), OP_BUY, gLotSize, "Initial Buy Order", clrGreen);
if(OrderSelect(gBuyTicket, SELECT_BY_TICKET))
{
gBuyOpenPrice = OrderOpenPrice();
gSellOpenPrice = NormalizeDouble((gBuyOpenPrice - rz), _Digits);
gBuyTakeProfit = NormalizeDouble((gBuyOpenPrice + tp), _Digits);
gSellTakeProfit = NormalizeDouble((gBuyOpenPrice - (tp + rz)), _Digits);
gLotSize = GetTradeVolume(2);
gSellStopTicket = OpenPendingOrder(Symbol(), OP_SELLSTOP, gLotSize, gSellOpenPrice, 0, 0, "Initial Recovery Sell Stop)", 0, clrPink);
gCurrentDirection = direction;
price = gBuyOpenPrice;
}
}
else if(direction == -1)
{
gSellTicket = OpenMarketOrder(Symbol(), OP_SELL, gLotSize, "Initial Sell Order", clrRed);
if(OrderSelect(gSellTicket, SELECT_BY_TICKET))
{
gSellOpenPrice = OrderOpenPrice();
gBuyOpenPrice = NormalizeDouble((gSellOpenPrice + rz), _Digits);
gSellTakeProfit = NormalizeDouble((gSellOpenPrice - tp), _Digits);
gBuyTakeProfit = NormalizeDouble((gSellOpenPrice + (tp + rz)), _Digits);
gLotSize = GetTradeVolume(2);
gBuyStopTicket = OpenPendingOrder(Symbol(), OP_BUYSTOP, gLotSize, gBuyOpenPrice, 0, 0, "Initial Recovery Buy Stop)", 0, clrTurquoise);
gCurrentDirection = direction;
price = gSellOpenPrice;
}
}
CreateProfitLine(direction, price, tp);
}
void PlaceTrade(int pType)
{
double tp = 0;
double rz = 0;
if(UseATR == true)
{
double atr = iATR(_Symbol, PERIOD_D1, ATRPeriod, 1);
tp = atr*ATRTPFraction;
rz = atr*ATRZoneFraction;
} else if(UseATR == false)
{
tp = TakeProfit*_Point; // tp as price
rz = RecoveryZoneSize*_Point; // rz as price
}
if(CustomLotSize1 != 0) gLotSize = CustomLotSize1;
else gLotSize = gInitialLotSize;
if(pType == OP_BUYLIMIT)
{
gBuyStopTicket = OpenPendingOrder(_Symbol, OP_BUYLIMIT, gLotSize, PendingPrice, 0, 0, "Buy Limit Order", 0, 0);
gBuyOpenPrice = PendingPrice;
gSellOpenPrice = NormalizeDouble((gBuyOpenPrice - rz), _Digits);
gCurrentDirection = -1;
} else if(pType == OP_BUYSTOP)
{
gBuyStopTicket = OpenPendingOrder(_Symbol, OP_BUYSTOP, gLotSize, PendingPrice, 0, 0, "Buy Stop Order", 0, 0);
gBuyOpenPrice = PendingPrice;
gSellOpenPrice = NormalizeDouble((gBuyOpenPrice - rz), _Digits);
gCurrentDirection = -1;
} else if(pType == OP_SELLLIMIT)
{
gSellOpenPrice = PendingPrice;
gBuyOpenPrice = NormalizeDouble((gSellOpenPrice + rz), _Digits);
gSellStopTicket = OpenPendingOrder(_Symbol, OP_SELLLIMIT, gLotSize, PendingPrice, 0, 0, "Sell Limit Order", 0, 0);
gCurrentDirection = 1;
} else if(pType == OP_SELLSTOP)
{
gSellOpenPrice = PendingPrice;
gBuyOpenPrice = NormalizeDouble((gSellOpenPrice + rz), _Digits);
gSellStopTicket = OpenPendingOrder(_Symbol, OP_SELLSTOP, gLotSize, PendingPrice, 0, 0, "Sell Stop Order", 0, 0);
gCurrentDirection = 1;
}
CreateProfitLine(gCurrentDirection, PendingPrice, 0);
}
int Is_RSI_OBOS_on_MTF(int shift)
{
int direction = 0;
double rsi = iRSI(_Symbol, PERIOD_M1, RSIPeriod, PRICE_CLOSE, shift);
if((UseM1Timeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_M5, RSIPeriod, PRICE_CLOSE, shift);
if(UseM5Timeframe == false || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_M15, RSIPeriod, PRICE_CLOSE, shift);
if((UseM15Timeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_M30, RSIPeriod, PRICE_CLOSE, shift);
if((UseM30Timeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_H1, RSIPeriod, PRICE_CLOSE, shift);
if((UseH1Timeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_H4, RSIPeriod, PRICE_CLOSE, shift);
if((UseH4Timeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_D1, RSIPeriod, PRICE_CLOSE, shift);
if((UseDailyTimeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_W1, RSIPeriod, PRICE_CLOSE, shift);
if((UseWeeklyTimeframe == false) || (rsi < OversoldLevel))
{
rsi = iRSI(_Symbol, PERIOD_MN1, RSIPeriod, PRICE_CLOSE, shift);
if((UseMonthlyTimeframe == false) || (rsi < OversoldLevel))
{
direction = 1;
return direction;
}
}
}
}
}
}
}
}
}
rsi = iRSI(_Symbol, PERIOD_M1, RSIPeriod, PRICE_CLOSE, shift);
if((UseM1Timeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_M5, RSIPeriod, PRICE_CLOSE, shift);
if(UseM5Timeframe == false || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_M15, RSIPeriod, PRICE_CLOSE, shift);
if((UseM15Timeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_M30, RSIPeriod, PRICE_CLOSE, shift);
if((UseM30Timeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_H1, RSIPeriod, PRICE_CLOSE, shift);
if((UseH1Timeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_H4, RSIPeriod, PRICE_CLOSE, shift);
if((UseH4Timeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_D1, RSIPeriod, PRICE_CLOSE, shift);
if((UseDailyTimeframe == false) || (rsi > OverboughtLevel))
{
rsi = iRSI(_Symbol, PERIOD_W1Показано первые 50% кода (символов: 32601)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.