Indo Run 1.5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indo run 1.5.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Indo Run 1.5 — торговый советник для MetaTrader 4, предназначенный для автоматического размещения рыночных и отложенных ордеров на валютном рынке. Советник поддерживает множественные корзины ордеров, фильтрацию по техническим индикаторам, новостям и торговым сессиям, а также управление прибылью и рисками. Основной цикл работы запускается на каждом тике через функцию start(), которая вызывает последовательную обработку фильтров и проверку условий для открытия и закрытия позиций.
Советник включает встроенные фильтры: ATR (среднее истинное движение), CCI, Momentum, RSI, скользящие средние и Envelopes, а также фильтр новостей с загрузкой календаря TSD из интернета. Доступны фильтрация по дням недели, торговым часам, сессиям (Лондон/Нью-Йорк), месячным периодам и экономическим событиям (NFP, ADP). Управление лотами поддерживает автоматический расчёт на основе баланса, мартингейл и удвоение лотов в азиатскую сессию.
Система управления прибылью включует фиксированный и динамический тейк-профит, стоп-лосс на уровне безубыточности (breakeven), трейлинг-стоп и стоп-аут по кумулятивной прибыли/убытку. Советник работает с магическими номерами ордеров, поддерживает реверсирование/хеджирование позиций и позволяет сохранять текущий магический номер в файл. Отображение ключевых параметров и статусов фильтров осуществляется через текстовые метки на графике.
Настройки программы
| Настройка | Описание |
|---|---|
| Menu | Текстовый параметр: заголовок главного меню настроек советника. |
| Comment for your orders, you might better leave it empty ;) (EAName) | Текстовый параметр: комментарий для ордеров. Рекомендуется оставлять пустым. |
| Switches Chart Label on/off (IndoRunLabelOn) | Переключатель: включает или выключает отображение текстовой метки на графике. |
| MagicNumber | Текстовый параметр: информационное сообщение о том, что случайный магический номер переопределит вручную установленный. |
| Order Magic Number (Magic) | Целочисленное значение магического номера ордеров для идентификации сделок, размещённых советником. |
| Switches the Random Magic Number on/off (UseRandomMagic) | Переключатель: включает или выключает генерацию случайного магического номера для ордеров. |
| Sets the lower Magic Number boundry (RandomMagicLower) | Целочисленное значение нижней границы диапазона случайного магического номера. |
| Sets the upper Magic Number boundry (RandomMagicUpper) | Целочисленное значение верхней границы диапазона случайного магического номера. |
| DayFilter | Текстовый параметр-заголовок для блока настроек выбора дней торговли. |
| Selecting a day true/false will hold the EA off trading that day if no trades are open (Monday) | Переключатель дня торговли: при значении true разрешает торговлю в понедельник (если нет открытых позиций). |
| Overides day filter if trades are open (Basket) (Tuesday) | Переключатель дня торговли: при значении true разрешает торговлю во вторник. Переопределяет фильтр дней при наличии открытых позиций (корзина). |
| Wednesday | Переключатель дня торговли: при значении true разрешает торговлю в среду (если нет открытых позиций). |
| Thursday | Переключатель дня торговли: при значении true разрешает торговлю в четверг (если нет открытых позиций). |
| Friday | Переключатель дня торговли: при значении true разрешает торговлю в пятницу (если нет открытых позиций). |
| Saturday | Переключатель дня торговли: при значении true разрешает торговлю в субботу (если нет открытых позиций). |
| Sunday | Переключатель дня торговли: при значении true разрешает торговлю в воскресенье (если нет открытых позиций). |
| TradeMonthEnd | Переключатель: при активации разрешает торговлю в конце месяца (с учётом MonthEndOffset). |
| Offset to define the last trading day of a month (31 - Offset) (MonthEndOffset) | Целочисленное значение смещения для определения последнего торгового дня месяца (31 - Offset). |
| TradeFirstDayOffMonth | Переключатель: при активации фильтрует торговлю в первый день месяца (с учётом DayOffset). |
| Per default the Offset is 0 thus the 1st of a month is filtered (DayOffset) | Целочисленное значение смещения для фильтрации первого дня месяца. По умолчанию 0 — первое число месяца фильтруется. |
| GMTOffset | Числовое значение смещения часового пояса GMT, используемое для расчёта торговых часов и фильтров сессий. |
| Trade Day of Non Farm Employment (TradeNFP) | Переключатель: при активации разрешает торговлю в день публикации данных Non Farm Employment. |
| Trade Monday till US Session after Non Farm Employment / TradeNFP must be set to true (TradeMondayAfterNFP) | Переключатель: при активации разрешает торговлю в понедельник после US-сессии публикации Non Farm Employment. Требует установленного TradeNFP = true. |
| Trade Day of ADP Non Farm Employment (TradeADP) | Переключатель: при активации разрешает торговлю в день публикации данных ADP Non Farm Employment. |
| HourFilter | Текстовый параметр-заголовок для блока настроек торговых часов. |
| Trading24h | Переключатель: при значении true торговля разрешена круглосуточно, игнорируя фильтры торговых часов и сессий. |
| Start Trading Hour Broker Time (Standad Settings GMT), the EA overides time if trades are open (Bask (HoursFrom) | Целочисленное значение начального торгового часа в часовом поясе брокера (стандартные настройки GMT). При наличии открытых ордеров советник переопределяет время. |
| Stop Trading Hour Broker Time Standard Setting GMT), the EA overides time if trades are open (Basket (HoursTo) | Целочисленное значение конечного торгового часа в часовом поясе брокера (стандартные настройки GMT). При наличии открытых ордеров советник переопределяет время. |
| Session_Filter | Текстовый параметр: информационное сообщение о правилах использования сессионных фильтров. |
| Session_Filter1 | Текстовый параметр-заголовок для настроек первой сессионной фильтрации (по умолчанию Лондонская сессия GMT). |
| Session Filter Settings in GMT / Use only in combination with SessionFilter 2 (SessionFilter1) | Переключатель первой сессионной фильтрации в GMT. Используется только в сочетании с SessionFilter2. |
| SF1Hour_On | Числовое значение начального часа первой торговой сессии (GMT). |
| SF1MinuteOn | Числовое значение начальной минуты первой торговой сессии (GMT). |
| SF1Hour_Off | Числовое значение конечного часа первой торговой сессии (GMT). |
| SF1MinuteOff | Числовое значение конечной минуты первой торговой сессии (GMT). |
| Session_Filter2 | Текстовый параметр-заголовок для настроек второй сессионной фильтрации (по умолчанию Нью-Йоркская сессия GMT). |
| Session Filter Settings in GMT / Use only in combination with SessionFilter 1 (SessionFilter2) | Переключатель второй сессионной фильтрации в GMT. Используется только в сочетании с SessionFilter1. |
| SF2Hour_On | Числовое значение начального часа второй торговой сессии (GMT). |
| SF2MinuteOn | Числовое значение начальной минуты второй торговой сессии (GMT). |
| SF2Hour_Off | Числовое значение конечного часа второй торговой сессии (GMT). |
| SF2MinuteOff | Числовое значение конечной минуты второй торговой сессии (GMT). |
| Info9 | Текстовый параметр-заголовок для блока настроек фильтра новостей. |
| Switches News Filter on/off (AvoidNews) | Переключатель: включает или выключает фильтрацию торговых операций во время публикации экономических новостей. |
| High_Impact | Переключатель: при активации блокирует торговлю во время публикаций с высоким влиянием на рынок. |
| MinsUntilNextHighNews | Целочисленное значение времени в минутах до следующей новости с высоким влиянием, в течение которых торговля разрешена. |
| MinsSincePrevHighNews | Целочисленное значение времени в минутах после предыдущей новости с высоким влиянием, в течение которого торговля разрешена. |
| Medium_Impact | Переключатель: при активации блокирует торговлю во время публикаций со средним влиянием на рынок. |
| MinsUntilNextMediumNews | Целочисленное значение времени в минутах до следующей новости со средним влиянием, в течение которых торговля разрешена. |
| MinsSincePrevMediumNews | Целочисленное значение времени в минутах после предыдущей новости со средним влиянием, в течение которых торговля разрешена. |
| Low_Impact | Переключатель: при активации блокирует торговлю во время публикаций с низким влиянием на рынок. |
| MinsUntilNextLowNews | Целочисленное значение времени в минутах до следующей новости с низким влиянием, в течение которых торговля разрешена. |
| MinsSincePrevLowNews | Целочисленное значение времени в минутах после предыдущей новости с низким влиянием, в течение которых торговля разрешена. |
| Select the Currency which News should be filtered (Info10) | Текстовый параметр-заголовок для блока настроек фильтрации новостей по валютам. |
| USD | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием доллара США (USD). |
| EUR | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием евро (EUR). |
| GBP | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием британского фунта (GBP). |
| JPY | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием японской иены (JPY). |
| AUD | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием австралийского доллара (AUD). |
| CAD | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием канадского доллара (CAD). |
| CHF | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием швейцарского франка (CHF). |
| NZD | Переключатель: определяет, будет ли новостной фильтр применяться к валютной паре с участием новозеландского доллара (NZD). |
| TSD News Calendar ID reference on the TSD Homepage (TSD_CalendarID) | Целочисленное идентификационное значение календаря новостей TSD на домашней странице TSD. |
| Info5 | Текстовый параметр-заголовок для блока основных настроек ордера. |
| PAO | Текстовый параметр: информационное сообщение об автоматическом расчёте ProfitAllOrder при изменении размера лота. |
| Cumulated Sell Order Take Profit in Account Currency based on 0.1 Lotsize!!! (ProfitAllOrder) | Числовое значение кумулятивного тейк-профита для всех ордеров в корзине в валюте счёта, рассчитываемое на основе лота 0.1. |
| If true, ProfitAllOrder amount set will be used only/Have to be set to tru while using Martingale!!! (FixedProfitAO) | Переключатель: при значении true значение ProfitAllOrder используется фиксированно. Необходимо установить в true при использовании мартингейла. |
| Advanced Profit Modue which reduces the Profit Target on increasing opened Orders in the Basket (ADVProfitMode) | Переключатель: при активации целевая прибыль снижается по мере увеличения количества открытых ордеров в корзине. |
| This Mode will take the Profit (>=ATR Profit) while the ATR is Filtering on open trades (ATRProfitMode) | Переключатель: при активации целевая прибыль берётся не ниже ATR-прибыли, пока ATR-фильтр активен для открытых позиций. |
| This value does not adjusts automatically while the Lotsize is changed. (ATRProfit) | Числовое значение целевой прибыли, используемое в ATRProfitMode. Не корректируется автоматически при изменении размера лота. |
| Overrides ATRProfit set and will apply ProfitAllOrders/ADVATRProfitx (ADVATRProfit) | Переключатель: при активации переопределяет значение ATRProfit и применяет расчёт прибыли на основе ProfitAllOrders и коэффициента ADVATRProfitx. |
| ProfitAllOrders/ADVATRProfitx (ADVATRProfitx) | Числовой коэффициент, используемый совместно с ADVATRProfit для деления значения ProfitAllOrders при расчёте целевой прибыли. |
| If true, when ProfitAllOrder limit is reached the profit will trail by the defined step (DynamicProfit) | Переключатель: при активации, после достижения лимита ProfitAllOrder, прибыль протейнивается (отслеживается) на определённом шаге. |
| Inc of the ProfitAllOrder value (DynamicProfitStep) | Числовое значение шага инкремента для протейнивания прибыли при активном DynamicProfit. |
| If true, Profit will be trailed while if Drawdown as set in TrailingStop and BE (Trailing) | Переключатель: при активации прибыль протейнивается при достижении определённого уровня убытка (TrailingStop и BE). |
| Number of open trades for the trailing to start (OrderTreshold) | Целочисленное значение количества открытых торговых позиций, при достижении которого запускается протейнивание прибыли. |
| Breakeven Profit upon Order Treshold. Requires Trailing to be set to true (Breakeven) | Переключатель: при активации и достижении порога ордеров (OrderTreshold) целевая прибыль устанавливается на уровень безубыточности (BE). Требует активного Trailing. |
| Breakeven in Account Currency (BE) | Числовое значение безубыточности в валюте счёта, которое устанавливается целевой прибылью при достижении порога ордеров и активном Breakeven. |
| If true Order Profits will be trailed downwards while in DD after Breakeven (OrderTrailing) | Переключатель: при активации прибыли ордеров протейниваются вниз при наличии убытка после достижения безубыточности. |
| Profit of Account Currency on which the Profit is reduced/trailed per open Order after Breakeven. (TrailingStop) | Числовое значение прибыли в валюте счёта, на которой прибыль каждого открытого ордера снижается/протейнивается после безубыточности. |
| Bug: if false Sell Open Orders are not registered and counted (DeletePOMode) | Переключатель: при значении false ордера типа Sell Open не регистрируются и не учитываются в счётчике. Имеет известный баг. |
| Reverse/Hedging Trades from a defined Treshold of trades onwards (ReverseOrder) | Переключатель: при активации разрешает реверсирование/хеджирование позиций при достижении определённого порога ордеров. |
| Reverse/Hedging Trade Treshold (OpenOrderTreshold) | Целочисленное значение порога количества ордеров, при достижении которого активируется реверсирование/хеджирование позиций. |
| Lot divider for Reverse/Hedging Trades (Lot/ReverseOrderLotDiv) (ReverseOrderLotDiv) | Числовой коэффициент деления лота для реверсированных/хеджированных позиций (Lot/ReverseOrderLotDiv). |
| Continue Basket while Orders are reversed in addition (ReversalContBasket) | Переключатель: при активации корзина продолжает работать дополнительно к реверсированным ордерам. |
| Stop Loss of each individual Order in Pips (SingleOrderSL) | Целочисленное значение стоп-лосса для каждого отдельного ордера в пунктах. |
| Take Profit of each individual Order in Pips (SingleOrderTP) | Целочисленное значение тейк-профита для каждого отдельного ордера в пунктах. |
| If false Pending Orders are placed on the current ASK/Bid Price (ADVOffsetMode) | Переключатель: при значении false отложенные ордера размещаются по текущей цене Ask/Bid; при значении true расчёт цены привязан к шагу и последнему ордеру. |
| If true the step value/price offset is linked to the current ATRPips value (ATRStepOn) | Переключатель: при активации значение шага/смещения цены привязывается к текущему значению ATR в пунктах. |
| If true the ATRPips value will be used as Step/Price Offset (ATRPipsToStep) | Переключатель: при активации значение ATR в пунктах используется напрямую как шаг/смещение цены для размещения ордеров. |
| Step/Gap in Pips where Pending Order is placed to current price basic (PriceOffset) | Целочисленное значение шага/разрыва в пунктах, на котором размещается отложенный ордер относительно текущей цены (базовое значение). |
| Factor which increases the Step per Order (StepFactorOn) | Переключатель: при активации шаг размещения ордера увеличивается в зависимости от количества открытых ордеров. |
| ProfitOffset*(OrderCounter/StepFactor+1) (StepFactor) | Целочисленное значение множителя, увеличивающего шаг размещения ордера с учётом количества ордеров. |
| //Step/PriceOffset added in Low Range ATR while ATRStepOn is set to true (PriceOffset1) | Целочисленное значение дополнительного смещения цены для низкого диапазона ATR при активном ATRStepOn. |
| Step/PriceOffset added in Mid Range ATR while ATRStepOn is set to true (PriceOffset2) | Целочисленное значение дополнительного смещения цены для среднего диапазона ATR при активном ATRStepOn. |
| Step/PriceOffset added in High Range ATR while ATRStepOn is set to true (PriceOffset3) | Целочисленное значение дополнительного смещения цены для высокого диапазона ATR при активном ATRStepOn. |
| Single Order Lotsize / If FixedProfitAO = false Profit Target will be calculated automatically to th (Lot) | Числовое значение размера лота для одного ордера. Если FixedProfitAO = false, целевая прибыль рассчитывается автоматически на основе лота 0.1. |
| Price Change in Pips allowed during Order Processing (Slippage) | Целочисленное значение допустимого проскальзывания цены в пунктах при обработке ордера. |
| AutomaticLots1 | Текстовый параметр-заголовок для блока настроек автоматического размера лота на основе баланса счёта. |
| AutomaticLots2 | Текстовый параметр-заголовок для блока настроек автоматической корректировки целевой прибыли. |
| Automatic Lotsize based on Account Balance (Account Balance/300*MinLots) (AutoLotSize) | Переключатель: при активации размер лота рассчитывается автоматически на основе баланса счёта по формуле (Баланс/300 × МинЛот). |
Поиск по коду файла
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern string Menu = "Indo Run Setup";
extern string EAName = ""; //Comment for your orders, you might better leave it empty ;)
extern bool IndoRunLabelOn = true; //Switches Chart Label on/off
extern string MagicNumber = "Random Magic will overide manual set Magic Number";
extern int Magic = 128738; //Order Magic Number
extern bool UseRandomMagic = false; //Switches the Random Magic Number on/off
extern int RandomMagicLower = 100000; //Sets the lower Magic Number boundry
extern int RandomMagicUpper = 200000; //Sets the upper Magic Number boundry
extern string DayFilter = "Select the days for Indo Run to trade";
extern bool Monday = true; // Selecting a day true/false will hold the EA off trading that day if no trades are open
extern bool Tuesday = true; // Overides day filter if trades are open (Basket)
extern bool Wednesday = true;
extern bool Thursday = true;
extern bool Friday = true;
extern bool Saturday = true;
extern bool Sunday = true;
extern bool TradeMonthEnd = true;
extern int MonthEndOffset = 3; //Offset to define the last trading day of a month (31 - Offset)
extern bool TradeFirstDayOffMonth = true;
extern int DayOffset = 0; //Per default the Offset is 0 thus the 1st of a month is filtered
extern double GMTOffset = 0;
extern bool TradeNFP = true; //Trade Day of Non Farm Employment
extern bool TradeMondayAfterNFP = true; //Trade Monday till US Session after Non Farm Employment / TradeNFP must be set to true
extern bool TradeADP = true; //Trade Day of ADP Non Farm Employment
extern string HourFilter = "Select the Trading Hours or set to 24h";
extern bool Trading24h = true;
extern int HoursFrom = 10; //Start Trading Hour Broker Time (Standad Settings GMT), the EA overides time if trades are open (Basket)
extern int HoursTo = 6; //Stop Trading Hour Broker Time Standard Setting GMT), the EA overides time if trades are open (Basket)
extern string Session_Filter = "Only in 24 Mode: Use both Session Filter together only!";
extern string Session_Filter1 = "Filters per default London Session (GMT)!";
extern bool SessionFilter1 = false; //Session Filter Settings in GMT / Use only in combination with SessionFilter 2
extern double SF1Hour_On = 5;
extern double SF1MinuteOn =45;
extern double SF1Hour_Off = 9;
extern double SF1MinuteOff = 0;
extern string Session_Filter2 = "Filters per default NY Session (GMT)!";
extern bool SessionFilter2 = false; //Session Filter Settings in GMT / Use only in combination with SessionFilter 1
extern double SF2Hour_On = 11;
extern double SF2MinuteOn =45;
extern double SF2Hour_Off = 17;
extern double SF2MinuteOff = 30;
extern string Info9 = "News Filter Setup";
extern bool AvoidNews = true; //Switches News Filter on/off
extern bool High_Impact=true;
extern int MinsUntilNextHighNews=90;
extern int MinsSincePrevHighNews=90;
extern bool Medium_Impact=true;
extern int MinsUntilNextMediumNews=90;
extern int MinsSincePrevMediumNews=90;
extern bool Low_Impact=false;
extern int MinsUntilNextLowNews=60;
extern int MinsSincePrevLowNews=60;
extern string Info10 = "News Currency Filter"; //Select the Currency which News should be filtered
extern bool USD = true;
extern bool EUR = false;
extern bool GBP = true;
extern bool JPY = false;
extern bool AUD = false;
extern bool CAD = false;
extern bool CHF = false;
extern bool NZD = false;
extern int TSD_CalendarID = 4; // TSD News Calendar ID reference on the TSD Homepage
extern string TSD_Calendar_URL = "";
extern string Info5 = "Main Order Setup";
extern string PAO = " ProfitAllOrder will calculate automatically while the Lotssize is changed!";
extern double ProfitAllOrder = 15; //Cumulated Sell Order Take Profit in Account Currency based on 0.1 Lotsize!!!
extern bool FixedProfitAO = false; // If true, ProfitAllOrder amount set will be used only/Have to be set to tru while using Martingale!!!
extern bool ADVProfitMode = false; //Advanced Profit Modue which reduces the Profit Target on increasing opened Orders in the Basket
extern bool ATRProfitMode = false; //This Mode will take the Profit (>=ATR Profit) while the ATR is Filtering on open trades
extern double ATRProfit = 4; //This value does not adjusts automatically while the Lotsize is changed.
extern bool ADVATRProfit = false; //Overrides ATRProfit set and will apply ProfitAllOrders/ADVATRProfitx
extern double ADVATRProfitx = 3; //ProfitAllOrders/ADVATRProfitx
extern bool DynamicProfit = false; //If true, when ProfitAllOrder limit is reached the profit will trail by the defined step
extern double DynamicProfitStep = 1; //Inc of the ProfitAllOrder value
extern bool Trailing = false; //If true, Profit will be trailed while if Drawdown as set in TrailingStop and BE
extern int OrderTreshold = 20; //Number of open trades for the trailing to start
extern bool Breakeven = false; //Breakeven Profit upon Order Treshold. Requires Trailing to be set to true
extern double BE = 0; //Breakeven in Account Currency
extern bool OrderTrailing = false; //If true Order Profits will be trailed downwards while in DD after Breakeven
extern double TrailingStop = 15; //Profit of Account Currency on which the Profit is reduced/trailed per open Order after Breakeven.
int OpenOrdersLimit = 0; //Limits the number of open orders
extern bool DeletePOMode = true; // Bug: if false Sell Open Orders are not registered and counted
extern bool ReverseOrder = false; //Reverse/Hedging Trades from a defined Treshold of trades onwards
extern int OpenOrderTreshold = 10; //Reverse/Hedging Trade Treshold
extern double ReverseOrderLotDiv = 2; //Lot divider for Reverse/Hedging Trades (Lot/ReverseOrderLotDiv)
extern bool ReversalContBasket = true; //Continue Basket while Orders are reversed in addition
extern int SingleOrderSL = 0; //Stop Loss of each individual Order in Pips
extern int SingleOrderTP = 0; //Take Profit of each individual Order in Pips
extern bool ADVOffsetMode = false; //If false Pending Orders are placed on the current ASK/Bid Price
extern bool ATRStepOn = false; //If true the step value/price offset is linked to the current ATRPips value
extern bool ATRPipsToStep = false; //If true the ATRPips value will be used as Step/Price Offset
extern int PriceOffset = -16; //Step/Gap in Pips where Pending Order is placed to current price basic
extern bool StepFactorOn = false; //Factor which increases the Step per Order
extern int StepFactor = 10; //ProfitOffset*(OrderCounter/StepFactor+1)
extern int PriceOffset1 = 0; ////Step/PriceOffset added in Low Range ATR while ATRStepOn is set to true
extern int PriceOffset2 = -1; //Step/PriceOffset added in Mid Range ATR while ATRStepOn is set to true
extern int PriceOffset3 = -2; //Step/PriceOffset added in High Range ATR while ATRStepOn is set to true
extern double Lot = 0.1; //Single Order Lotsize / If FixedProfitAO = false Profit Target will be calculated automatically to the Profit Target set on 0.1 base (0.1 Lot = 15$ standard setting)
extern int Slippage=4; //Price Change in Pips allowed during Order Processing
extern string AutomaticLots1 = "Automatic Lotsize based on Account Balance!";
extern string AutomaticLots2 = "ProfitAllOrder gets adjusted automatically!";
extern bool AutoLotSize = false; //Automatic Lotsize based on Account Balance (Account Balance/300*MinLots)
extern double Risk = 2; //"Risk Factor on which the Lotsize increases
extern double MinLots = 0.01; //minimum Lotsize only used when Autolotsize is activated
extern bool KLotSize = false; // if true Lot Size will double every 10K+
extern bool DoubleLots = false; //Doubles the Lotsize in the Asian Session
extern bool Martingale = false; //Need to set FixedProfitAO=true!!!!
extern double LotFactor = 1.4; //Increasing Factor of Martingale Lotsize
extern double MartingaleMaxLot = 0.5; //Limit of Losize of Martingale!!!
extern bool DoubleBasket = false; //if true the EA will trade with two Order Baskets (First Basket opens Trade second Basket comes online in addition)
extern bool TripleBasket = false; //if true the EA will trade with three Order Baskets (Second Basket opens Trade third Basket comes online in addition)
extern string Timed_Stop = "Stops Trading and closes all trades at selected time of a day!";
extern bool TimedStop = false; //Switches Time to close all open orders once a day on/off
extern int StopHour = 14; //Timed Stop Hour GMT
extern int StopMinute = 0; //Timed Stop Minute
extern string ATR_Filter = "ATR Filter selection and setup!";
extern bool ATROn = true; //Switches ATR Filter on/off
extern bool FilterMod = false;
extern int ATR_Period1 = 7;
extern int ATR_Period2 = 7;
extern int ATR_Period3 = 7;
extern double ATRShift1 = 0.0;
extern double ATRShift2 = 3.0;
extern double ATRShift3 = 5.0;
extern double ATRUpLimit1 = 13.0;
extern double ATRDnLimit1 = 7.0;
extern double ATRUpLimit2 = 21.0;
extern double ATRDnLimit2 = 16.0;
extern double ATRUpLimit3 = 26.0;
extern double ATRDnLimit3 = 24.0;
extern string Info15 = "CCI Filter Settings";
extern bool CCIFilterOn = false;
extern double CCIPeriod1 = 14;
extern double CCIPeriod2 = 14;
extern double CCIShift1 = 0;
extern double CCIShift2 = 5;
extern double CCICurrentUp = 65;
extern double CCICurrentDown = -65;
extern double CCIPreviousUp = 75;
extern double CCIPreviousDown = -75;
extern string Info16 = "Momentum Filter Settings";
extern bool MomentumFilterOn = false;
extern double MomentumPeriod1 = 3;
extern double MomentumPeriod2 = 3;
extern double MomentumShift1 = 0;
extern double MomentumShift2 = 3;
extern double MomentumCurrentUp = 100.1;
extern double MomentumCurrentDown = 99.9;
extern double MomentumPreviousUp = 100.2;
extern double MomentumPreviousDown = 99.8;
extern string Info17 = "RSI Filter Settings";
extern bool RSIFilterOn = false;
extern double RSIPeriod1 = 3;
extern double RSIPeriod2 = 3;
extern double RSIShift1 = 0;
extern double RSIShift2 = 3;
extern double RSICurrentUp = 51;
extern double RSICurrentDown = 49;
extern double RSIPreviousUp = 53;
extern double RSIPreviousDown = 47;
extern string Info18 = "MA Filter Settings";
extern bool MAFilterOn = false;
extern double MAPeriod1 = 3;
extern double MAPeriod2 = 3;
extern double MAIShift1 = 0;
extern double MAIShift2 = 0;
extern double MAMethod = 0;
extern double MAShift1 = 0;
extern double MAShift2 = 3;
extern double MACurrentUp = 0.00025;
extern double MACurrentDown = 0.00025;
extern double MAPreviousUp = 0.0005;
extern double MAPreviousDown = 0.0005;
extern string Info19 = "Envelopes Filter Settings";
extern bool EnvelopesFilterOn = false;
extern int EnvelopesTimeFrame = 0; //Indicator timeframe in minutes (0 = current chart timeframe)
extern int EnvelopesMAPeriod1 = 14;
extern int EnvelopesMAPeriod2 = 14;
extern int EnvelopesMAMethod = 0;
extern int EnvelopesMAShift1 = 0;
extern int EnvelopesMAShift2 = 0;
extern int EnvelopesAppliedPrice = 0;
extern double EnvelopesDeviation = 0.1; //Sets the distance/deviation of the upper and lower indicator line
extern int EnvelopesShift1 = 0;
extern int EnvelopesShift2 = 0;
extern string Info20 = "Specific Order and Emergency Functions";
extern bool DeletePOATR = true; // Switch to delete all pending orders while ATR is active
extern bool DeleteOrderATR = false; // Switch to close all open orders while ATR is active (disabled due to current strategy set
extern string Stop_Out = "Closes all trades in basket on cummulated Profit/Loss!";
extern bool LossStopOutOn = false; //Switches Cumulated Loss Stop Out On on/off
extern int LossStopOut = -5000; // Cumulated Loss in Account Currency which will close all open orders
extern string CAT = "!!!Closes all trades in basket when true!!!";
extern bool CloseAllTrades = false; // Closes all open orders
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
bool FirstTime33 = false;
bool FirstTime35 = false;
int Today6 = -1;
int Count32 = 0;
double dblProfit=0;
string ATR = "";
string Trading = "";
int OrderCounter =0; //counts open orders including pending orders
bool Overide = false;
int Hour1 = 1;
int Minute1 = 2;
string MagicChange = "Waiting...";
string RMStatus = "Waiting...";
bool Buffer = true;
double ProfitAllOrders = 0;
double TrailingStops =0;
string SessionFilter = "Waiting...";
double ATRPips;
double ATRPrePips1;
double ATRPrePips2;
string Zone1;
string Zone2;
string Zone3;
string Zone4;
string Zone5;
string AutoLot;
string FilterMods;
bool AsianSession = false;
double Lots;
string Double_Lot;
double TotalTradeLots;
double BuyLots;
double SellLots;
bool NewsFilter;
string Filter;
string NewsF;
string CCIStatus;
string MomentumStatus;
string RSIStatus;
string MAStatus;
string EnvelopeStatus;
bool ATRProfitTrigger=false;
double MagicBuffer;
double DDBuffer=0;
string Basket="1";
double TrailingProfit[4];
int BasketTrailing=1;
bool BuyBasket;
bool SellBasket;
datetime NewsTimes[1000];
int NewsRatings[1000];
int NewsTotal;
bool EnableFileErrorLogging = false;
int logHandle=-1;
int init()
{
// код доступен только после оплаты
}
int start()
{
// код доступен только после оплаты
}
void OnEveryTick24()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
if(TripleBasket||DoubleBasket)
{
TripleBasket();
}
else
{
Sequence();
}
}
void Sequence()
{
ReadATR();
News();
CCI();
Momentum();
RSI();
MA();
Envelopes();
Filter();
if (CloseAllTrades == false)
{
LotSize();
OnceAnHour1();
WeekdayFilter23();
AtCertainTime6();
}
PrintInfoToChart32();
CloseOrderIf21();
}
bool MonthEnd(string symb, int year1, int month1, int day1, int ofs)
{
if (!TradeMonthEnd)
{
if (day1 > (31 - ofs)) return(false);
if (month1 == 2 && day1 > (29 - ofs)) return(false);
}
return(true);
}
bool MonthFirst(string symb, int year1, int month1, int day1, int ofs)
{
if (!TradeFirstDayOffMonth)
{
if (day1 == 1 - ofs) return(false);
}
return(true);
}
bool NFP(string symb, int year1, int month1, int day1, int ofs)
{
if(!TradeNFP)
{
if(!TradeMondayAfterNFP)
{
if(DayOfWeek()==0&&day1>3&&day1<11)return(false);
if(DayOfWeek()==1&&day1>4&&day1<12)return(false);
}
if(DayOfWeek()==5&&day1>1&&day1<9)return(false);
}
return(true);
}
bool ADP(string symb, int year1, int month1, int day1, int ofs)
{
if(!TradeADP)
{
if((DayOfWeek()==3&&day1>=1&&day1<=8)||(DayOfWeek()==3&&day1==30))return(false);
}
return(true);
}
void WeekdayFilter23()
{
double GMT_Hour;
int servertime = TimeCurrent();
int GMT_time = servertime - 3600.0 * GMTOffset;
if (((Monday && DayOfWeek() == 1) || (Tuesday && DayOfWeek() == 2) || (Wednesday && DayOfWeek() == 3) ||
(Thursday && DayOfWeek() == 4) || (Friday && DayOfWeek() == 5) || (Saturday && DayOfWeek() == 6) || (Sunday && DayOfWeek() == 0))
&&(MonthEnd(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), MonthEndOffset))
&&(MonthFirst(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), DayOffset))
&&(NFP(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), 0))
&&(ADP(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), 0)))
{
Overide = false;
HoursFilter22();
}
else
{
if ((!IfOrderDoesNotExist(1))&&(!IfOrderDoesNotExist(0)))
{
Trading = "Not Trading!";
DeletePendingOrder(2);
DeletePendingOrder(3);
if(!MonthEnd(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), MonthEndOffset))
{
Trading = "Not Trading Months End!";
}
if(!MonthFirst(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), DayOffset))
{
Trading = "Not Trading 1st Day/Month!";
}
if(!NFP(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), 0))
{
Trading = "Not Trading NFP!";
}
if(!NFP(Symbol(), TimeYear(GMT_time), TimeMonth(GMT_time), TimeDay(GMT_time), 0))
{
Trading = "Not Trading ADP!";
}
}
else
{
Overide = true;
HoursFilter22();
}
}
}
void HoursFilter22()
{
int datetime800 = TimeCurrent();
int hour0 = TimeHour(datetime800);
datetime currTime = TimeCurrent();
double SF1HourOn = SF1Hour_On + GMTOffset;
double SF1HourOff = SF1Hour_Off + GMTOffset;
double SF2HourOn = SF2Hour_On + GMTOffset;
double SF2HourOff = SF2Hour_Off + GMTOffset;
datetime fromTime1 = StrToTime(DoubleToStr(SF1HourOn,0)+":"+DoubleToStr(SF1MinuteOn,0));
datetime toTime1 = StrToTime(DoubleToStr(SF1HourOff,0)+":"+DoubleToStr(SF1MinuteOff,0));
datetime fromTime2 = StrToTime(DoubleToStr(SF2HourOn,0)+":"+DoubleToStr(SF2MinuteOn,0));
datetime toTime2 = StrToTime(DoubleToStr(SF2HourOff,0)+":"+DoubleToStr(SF2MinuteOff,0));
int Hours_To = HoursTo + GMTOffset;
int Hours_From = HoursFrom + GMTOffset;
if (toTime2 > fromTime1 && (currTime < fromTime1 || currTime >= toTime2))
{
AsianSession = true;
}
else
{
AsianSession = false;
}
if (((Hours_From < Hours_To && hour0 >= Hours_From && hour0 < Hours_To) ||
(Hours_From > Hours_To && (hour0 < Hours_To || hour0 >= Hours_From)))&& (Trading24h == false))
{
Trading = "Trading";
CheckLastOrderType33();
LimitOpenOrders28();
CheckLastOrderType35();
}
else
{
if ((Trading24h == false)&&((!IfOrderDoesNotExist(1))&&(!IfOrderDoesNotExist(0))))
{
Trading = "Not Trading!";
DeletePendingOrder(2);
DeletePendingOrder(3);
}
else
{
if (Trading24h == false)
{
Trading = "Overide Hour/Day Filter";
CheckLastOrderType33();
LimitOpenOrders28();
CheckLastOrderType35();
}
}
}
if (Trading24h == true)
{
if (Overide == true)
{
Trading = "Overide Hour/Day Filter";
}
else
{
Trading = "Trading 24h";
}
if (((SessionFilter1 == true) && (fromTime1 < toTime1 && (currTime < fromTime1 || currTime >= toTime1)))
&& ((SessionFilter2 == true) && (fromTime2 < toTime2 && (currTime < fromTime2 || currTime >= toTime2))))
{
SessionFilter = "Session opened for trading!";
CheckLastOrderType33();
LimitOpenOrders28();
CheckLastOrderType35();
}
else
{
if (((SessionFilter1 == true)||(SessionFilter2 == true))&&((!IfOrderDoesNotExist(1)) && (!IfOrderDoesNotExist(0))))
{
SessionFilter = "Session filtered!";
DeletePendingOrder(2);
DeletePendingOrder(3);
}
else
{
if ((SessionFilter1 == true)||(SessionFilter2 == true))
{
SessionFilter = "Session Overide!";
CheckLastOrderType33();
LimitOpenOrders28();
CheckLastOrderType35();
}
}
}
if ((SessionFilter1 == false)&&(SessionFilter2 == false))
{
SessionFilter = "Sessions not filtered!";
CheckLastOrderType33();
LimitOpenOrders28();
CheckLastOrderType35();
}
}
}
void CloseOrderIf21()
{
int POS=0;
bool boolTerm=false;
dblProfit=0;
RefreshRates();
while(boolTerm==false)
{
if(OrderSelect(POS,SELECT_BY_POS))
{
if(OrderMagicNumber()==Magic) dblProfit=dblProfit+OrderProfit();
POS++;
}
else
boolTerm=true;
}
if ((!DynamicProfit&&dblProfit>= Profit())||(dblProfit<=LossStopOut&&LossStopOutOn==true)||CloseAllTrades==true)
{
CloseOrder(1);
CloseOrder(0);
}
if (DynamicProfit)
{
while(dblProfit-Profit()>DynamicProfitStep&&dblProfit-TrailingProfit[BasketTrailing]>DynamicProfitStep)TrailingProfit[BasketTrailing]=TrailingProfit[BasketTrailing]+DynamicProfitStep;
if(dblProfit<TrailingProfit[BasketTrailing]&&dblProfit>=Profit())
{
CloseOrder(1);
CloseOrder(0);
TrailingProfit[BasketTrailing]=0;
}
if(ATRProfitMode&&ATRProfitTrigger&&dblProfit>=Profit())
{
CloseOrder(1);
CloseOrder(0);
TrailingProfit[BasketTrailing]=0;
}
}
return(0);
}
void LimitOpenOrders28()
{
int count = 0;
int z = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == Magic)
{
count++;
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
if ((count < OpenOrdersLimit)||(OpenOrdersLimit==0))
{
SendOrder();
}
if ((!IfOrderDoesNotExist(1))&&(!IfOrderDoesNotExist(0)))
{
count = 0;
OrderCounter = count;
}
else
{
if (DeletePOMode == false)
{
z = 2;
}
else
{
z = 1;
}
count = count - z;
OrderCounter = count;
}
}
bool ReadATR()
{
Zone1 = "Closed!";
Zone2 = "Closed!";
Zone3 = "Closed!";
Zone4 = "Closed!";
Zone5 = "Closed!";
double point=Point;
if (point==0.00001) point=0.0001;
else if (point==0.001) point=0.01;
ATRPips =MathRound(iATR(Symbol(),PERIOD_M15,ATR_Period1,ATRShift1) / point);
ATRPrePips1 =MathRound(iATR(Symbol(),PERIOD_M15,ATR_Period2,ATRShift2) / point);
ATRPrePips2 =MathRound(iATR(Symbol(),PERIOD_M15,ATR_Period3,ATRShift3) / point);
if(ATROn)
{
if (FilterMod == true)
{
FilterMods = "Modified!";
if (ATRPrePips1 >= ATRDnLimit1 && ATRPrePips1 <= ATRUpLimit1
&& ATRPrePips2 >= ATRDnLimit1 && ATRPrePips2 <= ATRUpLimit1
&& ATRPips >= ATRDnLimit1 && ATRPips <= ATRUpLimit1)
{
ATR = "ATR not filtering!";
Zone1 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit2 && ATRPrePips1 <= ATRUpLimit2
&& ATRPrePips2 >= ATRDnLimit2 && ATRPrePips2 <= ATRUpLimit2
&& ATRPips >= ATRDnLimit2 && ATRPips <= ATRUpLimit2)
{
ATR = "ATR not filtering!";
Zone2 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit3 && ATRPrePips1 <= ATRUpLimit3
&& ATRPrePips2 >= ATRDnLimit3 && ATRPrePips2 <= ATRUpLimit3
&& ATRPips >= ATRDnLimit3 && ATRPips <= ATRUpLimit3)
{
ATR = "ATR not filtering!";
Zone3 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit2 && ATRPrePips1 <= ATRUpLimit2
&& ATRPrePips2 >= ATRDnLimit2 && ATRPrePips2 <= ATRUpLimit2
&& ATRPips >= ATRDnLimit1 && ATRPips <= ATRUpLimit1)
{
ATR = "ATR not filtering!";
Zone4 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit1 && ATRPrePips1 <= ATRUpLimit1
&& ATRPrePips2 >= ATRDnLimit2 && ATRPrePips2 <= ATRUpLimit2
&& ATRPips >= ATRDnLimit1 && ATRPips <= ATRUpLimit1)
{
ATR = "ATR not filtering!";
Zone5 = "Open!";
return(1);
}
}
else
{
FilterMods = "Standard!";
if (ATRPrePips1 >= ATRDnLimit1 && ATRPrePips1 <= ATRUpLimit1 && ATRPrePips2 >= ATRDnLimit1 && ATRPrePips2 <= ATRUpLimit1 && ATRPips >= ATRDnLimit1 && ATRPips <= ATRUpLimit1 )
{
ATR = "ATR not filtering!";
Zone1 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit2 && ATRPrePips1 <= ATRUpLimit2 && ATRPrePips2 >= ATRDnLimit2 && ATRPrePips2 <= ATRUpLimit2 && ATRPips >= ATRDnLimit2 && ATRPips <= ATRUpLimit2 )
{
ATR = "ATR not filtering!";
Zone2 = "Open!";
return(1);
}
if (ATRPrePips1 >= ATRDnLimit3 && ATRPrePips1 <= ATRUpLimit3 && ATRPrePips2 >= ATRDnLimit3 && ATRPrePips2 <= ATRUpLimit3 && ATRPips >= ATRDnLimit3 && ATRPips <= ATRUpLimit3 )
{
ATR = "ATR not filtering!";
Zone3 = "Open!";
return(1);
}
}
ATR = "ATR filtering!";
return(0);
}
if (!ATROn)
{
ATR = "ATR Filter off!";
FilterMods = "ATR Filter off!";
return(1);
}
}
bool Filter()
{
ATRProfitTrigger=false;
if ((ReadATR()&&News()&&CCI()&&Momentum()&&RSI()&&MA()&&Envelopes())
||(IfOrderDoesNotExist(1))||(IfOrderDoesNotExist(0)))
{
Filter = "Not Filtering!";
if (!ReadATR()&&((IfOrderDoesNotExist(1))||(IfOrderDoesNotExist(0))))
{
Filter = "Filter Overide!";
ATRProfitTrigger=true;
}
if ((!News()||!CCI()||!Momentum()||!RSI()||!MA()||!Envelopes())&&(IfOrderDoesNotExist(1)||IfOrderDoesNotExist(0)))
{
Filter = "Filter Overide!";
ATRProfitTrigger=true;
}
return(1);
}
else
{
Filter = "Filtering!";
if (DeletePOATR)
{
DeletePendingOrder(2);
DeletePendingOrder(3);
}
if (DeleteOrderATR)
{
CloseOrder(1);
CloseOrder(0);
}
return(0);
}
}
void SendOrder()
{
if(!ReverseOrder)
{
if(IfOrderDoesNotExist(2)&&IfOrderDoesNotExist(1)&&DeletePOMode)DeletePendingOrder(2);
if(IfOrderDoesNotExist(3)&&IfOrderDoesNotExist(0)&&DeletePOMode)DeletePendingOrder(3);
if(!IfOrderDoesNotExist(2)&&!IfOrderDoesNotExist(1)&&Filter())PendingOrder(2);
if(!IfOrderDoesNotExist(3)&&!IfOrderDoesNotExist(0)&&Filter())PendingOrder(3);
}
else
{
if(IfOrderDoesNotExist(2)&&IfOrderDoesNotExist(1)&&DeletePOMode&&OrderCounter<OpenOrderTreshold)DeletePendingOrder(2);
if(IfOrderDoesNotExist(3)&&IfOrderDoesNotExist(0)&&DeletePOMode&&OrderCounter<OpenOrderTreshold)DeletePendingOrder(3);
if(!IfOrderDoesNotExist(2)&&!IfOrderDoesNotExist(1)&&Filter()&&OrderCounter<OpenOrderTreshold)PendingOrder(2);
if(!IfOrderDoesNotExist(3)&&!IfOrderDoesNotExist(0)&&Filter()&&OrderCounter<OpenOrderTreshold)PendingOrder(3);
if(IfOrderDoesNotExist(0)&&OrderCounter<OpenOrderTreshold)
{
BuyBasket=true;
SellBasket=false;
}
if(IfOrderDoesNotExist(1)&&OrderCounter<OpenOrderTreshold)
{
SellBasket=true;
BuyBasket=false;
}
if(!IfOrderDoesNotExist(2)&&BuyBasket&&!SellBasket)
{
if(ReversalContBasket)
if(OrderCounter>=OpenOrderTreshold)PendingOrder(2);
if(OrderCounter>=OpenOrderTreshold)MarketOrder(1);
}
if(!IfOrderDoesNotExist(3)&&!BuyBasket&&SellBasket)
{
if(ReversalContBasket)
if(OrderCounter>=OpenOrderTreshold)PendingOrder(3);
if(OrderCounter>=OpenOrderTreshold)MarketOrder(0);
}
}
}
void MarketOrder(int Mode)
{
double price;
color ColorSet;
double SL;
double TP;
double MarketLot=(LotSize()/ReverseOrderLotDiv);
int SlippageOrder=Slippage*PipValue;
if(Mode==1)
{
price = NormalizeDouble(Bid, NDigits);
SL = price + SingleOrderSL*PipValue*Point;
TP = price - SingleOrderTP*PipValue*Point;
ColorSet=Red;
}
if(Mode==0)
{
price = NormalizeDouble(Ask, NDigits);
SL = price - SingleOrderSL*PipValue*Point;
TP = price + SingleOrderTP*PipValue*Point;
ColorSet=Blue;
}
if (SingleOrderSL == 0) SL = 0;
if (SingleOrderTP == 0) TP = 0;
while (!IsTradeAllowed()) Sleep(100);
int ticket = OrderSend(Symbol(), Mode, MarketLot, price, SlippageOrder, SL, TP, EAName, Magic, 0, ColorSet);
Print("MarketLot: "+MarketLot);
if (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
bool IfOrderDoesNotExist(int Type)
{
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == Type && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
return(1);
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
}
void PendingOrder(int Mode)
{
int expire = TimeCurrent() + 60 * 0;
double price;
color ColorSet;
double PriceType;
int CallLastOrder;
double SL;
double TP;
int SlippageOrder=Slippage*PipValue;
if(Mode==2)
{
ColorSet=Blue;
PriceType=Ask;
CallLastOrder=0;
}
if(Mode==3)
{
ColorSet=Red;
PriceType=Bid;
CallLastOrder=1;
}
if(Mode==3)
{
if(!ADVOffsetMode)price = NormalizeDouble(PriceType, NDigits) - Step()*PipValue*Point;
if(ADVOffsetMode&&!IfOrderDoesNotExist(CallLastOrder))price = NormalizeDouble(PriceType, NDigits) - Step()*PipValue*Point;
if(ADVOffsetMode&&IfOrderDoesNotExist(CallLastOrder))price = NormalizeDouble(GetLastOrderPrice(CallLastOrder), NDigits) - Step()*PipValue*Point;
SL = price + SingleOrderSL*PipValue*Point;
TP = price - SingleOrderTP*PipValue*Point;
}
if(Mode==2)
{
if(!ADVOffsetMode)price = NormalizeDouble(PriceType, NDigits) + Step()*PipValue*Point;
if(ADVOffsetMode&&!IfOrderDoesNotExist(CallLastOrder))price = NormalizeDouПоказано первые 50% кода (символов: 44860)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.