OGT Zone Recovery v1.5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ogt zone recovery ea v1.5.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
OGT Zone Recovery v1.5 — это торговый советник для MetaTrader 4, написанный на языке MQL4. Советник анализирует индикатор RSI на множестве таймфреймов (от M1 до месячного) и открывает сделки при перекупленности или перепроданности, используя мультитаймфрейный подход.
Основная особенность советника — система восстановления зоны. При открытии позиции советник выставляет отложенный ордер в противоположном направлении на уровне восстановления. Если цена достигает этого уровня, советник увеличивает объём позиции и продолжает работу в режиме восстановления.
Советник поддерживает гибкую настройку объёмов (фиксированный лот, процент риска, множитель или пользовательские размеры), таймер торговли по часам, визуальную панель управления с кнопками и полями редактирования, а также параметры бэктестирования с симулированной комиссией.
Для динамического определения размеров зон и тейк-профитов доступен режим использования индикатора ATR. Все настройки сгруппированы по разделам в пользовательском интерфейсе советника.
Настройки программы
| Настройка | Описание |
|---|---|
| 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) | Максимальный убыток — Максимальный допустимый убыток после достижения максимального количества сделок, в валюте депозита |
| 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 — Пользовательский размер лота для 1-й сделки |
| CustomLotSize2 | Пользовательский лот 2 — Пользовательский размер лота для 2-й сделки |
| CustomLotSize3 | Пользовательский лот 3 — Пользовательский размер лота для 3-й сделки |
| CustomLotSize4 | Пользовательский лот 4 — Пользовательский размер лота для 4-й сделки |
| CustomLotSize5 | Пользовательский лот 5 — Пользовательский размер лота для 5-й сделки |
| CustomLotSize6 | Пользовательский лот 6 — Пользовательский размер лота для 6-й сделки |
| CustomLotSize7 | Пользовательский лот 7 — Пользовательский размер лота для 7-й сделки |
| CustomLotSize8 | Пользовательский лот 8 — Пользовательский размер лота для 8-й сделки |
| CustomLotSize9 | Пользовательский лот 9 — Пользовательский размер лота для 9-й сделки |
| CustomLotSize10 | Пользовательский лот 10 — Пользовательский размер лота для 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 | Режим советника — Режим работы советника: ручной или мультитаймфреймный RSI |
| 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"
#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% кода (символов: 32599)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.