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

xBest Rv3.48

xbest_rv3.48.mq4

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

gg_master.mq5MQL5 / MetaTrader 5 · 1 общих теговxbest_rv3 (1).47.mq4MQL4 / MetaTrader 4 · 1 общих теговtrend_catcher.mq4MQL4 / MetaTrader 4 · 1 общих теговcoin_flip.mq4MQL4 / MetaTrader 4 · 1 общих теговbambang aryawan v2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!caio trader.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

xBest Rv3.48 — торговый советник для MetaTrader 4, реализующий стратегию сеточного хеджирования. Советник управляет позициями по двум независимым двигателям (A — покупка, B — продажа), открывает и закрывает ордера на основе торговых сигналов и заданных параметров риска. Поддерживает ручную и автоматическую инициализацию сетки ордеров с управлением лотами по нескольким режимам.

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

Интерфейс включает информационную панель на графике с отображением текущей цены, спреда, прибыли и настроек, а также визуальные элементы для ручного управления сеткой ордеров.

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

НастройкаОписание
Version__ Разделитель версии — Текстовый разделитель в блоке информации о версии советника.
Version1__ Название версии — Текстовая строка с названием и номером версии советника.
Version2__ Разделитель версии — Текстовый разделитель в блоке информации о версии советника.
InpChartDisplay__ Разделитель отображения — Текстовый разделитель секции настроек отображения информации на графике.
Display Info (InpChartDisplay) Отображение информации — Включает или отключает вывод информационной панели на график.
Display background color (InpDisplayInpBackgroundColor) Фон настроек — Включает или отключает отображение цветного фона под панелью информации.
background color (InpBackgroundColor) Цвет фона — Цвет фона информационной панели, отображаемой на графике.
Switches Переключатели — Текстовый разделитель секции основных переключателей советника.
Start MANUAL Order Grid (Only if A / B Enable) (InpManualInitGrid) Ручная инициализация сетки — Включает ручной запуск сетки ордеров через кнопки на графике (доступно при включённых движках A и B).
Open New Orders ? (InpOpenNewOrders) Открывать новые ордера — Разрешает или запрещает открытие новых ордеров автоматически.
Enable Grid ? (OpenNewOrdersGrid) Включить сетку — Разрешает или запрещает работу сетки ордеров.
closes all orders now (InpCloseAllNow) Закрыть все ордера сейчас — При включении немедленно закрывает все открытые ордера по обоим двигателям.
Magic Разделитель магических номеров — Текстовый разделитель секции настроек магических номеров.
Magic_ Описание магических номеров — Текстовое описание поведения при отключённых обоих движках.
Enable Engine A [BUY] (InpEnableEngineA) Включить движок A — Включает или отключает торговый двигатель A (покупка).
Magic Number A (InpMagic) Магический номер A — Магический номер для ордеров, открываемых двигателем A.
Enable Engine B [SELL] (InpEnableEngineB) Включить движок B — Включает или отключает торговый двигатель B (продажа).
Magic Number B (InpMagic2) Магический номер B — Магический номер для ордеров, открываемых двигателем B.
ConfigLOTE__ Настройка лота — Текстовый разделитель секции конфигурации начального лота.
Lot Mode (InpLotMode) Режим лота — Режим расчёта размера лота: фиксированный или процентный.
Fixed Lot (InpFixedLot) Фиксированный лот — Размер лота при фиксированном режиме.
Percent Lot (InpPercentLot) Процент лота — Процент от баланса для расчёта размера лота.
Take Profit in Pips (InpTakeProfit) Тейк-профит в пунктах — Уровень фиксированного тейк-профита в пунктах для установки на ордера.
XBEST_ConfigGrid__ Настройка сетки — Текстовый разделитель секции конфигурации сетки.
Type Grid Lot (TypeGridLot) Тип лота сетки — Способ изменения размера лота при построении сетки: фиксированный, суммирование, мартингейл или шаговой.
Step Size in Pips (InpGridSize) Шаг сетки в пунктах — Размер шага между ордерами в пунктах цены.
Grid Increment Factor (If Martingale) (InpGridFactor) Фактор увеличения сетки — Множитель для увеличения размера лота при мартингейл-режиме.
STEP LOT (If Step Lot) (InpGridStepLot) Шаг лота — Интервал в ордерах, через который увеличивается размер лота в шаговом режиме.
Max Lot (InpMaxLot) Максимальный лот — Ограничение максимального размера лота для всех ордеров.
After Level Change Lot A to B (Necessari all Engine Enable) (InpHedgex) Уровень хеджирования — Количество убыточных ордеров одного направления, после которого включается смена лота между двигателями A и B.
Enable Grid Dual Side (GridAllDirect) Двусторонняя сетка — Включает открытие ордеров в обоих направлениях при формировании сетки.
FInverterSide__ Инвертор сторон — Текстовый разделитель секции инвертора сторон ордеров.
Enable Grid InverterSideOrder (GridInverterSideOrder) Инвертор сторон сетки — Включает инверсию направления ордера через заданный делитель количества ордеров.
Divizor to qtdOrders Inverter (DivizorInverter) Делитель инвертора — Через какое количество ордеров инвертируется направление следующего ордера.
FilterOpenOneCandle__ Фильтр одной свечи — Текстовый разделитель секции фильтра открытия одного ордера на свечу.
Open one order by candle (InpOpenOneCandle) Один ордер на свечу — Разрешает открытие только одного ордера за одну свечу выбранного таймфрейма.
Timeframe OpenOneCandle (InpTimeframeBarOpen) Таймфрейм фильтра свечи — Таймфрейм, на котором проверяется наличие открытой свечи для фильтра одного ордера.
MinimalProfitClose__ Минимальная прибыль — Текстовый разделитель секции настроек минимальной прибыли и защиты сетки.
Enable Minimal Profit Close (InpEnableMinProfit) Включить минимальную прибыль — Включает автоматическое закрытие группы ордеров при достижении минимальной прибыли.
Enable Protect Grid Last save Firsts (ProtectGridLastFist) Защита последней сетки — Включает защиту: при положительной прибыли последнего ордера закрывает группу убыточных ордеров.
Minimal Profit Close /Protect Grid (MinProfit) Минимальная прибыль — Минимальная сумма прибыли для срабатывания закрытия группы ордеров.
Qtd Trades to Minimal Profit Close/ Protect Grid (QtdTradesMinProfit) Количество ордеров для минимальной прибыли — Минимальное количество ордеров в группе для срабатывания условия минимальной прибыли.
Config__ Конфигурация — Текстовый разделитель основной секции конфигурации.
Hedge After Level (InpHedge) Уровень хеджирования — Количество убыточных ордеров, после которого активируется хеджирование противоположным направлением.
Daily Target in Money (InpDailyTarget) Дневной лимит прибыли — Целевая сумма прибыли в день, при достижении которой все ордера закрываются.
MovingAverageConfig__ Настройки скользящей средней — Текстовый разделитель секции настроек индикатора скользящей средней.
Moving Average TimeFrame (InpMaFrame) Таймфрейм скользящей средней — Таймфрейм для расчёта скользящей средней, используемой в сигналах.
If True Sinal Moving Average Filter (InpMAFilterInverter) Инвертор фильтра скользящей средней — Инвертирует сигнал скользящей средней при включении.
Moving Average Period (InpMaPeriod) Период скользящей средней — Период расчёта скользящей средней.
Moving Average Method (InpMaMethod) Метод скользящей средней — Метод расчёта скользящей средней (например, EMA, SMA).
Moving Average Price (InpMaPrice) Цена для скользящей средней — Тип цены, используемой для расчёта скользящей средней.
Moving Average Shift (InpMaShift) Сдвиг скользящей средней — Горизонтальный сдвиг скользящей средней по графику.
HILOConfig__ Настройки HILO — Текстовый разделитель секции настроек индикатора HILO.
Enable Sinal HILO (EnableSinalHILO) Включить сигнал HILO — Включает или отключает использование индикатора HILO для формирования сигналов.
If True Invert Filter (InpHILOFilterInverter) Инвертор фильтра HILO — Инвертирует сигнал индикатора HILO при включении.
HILO TimeFrame (InpHILOFrame) Таймфрейм HILO — Таймфрейм для расчёта индикатора HILO.
HILO Period (InpHILOPeriod) Период HILO — Период расчёта индикатора HILO.
HILO Method (InpHILOMethod) Метод HILO — Метод расчёта индикатора HILO.
HILO Shift (InpHILOShift) Сдвиг HILO — Горизонтальный сдвиг индикатора HILO по графику.
TrailingStop__ Трейлинг-стоп — Текстовый разделитель секции настроек трейлинг-стопа.
Use Trailling Stop?? (InpUseTrailingStop) Использовать трейлинг-стоп — Включает автоматическое перемещение стоп-лосса за ценой при движении в прибыльную сторону.
TraillingStart (InpTrailStart) Начало трейлинга — Расстояние в пунктах от цены входа, при превышении которого начинается трейлинг-стоп.
Size Trailling stop (InpTrailStop) Шаг трейлинг-стопа — Расстояние в пунктах, на которое отступает стоп-лосс при трейлинге.
BreakEven Безубыточность — Текстовый разделитель секции настроек безубыточности.
Use Break Even ? (InpUseBreakEven) Использовать безубыточность — Включает перемещение стоп-лосса в безубыточную точку при достижении прибыли.
Break Even Start (InpBreakEvenStart) Начало безубыточности — Расстояние в пунктах от цены входа, при превышении которого активируется безубыточность.
Break Even Step (InpBreakEvenStep) Шаг безубыточности — Расстояние в пунктах, на которое отступает стоп-лосс при активации безубыточности.
TakeEquitySTOP__ Стоп по средствам — Текстовый разделитель секции аварийного стопа по средствам.
Usar Take EquityStop? (InpUseTakeEquityStop) Использовать стоп по средствам — Включает аварийное закрытие всех ордеров при достижении заданного убытка по средствам.
Closes all orders once Float hits this $ amount (InpProfitCloseandSTOP) Лимит убытка для стопа — Сумма убытка в долларах, при достижении которой происходит закрытие всех ордеров.
FilterSpread__ Фильтр спреда — Текстовый разделитель секции фильтра максимального спреда.
Max Spread in Pips (InpMaxSpread) Максимальный спред — Максимально допустимый спред в пунктах для открытия новых ордеров.
EquityCaution__ Предупреждение по средствам — Текстовый разделитель секции фильтра предупреждения по средствам.
EquityCaution? (InpUseEquityCaution) Фильтр предупреждения — Включает блокировку новых ордеров при достижении заданного процента убытка от средств.
Total % Risk to EquityCaution (InpTotalEquityRiskCaution) Риск предупреждения — Процент убытка от средств, при котором активируется фильтр предупреждения.
Timeframe as EquityCaution (InpTimeframeEquityCaution) Таймфрейм предупреждения — Таймфрейм, на котором рассчитывается уровень средств для фильтра предупреждения.
EquitySTOP__ Стоп по средствам — Текстовый разделитель секции аварийного стопа по средствам.
Usar EquityStop? (InpUseEquityStop) Стоп по средствам — Включает аварийное закрытие всех ордеров при достижении заданного процента убытка от средств.
Total % Risk to EquityStop (InpTotalEquityRisk) Риск стопа — Процент убытка от средств, при котором срабатывает аварийное закрытие всех ордеров.
Send Alert to Celular (InpAlertPushEquityLoss) Уведомление об убытке — Отправляет push-уведомление на мобильное устройство при срабатывании стопа по средствам.
Close all orders in TotalEquityRisk (InpCloseAllEquityLoss) Закрыть все при стопе — Автоматически закрывает все ордера при срабатывании стопа по средствам.
FFCall__ Фильтр новостей — Текстовый разделитель секции фильтра новостного календаря.
mins before an event to stay out of trading (InpMinsBeforeNews) Минут до новости — Количество минут до новостного события, в течение которых советник прекращает торговлю.
mins after an event to stay out of trading (InpMinsAfterNews) Минут после новости — Количество минут после новостного события, в течение которых советник прекращает торговлю.
InpUseFFCall Использовать фильтр новостей — Включает или отключает фильтр новостного календаря.
InpIncludeHigh Включать высокое влияние — Учитывает ли фильтр новостей события с высоким уровнем влияния.
TimeFilter__ Временной фильтр — Текстовый разделитель секции временного фильтра торговли.
InpUtilizeTimeFilter Использовать временной фильтр — Включает или отключает ограничение торговли по времени суток и дням недели.
InpTrade_in_Monday Торговля в понедельник — Разрешает или запрещает торговлю в понедельник.
InpTrade_in_Tuesday Торговля во вторник — Разрешает или запрещает торговлю во вторник.
InpTrade_in_Wednesday Торговля в среду — Разрешает или запрещает торговлю в среду.
InpTrade_in_Thursday Торговля в четверг — Разрешает или запрещает торговлю в четверг.
InpTrade_in_Friday Торговля в пятницу — Разрешает или запрещает торговлю в пятницу.
InpStartHour Время начала — Время начала торгового окна в формате ЧЧ:ММ.
InpEndHour Время окончания — Время окончания торгового окна в формате ЧЧ:ММ.
_Visor1_ Визор 1 — Текстовый разделитель секции визуального отображения на графике.
Visor1_Show_the_Time Показывать время — Включает отображение текущего времени на графике.
Visor1_Show_the_Price Показывать цену — Включает отображение текущей цены Bid на графике.
Visor1_Price_Up_Color Цвет цены вверх — Цвет индикатора текущей цены при движении вверх.
Visor1_Price_Down_Color Цвет цены вниз — Цвет индикатора текущей цены при движении вниз.
Получить полный код

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

#property version "3.48"
#property description "xBest Rv3.48 - Grid Hedging Expert Advisor  "
#property description "This EA init a cycle of buy or sell depending of signaling, it start with the base"
#property description "lot and increase the size at every step by its factor and set a global take profit,"
#property description "if daily target profit is hit then close all orders, also have a time filtering,"
#property description "you can enable hedging after especified quantity of loss orders."
#property description "Coder init: xJhamil, Mail: y**********o*@gmail.com"
#property description "Alter  2018-03-25: Rmorais, Mail: r**************o*@gmail.com"
#property strict

enum ENUM_LOT_MODE
{
  LOT_MODE_FIXED = 1,   // Fixed Lot
  LOT_MODE_PERCENT = 2, // Percent Lot
};

enum ENUM_TYPE_GRID_LOT
{
  fix_lot = 0,    // Fixed Start Lot 0.01 / 0.01 / 0.01 / 0.01 / 0.01 /.............
  Summ_lot = 1,   // Summ Sart Lot   0.01 / 0.02 / 0.03 / 0.04 / 0.05 /.............
  Martingale = 2, // Martingale Lot  0.01 / 0.02 / 0.04 / 0.08 / 0.16 /.............
  Step_lot = 3    // Step Lot        0.01 / 0.01 / 0.01 / 0.02 / 0.02 / 0.02 / 0.03 / 0.03 / 0.03 / 0.04 / 0.04 / 0.04 /............
};

extern string Version__ = "----------------------------------------------------------------";
extern string Version1__ = "-----------------xBest   Rv3.48 --------------------------------";
extern string Version2__ = "----------------------------------------------------------------";

extern string InpChartDisplay__ = "------------------------Display Info--------------------";
extern bool InpChartDisplay = true;              // Display Info
extern bool InpDisplayInpBackgroundColor = TRUE; // Display background color
extern color InpBackgroundColor = Black;          // background color

extern string Switches = "--------------------------- Switches --------------------------- ";
extern bool InpManualInitGrid = FALSE; // Start MANUAL Order  Grid  (Only if A / B Enable)
extern bool InpOpenNewOrders = TRUE;  // Open New Orders ?
extern bool OpenNewOrdersGrid = TRUE; // Enable Grid ?
extern bool InpCloseAllNow = false;   // closes all orders now
extern string Magic = "--------Magic Number Engine---------";
extern string Magic_ = "--------If all the engines are disabled runs a motor in buy and sell ---------";
input bool InpEnableEngineA = TRUE; // Enable Engine A   [BUY]
input int InpMagic = 7799;           // Magic Number  A
input bool InpEnableEngineB = TRUE; // Enable Engine B   [SELL]
input int InpMagic2 = 9977;          // Magic Number  B
extern string ConfigLOTE__ = "---------------------------Config Lot INIT--------------------------------------";
input ENUM_LOT_MODE InpLotMode = LOT_MODE_PERCENT; // Lot Mode
input double InpFixedLot = 0.01;                   // Fixed Lot
input double InpPercentLot = 0.03;                 // Percent Lot
input int InpTakeProfit = 6000;                    // Take Profit in Pips

extern string XBEST_ConfigGrid__ = "---------------------------Config Grid--------------------------------------";
input ENUM_TYPE_GRID_LOT TypeGridLot = Step_lot; // Type Grid Lot
input int InpGridSize = 3;                         // Step Size in Pips
input double InpGridFactor = 1.3;                  // Grid Increment Factor (If Martingale)
input int InpGridStepLot = 4;                      // STEP LOT (If  Step Lot)
input double InpMaxLot = 0.5;                      // Max Lot
input int InpHedgex= 99;                           // After Level Change Lot A to B (Necessari all Engine Enable)
input bool GridAllDirect = true;                  // Enable Grid Dual Side

extern string FInverterSide__ = "-------------------- Inverter Side Order--------------";
extern bool GridInverterSideOrder = true;                  // Enable Grid InverterSideOrder
extern int DivizorInverter = 2 ;                            //Divizor to qtdOrders Inverter

extern string FilterOpenOneCandle__ = "--------------------Filter One Order by Candle--------------";
input bool InpOpenOneCandle = true;                         // Open one order by candle
input ENUM_TIMEFRAMES InpTimeframeBarOpen = PERIOD_M15; // Timeframe OpenOneCandle

extern string MinimalProfitClose__ = "--------------------Minimal Profit Close/ Protect Grid --------------";
input bool InpEnableMinProfit = true;  // Enable  Minimal Profit Close
input bool ProtectGridLastFist = true; // Enable Protect Grid Last save Firsts
input double MinProfit = 0.30;        // Minimal Profit Close /Protect Grid
input int QtdTradesMinProfit = 3;      // Qtd Trades to Minimal Profit Close/ Protect Grid
extern string Config__ = "---------------------------Config--------------------------------------";
input int InpHedge = 0;        // Hedge After Level
input int InpDailyTarget = 50; // Daily Target in Money

extern string MovingAverageConfig__ = "-----------------------------Moving Average-----------------------";
input ENUM_TIMEFRAMES InpMaFrame = PERIOD_M5; // Moving Average TimeFrame
input bool InpMAFilterInverter = true;            // If True Sinal Moving Average Filter
input int InpMaPeriod = 38;                         // Moving Average Period
input ENUM_MA_METHOD InpMaMethod = MODE_EMA;       // Moving Average Method
input ENUM_APPLIED_PRICE InpMaPrice = PRICE_OPEN;  // Moving Average Price
input int InpMaShift = 0;                          // Moving Average Shift

extern string HILOConfig__ = "-----------------------------HILO--------------------";
input bool EnableSinalHILO = true;                   //Enable Sinal  HILO
input bool InpHILOFilterInverter = false;            // If True Invert Filter
input ENUM_TIMEFRAMES InpHILOFrame = PERIOD_M5; // HILO TimeFrame
input int InpHILOPeriod = 3;                         // HILO Period
input ENUM_MA_METHOD InpHILOMethod = MODE_EMA;       // HILO Method
input int InpHILOShift = 0;                          // HILO Shift

double indicator_low;
double indicator_high;
double diff_highlow;
bool isbidgreaterthanima;

extern string TrailingStop__ = "--------------------Trailling Stop--------------";
extern bool InpUseTrailingStop = true; // Use Trailling Stop??
extern int InpTrailStart = 20;          //   TraillingStart
extern int InpTrailStop = 20;           // Size Trailling stop

extern string BreakEven = "--------------------Break Even--------------";
extern bool InpUseBreakEven = true; // Use Break Even ?
extern int InpBreakEvenStart = 15;   //   Break Even Start
extern int InpBreakEvenStep = 3;    //  Break Even Step

extern string TakeEquitySTOP__ = "------------------------Take  Equity STOP ---------------";
extern bool InpUseTakeEquityStop = true;   // Usar Take EquityStop?
extern double InpProfitCloseandSTOP = 50.0; // Closes all orders once Float hits this $ amount

extern string FilterSpread__ = "----------------------------Filter Max Spread--------------------";
input int InpMaxSpread = 24; // Max Spread in Pips

extern string EquityCaution__ = "------------------------Filter Caution of Equity ---------------";
extern bool InpUseEquityCaution = TRUE;                       //  EquityCaution?
extern double InpTotalEquityRiskCaution = 20;                 // Total % Risk to EquityCaution
extern ENUM_TIMEFRAMES InpTimeframeEquityCaution = PERIOD_D1; // Timeframe as EquityCaution

extern string EquitySTOP__ = "------------------------Filter  Equity STOP ---------------";
extern bool InpUseEquityStop = true;        // Usar EquityStop?
extern double InpTotalEquityRisk = 60.0;    // Total % Risk to EquityStop
extern bool InpAlertPushEquityLoss = false; //Send Alert to Celular
extern bool InpCloseAllEquityLoss = false;  // Close all orders in TotalEquityRisk

extern string FFCall__ = "----------------------------Filter News FFCall------------------------";

extern int InpMinsBeforeNews = 60; // mins before an event to stay out of trading
extern int InpMinsAfterNews = 20;  // mins after  an event to stay out of trading
extern bool InpUseFFCall = true;
extern bool InpIncludeHigh = true;

extern string TimeFilter__ = "-------------------------Filter DateTime---------------------------";
extern bool InpUtilizeTimeFilter = true;
extern bool InpTrade_in_Monday = true;
extern bool InpTrade_in_Tuesday = true;
extern bool InpTrade_in_Wednesday = true;
extern bool InpTrade_in_Thursday = true;
extern bool InpTrade_in_Friday = true;

extern string InpStartHour = "00:00";
extern string InpEndHour = "23:59";

extern string _Visor1_ = "-----------------------------Visor 1 --------------------";
extern bool Visor1_Show_the_Time = True;
extern bool Visor1_Show_the_Price = True;

extern color Visor1_Price_Up_Color = LawnGreen;
extern color Visor1_Price_Down_Color = Tomato;
extern int Visor1_Price_X_Position = 10;
extern int Visor1_Price_Y_Position = 10;
extern int Visor1_Price_Size = 20;
double Visor1_Old_Price;

extern int Visor1_Porcent_X_Position = 10;
extern int Visor1_Porcent_Y_Position = 70;
extern int Visor1_Porcent_Size = 20;

extern int Visor1_Symbol_X_Position = 10;
extern int Visor1_Symbol_Y_Position = 40;
extern int Visor1_Symbol_Size = 20;

extern int Visor1_Chart_Timezone = -5;
extern color Visor1_Time_Color = Yellow;
extern int Visor1_Time_Size = 17;
extern int Visor1_Time_X_Position = 10;
extern int Visor1_Time_Y_Position = 10;

extern int Visor1_Spread_Size = 10;
extern int Visor1_Spread_X_Position = 10;
extern int Visor1_Spread_Y_Position = 100;

color Visor1_FontColor = Black;

int Visor1_Sinal = 0;

int SlipPage = 3;
bool GridAll = false;

bool m_hedging1, m_target_filter1;
int m_direction1, m_current_day1, m_previous_day1;
double m_level1, m_buyer1, m_seller1, m_target1, m_profit1;
double m_pip1, m_size1, m_take1;
datetime m_datetime_ultcandleopen1;
datetime m_time_equityrisk1;
double m_mediaprice1, profit1;
int m_orders_count1;
double m_lastlot1;

bool m_hedging2, m_target_filter2;
int m_direction2, m_current_day2, m_previous_day2;
double m_level2, m_buyer2, m_seller2, m_target2, m_profit2;
double m_pip2, m_size2, m_take2;
datetime m_datetime_ultcandleopen2;
datetime m_time_equityrisk2;
double m_mediaprice2;
int m_orders_count2;
double m_lastlot2, profit2;

string m_symbol;
bool m_news_time;
double m_spreadX;
double Spread;
bool m_initpainel;
string m_filters_on;
double m_profit_all;
datetime m_time_equityriskstopall;

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

void OnDeinit(const int reason)
{
  ObjectDelete("Market_Price_Label");
  ObjectDelete("Time_Label");
  ObjectDelete("Porcent_Price_Label");
  ObjectDelete("Spread_Price_Label");
  ObjectDelete("Simbol_Price_Label");

}

void Informacoes()
{

  string Ls_64;

  int Li_84;

  if (!IsOptimization())
  {
    Visor1Handling();
    Ls_64 = "\n\n  ";
    Ls_64 = Ls_64 + "==========================\n";
    Ls_64 = Ls_64 + " " + " xBest FULL Hedge v3.48 2018-03-26 " + "\n";
    Ls_64 = Ls_64 + "==========================\n";

    Ls_64 = Ls_64 + "  Time of Broker:" + TimeToStr(TimeCurrent(), TIME_DATE | TIME_SECONDS) + "\n";

    Ls_64 = Ls_64 + "  Grid Size : " + (string)InpGridSize + " Pips \n";
    Ls_64 = Ls_64 + "  TakeProfit: " + (string)InpTakeProfit + " Pips \n";
    Ls_64 = Ls_64 + "  Lot Mode : " + (string)InpLotMode + "  \n";
    Ls_64 = Ls_64 + "  Exponent Factor: " + (string)InpGridFactor + " pips\n";
    Ls_64 = Ls_64 + "  Daily Target: " + (string)InpDailyTarget + "\n";

    Ls_64 = Ls_64 + "  InpMaxSpread: " + (string)InpMaxSpread + " pips\n";
    Ls_64 = Ls_64 + "==========================\n";

    Ls_64 = Ls_64 + "  Equity:      " + DoubleToStr(AccountEquity(), 2) + " \n";
    Ls_64 = Ls_64 + "  Last Lot : | A : " + DoubleToStr(m_lastlot1, 2) + " | B : " + DoubleToStr(m_lastlot2, 2) + " \n";
    Ls_64 = Ls_64 + "  Orders Opens :   " + string(CountTrades()) + " | A : " + (string)m_orders_count1 + " | B : " + (string)m_orders_count2 + " \n";
    Ls_64 = Ls_64 + "  Profit/Loss: " + DoubleToStr(m_profit_all, 2) + " | A : " + DoubleToStr(CalculateProfit(InpMagic), 2) + " | B : " + DoubleToStr(CalculateProfit(InpMagic2), 2) + " \n";
    Ls_64 = Ls_64 + " ==========================\n";
    Ls_64 = Ls_64 + " EquityCautionFilter : " + (string)InpUseEquityCaution + " \n";
    Ls_64 = Ls_64 + " TotalEquityRiskCaution : " + DoubleToStr(InpTotalEquityRiskCaution, 2) + " % \n";
    Ls_64 = Ls_64 + " EquityStopFilter : " + (string)InpUseEquityStop + " \n";
    Ls_64 = Ls_64 + " TotalEquityRiskStop : " + DoubleToStr(InpTotalEquityRisk, 2) + " % \n";
    Ls_64 = Ls_64 + " NewsFilter : " + (string)InpUseFFCall + " \n";
    Ls_64 = Ls_64 + " TimeFilter : " + (string)InpUtilizeTimeFilter + " \n";
    Ls_64 = Ls_64 + " ==========================\n";
    Ls_64 = Ls_64 + m_filters_on;

    Comment(Ls_64);

    Li_84 = 16;
    if (InpDisplayInpBackgroundColor)
    {
      if (m_initpainel || Seconds() % 5 == 0)
      {
        m_initpainel = FALSE;
        for (int count_88 = 0; count_88 < 12; count_88++)
        {
          for (int count_92 = 1; count_92 < Li_84; count_92++)
          {
            ObjectDelete("background" + (string)count_88 + (string)count_92);
            ObjectDelete("background" + (string)count_88 + ((string)(count_92 + 1)));
            ObjectDelete("background" + (string)count_88 + ((string)(count_92 + 2)));
            ObjectCreate("background" + (string)count_88 + (string)count_92, OBJ_LABEL, 0, 0, 0);
            ObjectSetText("background" + (string)count_88 + (string)count_92, "n", 30, "Wingdings", InpBackgroundColor);
            ObjectSet("background" + (string)count_88 + (string)count_92, OBJPROP_XDISTANCE, 20 * count_88);
            ObjectSet("background" + (string)count_88 + (string)count_92, OBJPROP_YDISTANCE, 23 * count_92 + 9);
          }
        }
      }
    }
    else
    {
      if (m_initpainel || Seconds() % 5 == 0)
      {
        m_initpainel = FALSE;
        for (int count_88 = 0; count_88 < 9; count_88++)
        {
          for (int count_92 = 0; count_92 < Li_84; count_92++)
          {
            ObjectDelete("background" + (string)count_88 + (string)count_92);
            ObjectDelete("background" + (string)count_88 + ((string)(count_92 + 1)));
            ObjectDelete("background" + (string)count_88 + ((string)(count_92 + 2)));
          }
        }
      }
    }
  }
}

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

void xBest(string Id, int Sinal, bool TradeNow, double LotsHedge, int vInpMagic, int &m_orders_count, double &m_mediaprice, bool &m_hedging, bool &m_target_filter,
           int &m_direction, int &m_current_day, int &m_previous_day,
           double &m_level, double &m_buyer, double &m_seller, double &m_target, double &m_profit,
           double &m_pip, double &m_size, double &m_take, datetime &vDatetimeUltCandleOpen,
           datetime &m_time_equityrisk, double &profit)
{

  int index, orders_total, order_ticket, order_type, ticket, hour;
  double volume_min, volume_max, volume_step, lots;
  double account_balance, margin_required, risk_balance;
  double order_open_price, order_lots;

  int buy_ticket = 0, sell_ticket = 0, orders_count = 0, buy_ticket2 = 0, sell_ticket2 = 0;
  int buyer_counter = 0, seller_counter = 0;
  bool was_trade = false, close_filter = false;
  bool long_condition = false, short_condition = false;
  double orders_profit = 0.0, level = 0.0;
  double buyer_lots = 0.0, seller_lots = 0.0;
  double buyer_sum = 0.0, seller_sum = 0.0, sell_lot = 0, buy_lot = 0;
  ;
  double buy_price = 0.0, sell_price = 0.0;
  double bid_price = Bid, ask_price = Ask;
  double close_price = iClose(NULL, 0, 0);
  double open_price = iOpen(NULL, 0, 0);
  datetime time_current = TimeCurrent();
  bool res = false;
  m_spreadX = 2.0 * m_pip;

  account_balance = AccountBalance();
  volume_min = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_MIN);
  volume_max = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_MAX);
  volume_step = SymbolInfoDouble(m_symbol, SYMBOL_VOLUME_STEP);
  lots = volume_min;

  if (InpLotMode == LOT_MODE_FIXED)
    lots = InpFixedLot;
  else if (InpLotMode == LOT_MODE_PERCENT)
  {
    risk_balance = InpPercentLot * AccountBalance() / 100.0;
    margin_required = MarketInfo(m_symbol, MODE_MARGINREQUIRED);
    lots = MathRound(risk_balance / margin_required, volume_step);
    if (lots < volume_min)
      lots = volume_min;
    if (lots > volume_max)
      lots = volume_max;
  }

  m_current_day = TimeDayOfWeek(time_current);
  if (m_current_day != m_previous_day)
  {
    m_target_filter = false;
    m_target = 0.0;
  }
  m_previous_day = m_current_day;

  orders_total = OrdersTotal();
  m_mediaprice = 0;
  double BuyProfit = 0;
  double SellProfit = 0;
  int countFirts = 0;
  double Firts2SellProfit = 0;
  double Firts2BuyProfit = 0;
  int Firtsticket[50];
  double LastSellProfit = 0;
  double LastBuyProfit = 0;
  int Lastticket = 0;

  for (index = orders_total - 1; index >= 0; index--)
  {
    if (!OrderSelect(index, SELECT_BY_POS, MODE_TRADES))
      continue;
    if (OrderMagicNumber() != vInpMagic || OrderSymbol() != m_symbol)
      continue;
    order_open_price = OrderOpenPrice();
    order_ticket = OrderTicket();
    order_type = OrderType();
    order_lots = OrderLots();

    if (order_type == OP_BUY)
    {

      if (order_ticket > buy_ticket)
      {

        buy_price = order_open_price;
        buy_ticket = order_ticket;
        LastBuyProfit = OrderProfit() + OrderCommission() + OrderSwap();
        Lastticket = order_ticket;
        buy_lot = order_lots;
      }

      buyer_sum += (order_open_price - m_spreadX) * order_lots;

      buyer_lots += order_lots;
      buyer_counter++;
      orders_count++;
      m_mediaprice += order_open_price * order_lots;
      if (OrderProfit() > 0)
        BuyProfit += OrderProfit() + OrderCommission() + OrderSwap();
    }

    if (order_type == OP_SELL)
    {

      if (order_ticket > sell_ticket)
      {

        sell_price = order_open_price;
        sell_ticket = order_ticket;
        LastSellProfit = OrderProfit() + OrderCommission() + OrderSwap();
        Lastticket = order_ticket;
        sell_lot = order_lots;
      }

      seller_sum += (order_open_price + m_spreadX) * order_lots;

      seller_lots += order_lots;
      seller_counter++;
      orders_count++;
      m_mediaprice += order_open_price * order_lots;
      if (OrderProfit() > 0)
        SellProfit += OrderProfit() + OrderCommission() + OrderSwap();
    }

    orders_profit += OrderProfit();
  }

  if (ProtectGridLastFist )
  {
    int ordticket[100];

    Firts2BuyProfit  = FindFirstOrderTicket(vInpMagic, Symbol(), OP_BUY,LastBuyProfit, QtdTradesMinProfit,  ordticket);

    if (LastBuyProfit >0 &&  LastBuyProfit > (Firts2BuyProfit * -1) + 1)
    {

        for (int i = 0; i < QtdTradesMinProfit; i++)
      {
        CloseAllTicket(OP_BUY, ordticket[i], vInpMagic);
      }

      CloseAllTicket(OP_BUY, Lastticket, vInpMagic);

    }

    Firts2SellProfit = FindFirstOrderTicket(vInpMagic, Symbol(), OP_SELL,LastSellProfit, QtdTradesMinProfit,  ordticket);

    if (LastSellProfit >0 && LastSellProfit > (Firts2SellProfit * -1) + 1)
    {

      CloseAllTicket(OP_SELL, Lastticket, vInpMagic);

      for (int i = 0; i < QtdTradesMinProfit; i++)
      {
        CloseAllTicket(OP_SELL, ordticket[i], vInpMagic);
      }
    }
  }

  m_orders_count = orders_count;
  m_profit = orders_profit;
  if ((seller_counter + buyer_counter) > 0)
    m_mediaprice = NormalizeDouble(m_mediaprice / (buyer_lots + seller_lots), Digits);

  color avgLine = Blue;
  if (seller_lots > 0)
    avgLine = Red;

  if (buyer_lots > 0 || seller_lots > 0)
    SetHLine(avgLine, "Avg" + Id, m_mediaprice, 0, 3);
  else
    ObjectDelete("Avg" + Id);

  if (InpUseTrailingStop)
    TrailingAlls(InpTrailStart, InpTrailStop, m_mediaprice, vInpMagic);

  if (InpUseBreakEven)
    BreakEvenAlls(InpBreakEvenStart, InpBreakEvenStep, m_mediaprice, vInpMagic);

  if (orders_count == 0)
  {
    m_target += m_profit;
    m_hedging = false;
  }
  profit = m_target + orders_profit;

  if (InpDailyTarget > 0 && m_target + orders_profit >= InpDailyTarget)
    m_target_filter = true;

  if (m_hedging && ((m_direction > 0 && bid_price >= m_level) || (m_direction < 0 && ask_price <= m_level)))
    close_filter = true;

  if (m_target_filter || close_filter)
  {

    CloseThisSymbolAll(vInpMagic);

    return;
  }

  if (!m_hedging)
  {
    if (orders_count > 0 && !GridAll)
    {
      if( (OpenNewOrdersGrid == true && TradeNow)&&  (!InpOpenOneCandle || (InpOpenOneCandle && vDatetimeUltCandleOpen != iTime(NULL, InpTimeframeBarOpen, 0)))
     )
      {
    vDatetimeUltCandleOpen = iTime(NULL, InpTimeframeBarOpen, 0);
        if (m_time_equityrisk1 != iTime(NULL, InpTimeframeEquityCaution, 0))
       

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

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

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

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

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

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

Стоимость полного кода
4 519,50₽ ≈ $55.22