$$$ Westernpips Newest PRO 3.7 Exclusive Classic
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «$$$_westernpips_newest_pro_3_7_exclusive_classic1_2.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Этот файл представляет собой торговый советник для MetaTrader 4, написанный на языке MQL4. Советник предназначен для автоматической торговли на финансовых рынках и использует внешний источник быстрых котировок через DLL-библиотеку, подключаемую к одному из четырёх провайдеров данных: Saxo, Lmax, CQG или Rithmic. Основная идея работы заключается в сравнении цен, получаемых от внешнего источника, с ценами брокера MetaTrader 4, и принятии торговых решений на основе возникающей разницы.
Советник обрабатывает событие OnTick, то есть реагирует на поступление новых котировок. Он открывает и закрывает позиции, поддерживает работу с отложенными ордерами, управляет стоп-лоссами и тейк-профитами, а также реализует функции трейлинг-стопа, включая виртуальный. В коде присутствуют механизмы контроля рисков: ограничение просадки и прибыли по депозиту, остановка торговли при неблагоприятных условиях, проверка спреда, учёт комиссии и контроль проскальзывания. Также предусмотрены настройки времени торговли и информационная панель на графике.
Советник активно использует торговые функции MetaTrader 4 (OrderSend, OrderClose, OrderModify) и работает с ордерами, позициями и историей сделок. Для получения внешних котировок применяется импорт функций из DLL, что требует разрешения на вызов DLL в настройках терминала. Советник не является индикатором или скриптом, это полноценный эксперт, предназначенный для автоматической торговли.
Настройки программы
| Настройка | Описание |
|---|---|
| WesternpipsSet1 | Группа: быстрый источник данных — Заголовок группы настроек быстрого источника данных. |
| ModeOfQuotes | Режим котировок — Выбор источника быстрых котировок: 0 — Saxo, 1 — Lmax, 2 — CQG, 3 — Rithmic. |
| UseSymbCode | Использовать код символа — Включает использование заданного кода символа вместо символа графика. |
| SymbCode | Код символа — Код символа для запроса котировок из внешнего источника. |
| SymbReturn | Инвертировать символ — Включает инвертирование получаемых котировок (1/цена). |
| AvtoShiftBid | Автосмещение Bid — Включает автоматический расчёт смещения цен Bid на основе накопленной статистики. |
| ShiftAsk | Смещение Ask — Величина смещения цены Ask в пунктах при ручной настройке. |
| ShiftBid | Смещение Bid — Величина смещения цены Bid в пунктах при ручной настройке. |
| WesternpipsSet2 | Группа: настройки открытия ордеров — Заголовок группы настроек открытия ордеров. |
| MinimumLevel | Минимальный уровень — Базовый минимальный уровень в пунктах для принятия торговых решений. |
| MinGapForOpen | Минимальный разрыв для открытия — Минимальная разница в пунктах между ценами для открытия позиции. |
| UseDynamicMinimumLevel | Использовать динамический минимальный уровень — Включает динамический расчёт минимального уровня на основе спреда. |
| DynamicMinimumLevelSpreadCoefficient | Коэффициент динамического минимального уровня — Коэффициент, используемый при динамическом расчёте минимального уровня на основе спреда. |
| SignalMode | Режим сигналов — Режим формирования сигналов: 0 или 1, влияет на используемые цены. |
| AvtoSettings | Автоматические настройки — Включает автоматический подбор настроек, влияющих на расчёт уровней и спреда. |
| AvarageSpreadUse | Использовать усреднённый спред — Включает использование усреднённого значения спреда вместо текущего. |
| TradeByPendingOrders | Торговля отложенными ордерами — Включает торговлю с использованием отложенных ордеров вместо рыночных. |
| DistanceForPendingOrdersInPips | Расстояние для отложенных ордеров (пункты) — Расстояние в пунктах от текущей цены для выставления отложенных ордеров. |
| PendingOrdersLifeTime | Время жизни отложенных ордеров — Время жизни отложенных ордеров в секундах до их автоматического удаления. |
| OrdersOpenIntervalMs | Интервал открытия ордеров (мс) — Минимальный интервал в миллисекундах между открытием ордеров. |
| MaxAttemptsForOpenOrder | Максимум попыток открытия — Максимальное количество попыток открытия ордера при неудаче. |
| NTrades | Количество сделок — Максимальное количество одновременно открытых ордеров. |
| Magic | Магическое число — Уникальный идентификатор (магическое число) для ордеров советника. |
| ShowCommentsInOrder | Показывать комментарии в ордере — Включает добавление комментариев к торговым ордерам. |
| EAComment | Комментарий советника — Пользовательский комментарий, добавляемый к торговым ордерам. |
| TradeSide | Направление торговли — Разрешение направления торговли: 0 — оба, 1 — только покупка, 2 — только продажа. |
| WesternpipsSet3 | Группа: настройки закрытия ордеров — Заголовок группы настроек закрытия ордеров. |
| FixTP | Фиксированный тейк-профит — Размер фиксированного тейк-профита в пунктах. |
| FixSL | Фиксированный стоп-лосс — Размер фиксированного стоп-лосса в пунктах. |
| RealFixTP | Реальный фиксированный TP — Включает расчёт фиксированного тейк-профита на основе реального проскальзывания. |
| RealFixSL | Реальный фиксированный SL — Включает расчёт фиксированного стоп-лосса на основе реального проскальзывания. |
| UseFixedStopLossAndTakeProfit | Использовать фиксированные SL и TP — Включает установку фиксированных стоп-лосса и тейк-профита для ордеров. |
| StopLoss | Стоп-лосс — Размер стоп-лосса в пунктах для устанавливаемых защитных уровней. |
| TakeProfit | Тейк-профит — Размер тейк-профита в пунктах для устанавливаемых защитных уровней. |
| ShirtStopLoss | Стоп-лосс по спреду — Включает использование стоп-лосса, привязанного к текущему спреду. |
| ShirtStopLossK | Коэффициент стоп-лосса по спреду — Коэффициент для расчёта стоп-лосса на основе спреда. |
| CloseWhenPriceEqual | Закрытие при равенстве цены — Включает закрытие позиции при достижении ценой уровня, сохранённого в комментарии ордера. |
| CloseOrderDelay | Задержка закрытия ордера — Задержка в секундах перед возможностью закрытия ордера после его открытия. |
| CloseTimer | Таймер закрытия — Время в секундах, по истечении которого открытая позиция будет закрыта принудительно. |
| DisableFixTP | Отключить фиксированный TP — Отключает автоматическое закрытие по фиксированному тейк-профиту. |
| DisableFixSL | Отключить фиксированный SL — Отключает автоматическое закрытие по фиксированному стоп-лоссу. |
| MaxAttemptsForCloseOrder | Максимум попыток закрытия — Максимальное количество попыток закрытия ордера при неудаче. |
| WesternpipsSet4 | Группа: управление рисками — Заголовок группы управления рисками. |
| RiskPercent | Процент риска — Процент риска от депозита для автоматического расчёта размера лота. |
| Lots | Лот — Базовый размер торгового лота. |
| max_Lots | Максимальный лот — Максимально допустимый размер торгового лота. |
| LotsCount | База расчёта лота — Выбор базы для расчёта лота при риск-менеджменте: 0 — баланс, 1 — средства (equity). |
| LotsSignalPower | Усиление лота по сигналу — Включает увеличение лота в зависимости от силы сигнала. |
| MaxLossOnDepositInPersent | Макс. убыток от депозита (%) — Максимально допустимый убыток в процентах от баланса, при достижении которого торговля останавливается. |
| MaxProfitOnDepositInPersent | Макс. прибыль от депозита (%) — Максимально допустимая прибыль в процентах от баланса, при достижении которой торговля останавливается. |
| MaxLossOnDepositInUsd | Макс. убыток от депозита (валюта) — Максимально допустимый убыток в валюте депозита, при достижении которого торговля останавливается. |
| StopTradingIfUnprofitableOrders | Остановка при убыточных ордерах — Останавливает торговлю после заданного количества убыточных сделок подряд. |
| MaxUnprofitableOrders | Макс. убыточных ордеров — Количество убыточных сделок подряд, после которого торговля останавливается. |
| WesternpipsSet5 | Группа: контроль проскальзывания — Заголовок группы контроля проскальзывания. |
| OrderOpenSlippage | Проскальзывание при открытии — Допустимое проскальзывание в пунктах при открытии ордера. |
| OrderCloseSlippage | Проскальзывание при закрытии — Допустимое проскальзывание в пунктах при закрытии ордера. |
| StopTradingSlippage | Остановка по проскальзыванию — Останавливает торговлю при неблагоприятном проскальзывании при открытии. |
| StopTradingIfMaxSlippage | Остановка при макс. проскальзывании — Останавливает торговлю при превышении максимально допустимого проскальзывания. |
| MaxSlippage | Макс. проскальзывание — Максимально допустимое проскальзывание в пунктах, при превышении которого торговля может быть остановлена. |
| UseDynamicSlippage | Использовать динамическое проскальзывание — Включает динамический расчёт допустимого проскальзывания. |
| DynamicSlippageCoefficient | Коэффициент динамического проскальзывания — Коэффициент для динамического расчёта допустимого проскальзывания. |
| WesternpipsSet6 | Группа: контроль исполнения — Заголовок группы контроля времени исполнения. |
| UseMaxOpenOrderExecutionTime | Использовать макс. время открытия — Включает контроль максимального времени выполнения открытия ордера. |
| MaxOpenOrderExecutionTime | Макс. время открытия ордера (мс) — Максимально допустимое время выполнения операции открытия ордера в миллисекундах. |
| UseMaxCloseOrderExecutionTime | Использовать макс. время закрытия — Включает контроль максимального времени выполнения закрытия ордера. |
| MaxCloseOrderExecutionTime | Макс. время закрытия ордера (мс) — Максимально допустимое время выполнения операции закрытия ордера в миллисекундах. |
| WesternpipsSet7 | Группа: контроль спреда — Заголовок группы инструментов контроля спреда. |
| MinSpreadOpenUse | Использовать мин. спред открытия — Включает проверку минимального спреда при открытии позиций. |
| MinSpreadOpen | Мин. спред для открытия — Минимально допустимый спред для открытия позиций. |
| MaxSpreadOpenUse | Использовать макс. спред открытия — Включает проверку максимального спреда при открытии позиций. |
| MaxSpreadOpen | Макс. спред для открытия — Максимально допустимый спред для открытия позиций. |
| MinSpreadCloseUse | Использовать мин. спред закрытия — Включает проверку минимального спреда при закрытии позиций. |
| MinSpreadClose | Мин. спред для закрытия — Минимально допустимый спред для закрытия позиций. |
| MaxSpreadCloseUse | Использовать макс. спред закрытия — Включает проверку максимального спреда при закрытии позиций. |
| MaxSpreadClose | Макс. спред для закрытия — Максимально допустимый спред для закрытия позиций. |
| WesternpipsSet8 | Группа: настройки комиссии — Заголовок группы настроек комиссии. |
| OrderCommissionCheck | Проверка комиссии ордера — Включает автоматическую проверку комиссии брокера путём тестовой сделки. |
| ManualComission | Ручная комиссия — Включает ручное задание комиссии вместо автоматического определения. |
| ComissionInPips | Комиссия в пунктах — Значение комиссии в пунктах, используемое при ручном задании комиссии. |
| WesternpipsSet9 | Группа: настройки трейлинг-стопа — Заголовок группы настроек трейлинг-стопа. |
| UseTrailingStop | Использовать трейлинг-стоп — Включает обычный трейлинг-стоп. |
| TrailingStop | Трейлинг-стоп — Размер трейлинг-стопа в пунктах. |
| TrailingStep | Шаг трейлинг-стопа — Шаг трейлинг-стопа в пунктах. |
| UseVirtualTrailingStop | Использовать виртуальный трейлинг-стоп — Включает виртуальный трейлинг-стоп, не выставляющий реальные уровни. |
| VirtualTrailingStop | Виртуальный трейлинг-стоп — Размер виртуального трейлинг-стопа в пунктах. |
| VirtualTrailingStep | Шаг виртуального трейлинг-стопа — Шаг виртуального трейлинг-стопа в пунктах. |
| WesternpipsSet10 | Группа: дополнительные настройки — Заголовок группы дополнительных настроек. |
| ShowGraf | Показывать графическую панель — Включает отображение информационной панели на графике. |
| ShowPriceLabel | Показывать ценовые метки — Включает отображение ценовых меток на графике при появлении сигналов. |
| ShowAsk | Показывать Ask — Показывает линию Ask от внешнего источника котировок на графике. |
| ShowLog | Показывать лог — Включает вывод подробных сообщений о работе советника в журнал. |
| SoundSignal | Звуковой сигнал — Включает звуковое уведомление при открытии и закрытии ордеров. |
| UseTerminalSleepInMilliseconds | Использовать задержку терминала — Включает использование задержки в цикле обработки тиков. |
| TerminalSleepInMilliseconds | Задержка терминала (мс) — Время задержки в миллисекундах внутри цикла обработки тиков. |
| WesternpipsSet11 | Группа: настройки времени торговли — Заголовок группы настроек времени торговли. |
| TimeCount | Источник времени — Выбор источника времени: 0 — время сервера MT4, 1 — локальное время ПК, 2 — GMT. |
| UseTimer | Использовать таймер — Включает ограничение торговли по времени. |
| StartHour | Час начала — Час начала торговли при использовании таймера. |
| StartMinutes | Минуты начала — Минуты начала торговли при использовании таймера. |
| StartSeconds | Секунды начала — Секунды начала торговли при использовании таймера. |
Поиск по коду файла
#property strict
string g_expert_ver = "Newest PRO 3.7 Exclusive Classic";
#property description "Professional Forex Expert Advisor Newest PRO 3.7 Exclusive Classic"
#property description "Newest PRO 3.7 Exclusive Classic Author and developer:"
#property description "SERGEY & WESTERNPIPS GROUP"
#property description "Mail to: w*********s*@gmail.com"
#property description "Skype to: westernpips.com"
#property description "All Rights Reserved by "
#import "Newest_PRO_3.7_Exclusive.dll"
void getRatesSaxo(uchar & _rateCode[], double&, double&);
void getRatesLmax(uchar & _rateCode[], double&, double&);
void getRatesRithmic(uchar & _rateCode[], double&, double&);
void getRatesCQG(uchar & _rateCode[], double&, double&);
#import
#define OF_READWRITE 2
#import "kernel32.dll"
int _lcreat (uchar& [], int );
int _lwrite (int handle, uchar& [], int bytes);
int _lclose (int handle);
int CreateDirectoryA(uchar& [], int& []);
#import
extern string WesternpipsSet1="<<< FAST DATA FEED OPTIONS >>>";
extern string WesternpipsSet1_1="0-Saxo; 1-Lmax; 2-CQG; 3-Rithmic;";
extern int ModeOfQuotes=3;
extern bool UseSymbCode = false;
extern string SymbCode="FDAX0616";
extern bool SymbReturn = false;
extern bool AvtoShiftBid = true;
extern double ShiftAsk = 0;
extern double ShiftBid = 0;
extern string WesternpipsSet2="<<< OPEN ORDERS SETTINGS >>>";
extern double MinimumLevel = 1;
extern double MinGapForOpen = 0;
extern bool UseDynamicMinimumLevel = false;
extern double DynamicMinimumLevelSpreadCoefficient = 0.7;
extern int SignalMode=1;
extern bool AvtoSettings = true;
extern bool AvarageSpreadUse = true;
extern bool TradeByPendingOrders = true;
extern double DistanceForPendingOrdersInPips=0;
extern int PendingOrdersLifeTime=5;
extern int OrdersOpenIntervalMs = 0;
extern int MaxAttemptsForOpenOrder = 3;
extern int NTrades = 3;
extern int Magic=0;
extern bool ShowCommentsInOrder=true;
extern string EAComment="";
extern string TradeSideSet="0-Both;1-Buy;2-Sell";
extern int TradeSide=0;
extern string WesternpipsSet3="<<< CLOSE ORDERS SETTINGS >>>";
extern double FixTP =0.1;
extern double FixSL = 1;
extern bool RealFixTP = false;
extern bool RealFixSL = false;
extern bool UseFixedStopLossAndTakeProfit = true;
extern double StopLoss = 10;
extern double TakeProfit = 100;
input bool ShirtStopLoss = false;
input double ShirtStopLossK = 2;
extern bool CloseWhenPriceEqual = false;
extern int CloseOrderDelay = 0;
extern int CloseTimer = 0;
extern bool DisableFixTP=false;
extern bool DisableFixSL=false;
extern int MaxAttemptsForCloseOrder = 3;
extern string WesternpipsSet4="<<< RISK MANAGMENT >>>";
extern double RiskPercent = 0;
extern double Lots=0.01;
extern double max_Lots=9;
extern string LotsCountSet="Lots Count: 0-Balanse; 1-Equity";
extern int LotsCount = 0;
extern bool LotsSignalPower = false;
extern double MaxLossOnDepositInPersent=10;
extern double MaxProfitOnDepositInPersent=0;
extern double MaxLossOnDepositInUsd = 0;
extern bool StopTradingIfUnprofitableOrders = false;
extern int MaxUnprofitableOrders = 3;
extern string WesternpipsSet5="<<< CONTROL SLIPPAGE PLUG-IN >>>";
input int OrderOpenSlippage = 0;
input int OrderCloseSlippage = 0;
extern bool StopTradingSlippage=false;
extern bool StopTradingIfMaxSlippage=false;
extern int MaxSlippage=100;
extern bool UseDynamicSlippage = false;
extern double DynamicSlippageCoefficient = 1.2;
extern string WesternpipsSet6="<<< CONTROL EXECUTION PLUG-IN >>>";
extern bool UseMaxOpenOrderExecutionTime=false;
extern int MaxOpenOrderExecutionTime=1000;
extern bool UseMaxCloseOrderExecutionTime=false;
extern int MaxCloseOrderExecutionTime=1000;
extern string WesternpipsSet7="<<< SPREAD CONTROL TOOLS >>>";
extern bool MinSpreadOpenUse = false;
extern double MinSpreadOpen=1;
extern bool MaxSpreadOpenUse = false;
extern double MaxSpreadOpen=50;
extern bool MinSpreadCloseUse = false;
extern double MinSpreadClose=1;
extern bool MaxSpreadCloseUse = false;
extern double MaxSpreadClose=50;
extern string WesternpipsSet8="<<< COMMISSION SETTINGS >>>";
extern bool OrderCommissionCheck=false;
extern bool ManualComission=false;
extern double ComissionInPips=1;
extern string WesternpipsSet9="<<< TRAILING STOP SETTINGS >>>";
extern bool UseTrailingStop = false;
extern double TrailingStop = 1;
extern double TrailingStep = 1;
extern bool UseVirtualTrailingStop = false;
extern double VirtualTrailingStop = 1;
extern double VirtualTrailingStep = 1;
extern string WesternpipsSet10="<<< ADDITIONAL SETTINGS >>>";
extern bool ShowGraf=true;
extern bool ShowPriceLabel = false;
extern bool ShowAsk = false;
extern bool ShowLog=true;
extern bool SoundSignal = false;
extern bool UseTerminalSleepInMilliseconds=true;
extern int TerminalSleepInMilliseconds=20;
extern string WesternpipsSet11="<<< TIME OF TRADING SETTINGS >>>";
extern string TimeSet="0-Mt4ServerTime;1-LocalPCTime;2-GMT";
extern int TimeCount = 1;
extern bool UseTimer = false;
extern int StartHour = 10;
extern int StartMinutes = 41;
extern int StartSeconds = 00;
extern int StopHour = 10;
extern int StopMinutes = 42;
extern int StopSeconds = 00;
string lmaxtexta="";
int traltime=0;
int traltime2=0;
double BuyClosePrice=0;
double SellClosePrice=0;
color ColorQuotes;
string QText="";
double LastCloseSlippage=0;
double LastGap=0;
double LastOpenSlippage=0;
int LastCloseTime=0;
int LastOpenTime=0;
double PriceCloseSell=0;
int CloseTicketSell=0;
double CloseSellPr=0;
double CloseSellSlippage=0;
double PriceCloseBuy=0;
int CloseTicket=0;
double CloseBuyPr=0;
double CloseBuySlippage=0;
int TimeEnd=0;
int MagicTest=0;
int cnt=0;
double SymbolComissionInPips=0;
double averageAskSum = 0;
double averageBidSum = 0;
double averageAskCount = 0;
double averageBidCount = 0;
double averageSpreadSum = 0;
double averageSpreadCount = 0;
double LmaxAsk=0;
double LmaxBid=0;
double LmaxGapAsk=0;
double LmaxGapBid=0;
bool NewLmaxAsk=0;
bool NewLmaxBid=0;
double LmaxAskOld=0;
double LmaxBidOld=0;
double Mt4Ask=0;
double Mt4Bid=0;
double Mt4GapAsk=0;
double Mt4GapBid=0;
bool NewMt4Ask=0;
bool NewMt4Bid=0;
double Mt4AskOld=0;
double Mt4BidOld=0;
double GapBuy=0;
double GapSell=0;
bool tradeLmax=true;
double SaxoAsk=0;
double SaxoBid=0;
double pp=0;
double margin=0;
double spread=0;
double spread2=0;
double dLot=0;
double LOTSTEP=0;
double MINLOT=0;
double MAXLOT=0;
double bid_pr=0;
double ask_pr=0;
double fx=0;
double StopLoss2=0;
double TakeProfit2=0;
double StepTP2=0;
double FixSL2=0;
double FixTP2=0;
double minshag=0;
int rez=0;
int sig=0;
int sig_raz=0;
int ticket=0;
double MinLev=0;
double DepositStop=0;
double DepositStopIfProfit=0;
double TradeLot=0;
double SpreadK=1;
string comm="";
double ShiftBidBuy=0;
double ShiftBidSell=0;
string LastErrorText="";
bool SignalBuy=false;
bool SignalSell=false;
string OrderCommBuy="";
string OrderCommSell="";
double OpenBuyPrice=0;
double SlippageBuy=0;
double OpenSellPrice=0;
double SlippageSell=0;
int Bar=0;
int BarsCount=0;
int x=0;
bool StopTrading = false;
double DistancePending=0;
string text1 ="......";
string text2 ="......";
string text3 ="......";
string text4 ="......";
color col1 = White;
color col2 = White;
color col3 = White;
color col4 = White;
datetime LastOrderTime = 0;
double PriceCloseSellTral=0;
double PriceCloseBuyTral=0;
bool StopTradindSlip = false;
double PrCloseBuy =0 ;
double PrCloseSell=0 ;
bool buy111=0;
bool sell111=0;
int step1=0;
int step2=0;
int step1old=0;
int step2old=0;
int ReadCodeStep=0;
int ReadCodeTime=0;
int ReadCodeTimeEnd=0;
int ReadCodeTimeSumm=0;
int AvReadCodeTime =0;
bool NewTickDel = true;
double Eq = 0;
string Instrument="";
int att=0;
int LastLmaxTickTime=0;
int LmaxTickTime=0;
int LastMt4TickTime=0;
int Mt4TickTime=0;
double LmaxBidCount =0;
bool ShowPanel=false;
string comm11="";
int LactCheckTime=0;
int StepCheck=0;
int CheckNextTime=0;
int OldTickCount=0;
bool ShowErrorPanel=false;
int t2=0;
double OrdOpenSlippage=0;
string Commento="";
int ticketSell=0;
int ticketBuy=0;
int t1=0;
int t3=0;
double PendingOrderOpenPriseBuy=0;
double PendingOrderOpenPriseSell=0;
bool SignalFromMt4 = false;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
Comment("");
ObjectsDeleteAll();
}
void OnTick()
{
// код доступен только после оплаты
}
if(IsWorkingHours()==false&&UseTimer){LastErrorText=""; tradeLmax=false; LastErrorText=LastErrorText+"Trade Was Stopped, Not working hours! Can change UseTimer in EA settings and start EA again!"; StopTrading = true;}
if(IsWorkingHours()==true&&UseTimer){tradeLmax=true; StopTrading = false;}
if (StopTrading == true)
{
Comment("");
ObjectsDeleteAll();
ShowErrorsPanel();
}
while(IsStopped()==false && StopTrading == false)
{
LastErrorText="";
ReadCodeTime=GetTickCount();
comm="";
if (StopTrading == false) {tradeLmax=true;}
SignalBuy=false;
SignalSell=false;
if(AccountInfoDouble(ACCOUNT_BALANCE)<=DepositStop&&MaxLossOnDepositInPersent>0) {tradeLmax=false; LastErrorText=LastErrorText+"Trade Was Stopped, Big Drawdown > " +MaxLossOnDepositInPersent+" %!" +" Can change RiskDeposit in EA settings and start EA again!" ; StopTrading = true;}
if(AccountInfoDouble(ACCOUNT_BALANCE)>=DepositStopIfProfit&&MaxProfitOnDepositInPersent>0){tradeLmax=false;LastErrorText=LastErrorText+"Trade Was Stopped, Big Profit > "+MaxProfitOnDepositInPersent+" %!"+" Can change ProfitInDay in EA settings and start EA again!"; StopTrading = true;}
if (MarketInfo(Symbol(),MODE_SPREAD)<MinSpreadOpen&&MinSpreadOpenUse==true) {tradeLmax=false; LastErrorText=LastErrorText+"Trade is disabled, Spread = "+DoubleToString(NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD),2),2)+" pips is low than MinSpreadOpen = " +DoubleToString(MinSpreadOpen,2)+" pips!"+" Can change MinSpreadOpen in EA settings and start EA again!";}
if (MarketInfo(Symbol(),MODE_SPREAD)>MaxSpreadOpen&&MaxSpreadOpenUse==true) {tradeLmax=false; LastErrorText=LastErrorText+"Trade is disabled, Spread = "+DoubleToString(NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD),2),2)+" pips is big than MaxSpreadOpen = " +DoubleToString(MaxSpreadOpen,2)+" pips!"+" Can change MaxSpreadOpen in EA settings and start EA again!";}
if(UseMaxOpenOrderExecutionTime){if (LastOpenTime>MaxOpenOrderExecutionTime) {tradeLmax =false;LastErrorText=LastErrorText+"Trade Was Stopped, Big Open Order Execution = "+DoubleToString(LastOpenTime,0)+" ms!" +" Can change MaxOpenOrderExecutionTime in EA settings and start EA again!"; StopTrading = true; }}
if(UseMaxCloseOrderExecutionTime){if (LastCloseTime>MaxCloseOrderExecutionTime) {tradeLmax =false; LastErrorText=LastErrorText+"Trade Was Stopped, Big Close Order Execution = "+DoubleToString(LastCloseTime,0)+" ms!" +" Can change MaxCloseOrderExecutionTime in EA settings and start EA again!"; StopTrading = true;}}
if(StopTradingIfMaxSlippage){if(LastOpenSlippage < -MaxSlippage){tradeLmax = false;LastErrorText=LastErrorText+"Trade Was Stopped, Big Order Open Slippage = "+DoubleToString(LastOpenSlippage,0)+" pips!" +" Can change StopTradingIfMaxSlippage in EA settings and start EA again!"; StopTrading = true;}}
if(StopTradingIfMaxSlippage){if(LastCloseSlippage < -MaxSlippage){tradeLmax = false;LastErrorText=LastErrorText+"Trade Was Stopped, Big Order Close Slippage = "+DoubleToString(LastCloseSlippage,0)+" pips!" +" Can change StopTradingIfMaxSlippage in EA settings and start EA again!"; StopTrading = true;}}
if (StopTradindSlip==true) {tradeLmax = false;LastErrorText=LastErrorText+"Trade Was Stopped, Big Order Open Slippage = "+DoubleToString(LastOpenSlippage,0)+" pips!" +" Can change StopTradingSlippage in EA settings and start EA again!"; StopTrading = true;}
if(IsWorkingHours()==false&&UseTimer){tradeLmax=false; LastErrorText=LastErrorText+"Trade Was Stopped, Not working hours! Can change UseTimer in EA settings and start EA again!"; StopTrading = true;}
bool selh;
double historyprofitsell;
double historyprofitbuy;
double historyprofit=0;
int totalloss=0;
if (OrdersHistoryTotal() > 0)
{
for (int yh = 0; yh < OrdersHistoryTotal(); yh++)
{
selh=OrderSelect (yh, SELECT_BY_POS, MODE_HISTORY);
if(OrderMagicNumber()==Magic||OrderMagicNumber()==MagicTest)
{
if(OrderType()==OP_BUY||OrderType()==OP_SELL)
{
historyprofit=historyprofit+OrderProfit()+OrderCommission();
}
}
}
}
if(historyprofit < - MaxLossOnDepositInUsd && MaxLossOnDepositInUsd>0) {tradeLmax=false; GapSell=0;GapBuy=0; LastErrorText=LastErrorText+"Trade Was Stopped, Big Drawdown = "+DoubleToString(historyprofit,2)+" "+AccountCurrency()+", more than MaxLossOnDepositInUsd = "+MaxLossOnDepositInUsd+" "+AccountCurrency()+" ! Can change MaxLossOnDepositInUsd in EA settings and start EA again!"; StopTrading = true;}
if (StopTradingIfUnprofitableOrders && IsLastOrdersUnprofitable(Magic, MaxUnprofitableOrders)){tradeLmax=false; GapSell=0;GapBuy=0; LastErrorText=LastErrorText+" Trade Was Stopped, "+MaxUnprofitableOrders +" unprofitable orders in a row! Can change MaxUnprofitableOrders in EA settings and start EA again!"; StopTrading = true;}
LmaxAsk = 0;
LmaxBid = 0;
LmaxBidCount = 0;
char curr[1000];
string Instrument = StringSubstr(Symbol(),0,6);
if(ModeOfQuotes==0)
{
if(UseSymbCode==true)
{
StringToCharArray(SymbCode,curr);
getRatesSaxo(curr,LmaxAsk,LmaxBid);
}
else
{
StringToCharArray(Instrument,curr);
getRatesSaxo(curr,LmaxAsk,LmaxBid);
}
}
if(ModeOfQuotes==1)
{
if(UseSymbCode==true)
{
StringToCharArray(SymbCode,curr);
getRatesLmax(curr,LmaxAsk,LmaxBid);
}
else
{
StringToCharArray(Instrument,curr);
getRatesLmax(curr,LmaxAsk,LmaxBid);
}
}
if(ModeOfQuotes==2)
{
if(UseSymbCode==true)
{
StringToCharArray(SymbCode,curr);
getRatesCQG(curr,LmaxAsk,LmaxBid);
}
else
{
StringToCharArray(Instrument,curr);
getRatesCQG(curr,LmaxAsk,LmaxBid);
}
}
if(ModeOfQuotes==3)
{
if(UseSymbCode==true)
{
StringToCharArray(SymbCode,curr);
getRatesRithmic(curr,LmaxAsk,LmaxBid);
}
else
{
StringToCharArray(Instrument,curr);
getRatesRithmic(curr,LmaxAsk,LmaxBid);
}
}
if(SymbReturn==true)
{
LmaxAsk=1/LmaxAsk;
LmaxBid=1/LmaxBid;
}
if(SymbCode==""&&UseSymbCode==true)
{
tradeLmax=false;
LmaxAsk = 0;
LmaxBid = 0;
LastErrorText=LastErrorText+"Trade Was Stopped, SymbCode Error! Can change SymbCode to "+Symbol()+" in EA settings and start EA again!"+ "\n";
StopTrading = true;
}
if(LmaxBid==-1||LmaxBid<=0)
{
tradeLmax=false; GapBuy=0;GapSell=0; LastErrorText=LastErrorText+ "Trade is disabled, error of "+QText+" data feed connection!Please check TradeMonitor programm!";
ObjectDelete("QBid");
ObjectDelete("QText");
ObjectDelete("QAsk");
ObjectDelete("QAText");
ObjectSetText("dfsymb", "Spread: 0 ", 9, "Arial", White);
ObjectSetText("lmaxask", "Disconnected ", 9, "Arial", Red);
ObjectSetText("lmaxbid", "Disconnected ", 9, "Arial", Red);
ObjectSetString(0,"GapSell", OBJPROP_TEXT,DoubleToString(GapSell, 1));
ObjectSetString(0,"GapBuy", OBJPROP_TEXT,DoubleToString(GapBuy, 1));
}
if(LmaxAsk==-1||LmaxAsk<=0)
{
tradeLmax=false; GapBuy=0;GapSell=0;
}
pp = MarketInfo(Symbol(),MODE_POINT);
if(AvtoSettings == false)
{
if (pp == 0.001) {pp=0.01;}
if (pp == 0.00001) {pp=0.0001;}
}
Mt4Ask=MarketInfo(Symbol(),MODE_ASK);
Mt4Bid=MarketInfo(Symbol(),MODE_BID);
spread2 = (NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),_Digits)-NormalizeDouble(MarketInfo(Symbol(),MODE_BID),_Digits))/pp;
if (AvarageSpreadUse==true)
{
averageSpreadSum += spread2;
averageSpreadCount ++;
spread=NormalizeDouble((averageSpreadSum /averageSpreadCount),2);
}
else {spread=spread2;}
LmaxBid=NormalizeDouble(LmaxBid,Digits);
LmaxBidCount=LmaxBid;
if(tradeLmax==true && LmaxBidOld > 0)
{
if(LmaxAskOld!=LmaxAsk)
{
if(LmaxAskOld!=0){LmaxGapAsk=(LmaxAsk-LmaxAskOld)/pp;}
LmaxAskOld=LmaxAsk;
NewLmaxAsk=true;
}
if(LmaxBidOld!=LmaxBid)
{
if(LmaxBidOld!=0){LmaxGapBid=(LmaxBid-LmaxBidOld)/pp;}
if(LastLmaxTickTime>0) {LmaxTickTime = GetTickCount() - LastLmaxTickTime;}
LastLmaxTickTime = GetTickCount();
LmaxBidOld=LmaxBid;
NewLmaxBid=true;
}
if(Mt4AskOld!=Mt4Ask)
{
if(Mt4AskOld!=0){Mt4GapAsk=(Mt4Ask-Mt4AskOld)/pp;}
Mt4AskOld=Mt4Ask;
NewMt4Ask=true;
}
if(Mt4BidOld!=Mt4Bid)
{
if(Mt4BidOld!=0){Mt4GapBid=(Mt4Bid-Mt4BidOld)/pp;}
Mt4BidOld=Mt4Bid;
NewMt4Bid=true;
if(LastMt4TickTime>0) {Mt4TickTime = GetTickCount() - LastMt4TickTime;}
LastMt4TickTime = GetTickCount();
}
if(AvtoShiftBid==false)
{
if(SignalMode==0)
{
ShiftBidBuy=ShiftAsk;
ShiftBidSell=ShiftBid;
LmaxAsk=LmaxAsk+ShiftAsk*pp;
LmaxBid=LmaxBid+ShiftBid*pp;
GapBuy=(LmaxBid-Mt4Bid)/pp;
GapSell=(LmaxBid-Mt4Bid)/pp;
}
if(SignalMode==1)
{
ShiftBidBuy=ShiftAsk;
ShiftBidSell=ShiftBid;
LmaxAsk=LmaxAsk+ShiftAsk*pp;
LmaxBid=LmaxBid+ShiftBid*pp;
GapBuy=(LmaxBid-Mt4Ask)/pp;
GapSell=(LmaxAsk-Mt4Bid)/pp;
}
}
if(AvtoShiftBid==true)
{
if(SignalMode==0)
{
averageAskSum += (LmaxBid - Mt4Bid )/pp;
averageAskCount ++;
GapBuy=(LmaxBid-Mt4Bid)/pp-(averageAskSum /averageAskCount);
averageBidSum += (LmaxBid-Mt4Bid)/pp;
averageBidCount ++;
GapSell=(LmaxBid-Mt4Bid)/pp-(averageBidSum /averageBidCount);
ShiftBidBuy=averageAskSum /averageAskCount;
ShiftBidSell=averageBidSum /averageBidCount;
LmaxAsk=LmaxAsk-ShiftBidBuy*pp;
LmaxBid=LmaxBid-ShiftBidSell*pp;
}
if(SignalMode==1)
{
averageAskSum += (LmaxBid - Mt4Ask )/pp;
averageAskCount ++;
GapBuy=(LmaxBid-Mt4Ask)/pp-(averageAskSum /averageAskCount);
averageBidSum += (LmaxAsk-Mt4Bid)/pp;
averageBidCount ++;
GapSell=(LmaxAsk-Mt4Bid)/pp-(averageBidSum /averageBidCount);
ShiftBidBuy=averageAskSum /averageAskCount;
ShiftBidSell=averageBidSum /averageBidCount;
LmaxAsk=LmaxAsk-ShiftBidBuy*pp;
LmaxBid=LmaxBid-ShiftBidSell*pp;
}
}
if (CloseWhenPriceEqual == true)
{
if(SignalMode==0)
{
BuyClosePrice=LmaxBid;
SellClosePrice=LmaxBid;
}
if(SignalMode==1)
{
BuyClosePrice=LmaxBid;
SellClosePrice=LmaxAsk;
}
}
GetLotSize();
if(LotsSignalPower)
{
if(LmaxGapBid>=(MinLev)&&NewMt4Bid==true){TradeLot=Lots+Lots;}
if(LmaxGapBid>=(MinLev)&&NewMt4Bid==false){TradeLot=Lots+Lots+Lots;}
if(LmaxGapBid>=(MinLev)&&GapBuy>= (MinLev)*2&&GapBuy<= (MinLev)*3){TradeLot=Lots+Lots;}
if(LmaxGapBid>=(MinLev)&&GapBuy>= (MinLev)*3){TradeLot=Lots+Lots+Lots;}
if(LmaxGapBid>=(MinLev)&&GapSell>= (MinLev)*2&&GapSell<= (MinLev)*3){TradeLot=Lots+Lots;}
if(LmaxGapBid>=(MinLev)&&GapSell>= (MinLev)*3){TradeLot=Lots+Lots+Lots;}
}
else
{
TradeLot=Lots;
}
}
else
{
GapBuy=0;
GapSell=0;
}
if(OrderCommissionCheck)
{
MagicTest=180987;
double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if(TotalHistoryOrder()==0&&TotalOrderTest()==0)
{
ticket=OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,0,0,"OrderComissionCheck",MagicTest,0,MediumBlue);
int select;
int close;
if (OrdersTotal() > 0)
{
for(int g=0;g<OrdersTotal();g++)
{
select=OrderSelect(g, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber() == MagicTest)
{
close=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0);
}
}
}
}
if(SymbolComissionInPips==0)
{
int select2;
for(int g2=0;g2<OrdersHistoryTotal();g2++)
{
select2=OrderSelect(g2, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol()==Symbol() && OrderMagicNumber() == MagicTest)
{
SymbolComissionInPips= MathAbs(NormalizeDouble(OrderCommission() / (OrderLots()*MarketInfo(Symbol(),MODE_TICKVALUE)),0));
SymbolComissionInPips=SymbolComissionInPips*Point/pp;
}
}
}
}
if(AvtoSettings==false){SpreadK=1;}
else{SpreadK=spread;}
if(ManualComission==true){SymbolComissionInPips=ComissionInPips;}
if(OrderCommissionCheck==false&&ManualComission==false){SymbolComissionInPips=0;}
MinLev=NormalizeDouble((MinimumLevel*SpreadK+spread),1)+SymbolComissionInPips;
if (RealFixTP ==false) {FixTP2=FixTP*SpreadK+SymbolComissionInPips; }
if (RealFixSL ==false) {FixSL2=FixSL*SpreadK+spread;}
TakeProfit2=TakeProfit*SpreadK+SymbolComissionInPips;
StopLoss2=StopLoss*SpreadK+spread;
double LmaxSpread=(LmaxAsk-LmaxBid)/pp;
if (UseDynamicMinimumLevel)
{
MinLev = MathAbs(spread - LmaxSpread)/2 + MathAbs(spread - LmaxSpread) * DynamicMinimumLevelSpreadCoefficient+SymbolComissionInPips;
if(AvtoSettings==true)
{
if (RealFixTP ==false) {FixTP2=(FixTP*MinLev+SymbolComissionInPips)-MinLev/3; }
if (RealFixSL ==false) {FixSL2=(FixSL*MinLev+spread)-MinLev/3;}
TakeProfit2=TakeProfit*MinLev+SymbolComissionInPips;
StopLoss2=StopLoss*MinLev;
}
}
if(TradeByPendingOrders)
{
if(DistanceForPendingOrdersInPips<=MarketInfo(Symbol(),MODE_STOPLEVEL)){DistancePending=MarketInfo(Symbol(),MODE_STOPLEVEL);}
else{DistancePending=DistanceForPendingOrdersInPips;}
for (int z1=0; z1<OrdersTotal(); z1++)
{
if (OrderSelect(z1, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
int ordertime = TimeCurrent()-OrderOpenTime();
if(OrderType()==OP_BUYSTOP){if( ordertime > PendingOrdersLifeTime) {OrderDelete(OrderTicket(),Green); if(ShowLog) Print("!!! Pending Order BuyStop was canceled, becouse PendingOrdersLifeTime expired. " +"PendingOrdersLifeTime = " +PendingOrdersLifeTime + " seconds");}}
if(OrderType()==OP_SELLSTOP){if(ordertime > PendingOrdersLifeTime) {OrderDelete(OrderTicket(),Red); if(ShowLog) Print("!!! Pending Order SellStop was canceled, becouse PendingOrdersLifeTime expired. " +"PendingOrdersLifeTime = " +PendingOrdersLifeTime + " seconds");}}
}
}
}
}
ticketSell=0;
ticketBuy=0;
SignalFromMt4 = false;
if (NewMt4Bid==true&&MathAbs(Mt4GapBid) >= MinLev) {SignalFromMt4 == true;}
if (NewMt4Ask==true&&MathAbs(Mt4GapAsk) >= MinLev) {SignalFromMt4 == true;}
Eq = AccountEquity();
int ordertime=0;
int pendingordertime=0;
int pendingorderticket=0;
bool stopseach=false;
if(GapBuy >= (MinLev) && NewLmaxBid==true && LmaxBidOld>0 && TotalOrder(Magic)<NTrades && tradeLmax==true && GetTickCount() - LastOrderTime > OrdersOpenIntervalMs && SignalFromMt4==false)
{
if(GapBuy > MinGapForOpen && GapBuy > spread)
{
SignalBuy=true;
if (UseDynamicSlippage)
{
if(SignalMode==0) OrdOpenSlippage = MathAbs((LmaxBid - Mt4Bid - (MathAbs(spread - LmaxSpread)/2) * DynamicSlippageCoefficient - FixTP2)/pp);
if(SignalMode==1) OrdOpenSlippage = MathAbs((LmaxBid - Mt4Ask - (MathAbs(spread - LmaxSpread)/2) * DynamicSlippageCoefficient - FixTP2)/pp);
}
else { OrdOpenSlippage = OrderOpenSlippage;}
if(ShowCommentsInOrder)
{
Commento="G"+DoubleToString(GapBuy,1)+" Ma"+DoubleToString(Mt4Ask,5)+" "+OrderCommBuy+"b"+DoubleToString(LmaxBid,5);
Commento=StringSubstr(Commento, 0, 26);
if (EAComment!="") {Commento=EAComment;}
}
else {Commento="";}
if (CloseWhenPriceEqual) {Commento=DoubleToString(BuyClosePrice,Digits);}
int Attempt = 0;
while(Attempt <= MaxAttemptsForOpenOrder && !OrderSelect(ticketBuy,SELECT_BY_TICKET,MODE_TRADES) )
{
if(TradeSide==0||TradeSide==1)
{
if(TradeByPendingOrders)
{
PendingOrderOpenPriseBuy=MarketInfo(Symbol(),MODE_ASK)+DistancePending*pp;
t1=GetTickCount();
ticketBuy=OrderSend(Symbol(),OP_BUYSTOP,TradeLot,MarketInfo(Symbol(),MODE_ASK)+DistancePending*pp,0,0,0,Commento,Magic,0,MediumBlue);
}
else
{
t1=GetTickCount();
ticketBuy=OrderSend(Symbol(),OP_BUY,TradeLot,MarketInfo(Symbol(),MODE_ASK),MathAbs(OrdOpenSlippage),0,0,Commento,Magic,0,MediumBlue);
}
}
if(!OrderSelect(ticketBuy,SELECT_BY_TICKET,MODE_TRADES))
{
Attempt++;
if(ShowLog)Print("!!! Error Open Buy "+" Attempt = " +Attempt+" "+Symbol()+" "+GetErrorDescription(GetLastError()));
}
else
{
t2=GetTickCount()-t1;
if(t1>0){LastOpenTime=t2;} else {LastOpenTime=0;}
LastGap=GapBuy;
LastOrderTime = GetTickCount();
if(TradeByPendingOrders)
{
for (int z1=0; z1<OrdersTotal(); z1++)
{
if (OrderSelect(z1, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType()==OP_BUYSTOP)
{
OpenBuyPrice=DoubleToStr(OrderOpenPrice(),5);
SlippageBuy=(PendingOrderOpenPriseBuy-OpenBuyPrice)/pp;
if(ShowLog)Print("!!! Pending Order BuyStop "+ticketBuy +" Attempt = " +Attempt +", at " +DoubleToString(OrderOpenPrice(),Digits)+", Gap = "+ DoubleToStr(LastGap,2)+" pips, Pending Order Time = "+DoubleToString(LastOpenTime,0)+" ms, Slippage = "+DoubleToString(SlippageBuy,2)+" pips." +" Account Equity = "+ DoubleToString(Eq,2)+" " +AccountCurrency());
pendingordertime=OrderOpenTime();
pendingorderticket=OrderTicket();
while((TimeCurrent()- pendingordertime) < PendingOrdersLifeTime && stopseach==false)
{
if(OrderSelect(pendingorderticket,SELECT_BY_TICKET,MODE_TRADES))
{
if(OrderType()==OP_BUY)
{
OpenBuyPrice=DoubleToStr(OrderOpenPrice(),5);
SlippageBuy=(PendingOrderOpenPriseBuy-OpenBuyPrice)/pp;
if(ShowLog) Print("!!! Pending Order BuyStop "+pendingorderticket+" activated at price " +DoubleToString(OpenBuyPrice,Digits)+" PendingOrderSlippage = "+DoubleToString(SlippageBuy,2)+" pips");
stopseach=true;
}
else{stopseach=false;}
}
Sleep(100);
}
}
}
}
}
}
if(OrderSelect(ticketBuy,SELECT_BY_TICKET,MODE_TRADES))
{
OpenBuyPrice=DoubleToStr(OrderOpenPrice(),5);
if(TradeByPendingOrders==false){SlippageBuy=(Mt4Ask-OpenBuyPrice)/pp;}
}
LastOpenSlippage=SlippageBuy;
if(RealFixTP) {FixTP2=GapBuy+LastOpenSlippage; if (FixTP2 < 0) {FixTP2=0.1;} if(ShowLog)Print("RealFixTP = "+DoubleToString(FixTP2,2) +" pips");}
if(RealFixSL) { if (LastOpenSlippage<0) {FixSL2=MathAbs(LastOpenSlippage);} if (LastOpenSlippage>=0) {FixSL2=FixSL*SpreadK+spread;} if(ShowLog)Print("RealFixSL = "+DoubleToString(FixSL2,2) +" pips");}
if(ShowLog && TradeByPendingOrders==false)Print("!!! Open Buy Order "+ticketBuy +" Attempt = " +Attempt +", at " +Symbol()+", Gap = "+ DoubleToStr(LastGap,2)+" pips, Open Time = "+DoubleToString(LastOpenTime,0)+" ms, Slippage = "+DoubleToString(LastOpenSlippage,2)+" pips." +" Account Equity = "+ DoubleToString(Eq,2)+" " +AccountCurrency());
if(SoundSignal){PlaySound("ok.wav");}
if (StopTradingSlippage) {if((GapBuy+LastOpenSlippage) < FixTP2) {StopTradindSlip=true;}}
SlippageBuy=0;
t2=0;
t1=0;
}
}
}
}
if( GapSell <= -(MinLev)&&NewLmaxBid==true&&LmaxBidOld>0&&TotalOrder(Magic)<NTrades&&tradeLmax==true && GetTickCount() - LastOrderTime > OrdersOpenIntervalMs&&SignalFromMt4==false)
{
if(MathAbs(GapSell) > MinGapForOpen && MathAbs(GapSell) > spread )
{
SignalSell=true;
if (UseDynamicSlippage)
{
if(SignalMode==0) OrdOpenSlippage = (LmaxBid - Mt4Bid - (MathAbs(spread - LmaxSpread)/2) * DynamicSlippageCoefficient - FixTP2)/pp;
if(SignalMode==1) OrdOpenSlippage = (LmaxAsk - Mt4Bid - (MathAbs(spread - LmaxSpread)/2) * DynamicSlippageCoefficient - FixTP2)/pp;
}
else { OrdOpenSlippage = OrderOpenSlippage;}
if(ShowCommentsInOrder)
{
Commento="G"+DoubleToString(GapSell,1)+" Mb"+DoubleToString(Mt4Bid,5)+" "+OrderCommSell+"b"+DoubleToString(LmaxBid,5);
Commento=StringSubstr(Commento, 0, 26);
if (EAComment!="") {Commento=EAComment;}
}
else {Commento="";}
if (CloseWhenPriceEqual) {Commento=DoubleToString(SellClosePrice,Digits);}
int Attempt2 = 0;
while(Attempt2 <= MaxAttemptsForOpenOrder && !OrderSelect(ticketSell,SELECT_BY_TICKET,MODE_TRADES) )
{
if(TradeSide==0||TradeSide==2)
{
if(TradeByPendingOrders)
{
PendingOrderOpenPriseSell=MarketInfo(Symbol(),MODE_BID)-DistancePending*pp;
t3=GetTickCount();
ticketSell=OrderSend(Symbol(),OP_SELLSTOP,TradeLot,MarketInfo(Symbol(),MODE_BID)-DistancePending*pp,0,0,0,Commento,Magic,0,Green);
}
else
{
t3=GetTickCount();
ticketSell=OrderSend(Symbol(),OP_SELL,TradeLot,MarketInfo(Symbol(),MODE_BID),MathAbs(OrdOpenSlippage),0,0,Commento,Magic,0,Green);
}
}
if(!OrderSelect(ticketSell,SELECT_BY_TICKET,MODE_TRADES))
{
Attempt2++;
if(ShowLog)Print("!!! Error Open Sell Order "+" Attempt = " +Attempt2+", at " +Symbol() +" " +GetErrorDescription(GetLastError()));
}
else
{
int t4=GetTickCount()-t3;
if(t3>0){LastOpenTime=t4;} else {LastOpenTime=0;}
LastGap=GapSell;
LastOrderTime = GetTickCount();
if(TradeByPendingOrders)
{
for (int z1=0; z1<OrdersTotal(); z1++)
{
if (OrderSelect(z1, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType()==OP_SELLSTOP)
{
OpenSellPrice=DoubleToStr(OrderOpenPrice(),5);
SlippageSell=(OpenSellPrice-PendingOrderOpenPriseSell)/pp;
if(ShowLog)Print("!!! Pending Order SellStop "+ticketSell +" Attempt = " +Attempt2 +", at " +DoubleToString(OrderOpenPrice(),Digits)+", Gap = "+ DoubleToStr(LastGap,2)+" pips, Pending Order Time = "+DoubleToString(LastOpenTime,0)+" ms, Slippage = "+DoubleToString(SlippageSell,2)+" pips." +" Account Equity = "+ DoubleToString(Eq,2)+" " +AccountCurrency());
pendingordertime=OrderOpenTime();
pendingorderticket=OrderTicket();
while((TimeCurrent()- pendingordertime) < PendingOrdersLifeTime && stopseach==false)
{
if(OrderSelect(pendingorderticket,SELECT_BY_TICKET,MODE_TRADES))
{
if(OrderType()==OP_SELL)
{
OpenSellPrice=DoubleToStr(OrderOpenPrice(),5);
SlippageSell=(OpenSellPrice-PendingOrderOpenPriseSell)/pp;
if(ShowLog) Print("!!! Pending Order SellStop "+pendingorderticket+" activated at price " +DoubleToString(OpenSellPrice,Digits)+" PendingOrderSlippage = "+DoubleToString(SlippageSell,2)+" pips");
stopseach=true;
}
else{stopseach=false;}
}
Sleep(100);
}
}
}
}
}
}
if(OrderSelect(ticketSell,SELECT_BY_TICKET,MODE_TRADES))
{
OpenSellPrice=DoubleToStr(OrderOpenPrice(),5);
if(TradeByPendingOrders==false){SlippageSell=(OpenSellPrice-Mt4Bid)/pp;}
}
LastOpenSlippage=SlippageSell;
if(RealFixTP) {FixTP2=NormalizeDouble((MathAbs(GapSell)+LastOpenSlippage),2); if (FixTP2 < 0) {FixTP2=0.1;} if(ShowLog)Print("RealFixTP = "+DoubleToString(FixTP2,2) +" pips");}
if(RealFixSL) {if (LastOpenSlippage<0) {FixSL2=NormalizeDouble(LastOpenSlippage,2); } if (LastOpenSlippage>=0){FixSL2=FixSL*SpreadK+spread;} if(ShowLog)Print("RealFixSL = "+DoubleToString(FixSL2,2) +" pips");}
if(ShowLog && TradeByPendingOrders==false)Print("!!! Open Sell Order "+ticketSell+" Attempt = "+Attempt2 +", at "+Symbol()+", Gap = "+ DoubleToStr(LastGap,2)+" pips, Open Time = "+DoubleToString(LastOpenTime,0)+" ms, Slippage= "+DoubleToString(LastOpenSlippage,2)+" pips." +" Account Equity = "+ DoubleToString(Eq,2)+" " +AccountCurrency());
if(SoundSignal){PlaySound("ok.wav");}
if (StopTradingSlippage) {if((MathAbs(GapSell)+LastOpenSlippage) < FixTP2) {StopTradindSlip=true;}}
SlippageSell=0;
t3=0;
t4=0;
}
}
}
}
if (LastOpenTime>350){text1="Bad Ping"; col1 = Red;}
if (LastOpenTime<=350){text1="Ping OK"; col1 = Lime;}
if (LastOpenSlippage>=0){text2="Positive"; col2 = Lime;}
if (LastOpenSlippage<0){text2="Negative"; col2 = Red;}
if (LastCloseTime>350){text3="Bad Ping"; col3 = Red;}
if (LastCloseTime<=350){text3="Ping OK"; col3 = Lime;}
if (LastCloseSlippage>=0){text4="Positive"; col4 = Lime;}
if (LastCloseSlippage<0){text4="Negative"; col4 = Red;}
if(ShirtStopLoss)
{
StopLoss2=spread*ShirtStopLossK;
}
minshag = (MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)/pp;
if(StopLoss2<=minshag) {StopLoss2=minshag+spread; if(minshag==0){StopLoss2=spread*2;}}
if(StopLoss2<=spread) {StopLoss2=spread*2; }
if(TakeProfit2<=minshag) {TakeProfit2=minshag+spread; if(minshag==0){TakeProfit2=spread*2;}}
if(TakeProfit2<=spread||TakeProfit2<=spread) {TakeProfit2=spread*2;}
bool CloseOk = true;
if(MaxSpreadCloseUse==true){if(spread >= MaxSpreadClose){CloseOk==false; LastErrorText=LastErrorText+"Trade is disabled, Spread = "+DoubleToString(NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD),2),2)+" pips is big than MaxSpreadClose = " +DoubleToString(MaxSpreadClose,2)+" pips!"+" Can change MaxSpreadClose in EA settings and start EA again!";}}
if(MinSpreadCloseUse==true){if(spread <= MinSpreadClose){CloseOk==false; LastErrorText=LastErrorText+"Trade is disabled, Spread = "+DoubleToString(NormalizeDouble(MarketInfo(Symbol(),MODE_SPREAD),2),2)+" pips is low than MinSpreadClose = " +DoubleToString(MinSpreadClose,2)+" pips!"+" Can change MinSpreadClose in EA settings and start EA again!";}}
if(CloseOk)
{
if(UseFixedStopLossAndTakeProfit==true) {EnterSLTP();}
if (FixTP != 0) { if (DisableFixTP==false) {TrailingTPs();}}
if (FixSL != 0) { if (DisableFixSL==false) {TrailingSLs();}}
if (CloseTimer>0){CloseTimerFunction();}
if (CloseWhenPriceEqual == true){CloseWhenPriceEqualFunction();}
if(UseTrailingStop) {TrailingStopFunction();}
if(UseVirtualTrailingStop) {VirtualTrailingStopFunction();}
}
int stepstop=0;
while (TotalOrder(Magic) > 0 && StopTrading == true)
{
stepstop=stepstop+1;
if(UseFixedStopLossAndTakeProfit==true) {EnterSLTP();}
if (FixTP != 0) { if (DisableFixTP==false) {TrailingTPs();}}
if (FixSL != 0) { if (DisableFixSL==false) {TrailingSLs();}}
if (CloseTimer>0){CloseTimerFunction();}
if (CloseWhenPriceEqual == true){CloseWhenPriceEqualFunction();}
if(UseTrailingStop) {TrailingStopFunction();}
if(UseVirtualTrailingStop) {VirtualTrailingStopFunction();}
if(stepstop < 10){ObjectsDeleteAll(); Comment(""); ShowErrorsPanel(); Comment(" Wait of Closing of orders ......");}
Sleep(100);
}
if (TotalOrder(Magic) == 0 && StopTrading == true)
{
if (ShowLog ) Print ("All orders was closed! Trading was stopped!"); Comment (" All orders was closed! Trading was stopped!");
}
if(ShowGraf)
{
if(NewLmaxBid==true || NewMt4Bid==true)
{
if(LmaxBidOld > 0)
{
if(NewLmaxBid==true) {if(ShowPanel==false) {Comment("");ObjectsDeleteAll(); ShowWesternpipsInfoPanel(); ShowPanel=true; ShowErrorPanel=false;}}
if (ShowPanel==true)
{
BarsCount=WindowBarsPerChart();
Bar=WindowFirstVisibleBar();
long chart_id=ChartID();
string QTexta;
if(ModeOfQuotes==0){QTexta="Saxo";}
if(ModeOfQuotes==1){QTexta="Lmax";}
if(ModeOfQuotes==2){QTexta="CQG";}
if(ModeOfQuotes==3){QTexta="Rithmic";}
if(NewLmaxBid==true)
{
if(ObjectFind(chart_id,"QBid")==-1)
{
ObjectCreate(chart_id,"QBid", OBJ_HLINE,0,TimeCurrent(),LmaxBid);
ObjectSet("QBid",OBJPROP_COLOR,ColorQuotes);
}
ObjectMove("QBid",0,TimeCurrent(),LmaxBid);
}
if(NewLmaxBid==true)
{
if(ObjectFind(chart_id,"QText")==-1)
{
ObjectCreate(chart_id,"QText",OBJ_TEXT,0, Time[0], High[0]+(10*Point));
ObjectSetText("QText", QTexta+" Bid ", 10, "Arial", ColorQuotes);
}
ObjectMove(chart_id,"QText", 0, (Time[0]+(BarsCount-Bar)*60*Period()), LmaxBid-((LmaxAsk-LmaxBid)/pp)*pp);
}
if(ShowAsk)
{
if(NewLmaxAsk==true)
{
if(ObjectFind(chart_id,"QAsk")==-1)
{
ObjectCreate(chart_id,"QAsk", OBJ_HLINE,0,TimeCurrent(),LmaxAsk);
ObjectSet("QAsk",OBJPROP_COLOR,ColorQuotes);
ObjectSet("QAsk",OBJPROP_STYLE,2);
}
ObjectMove(chart_id,"QAsk",0,TimeCurrent(),LmaxAsk);
}
if(NewLmaxAsk==true)
{
if(ObjectFind(chart_id,"QAText")==-1)
{
ObjectCreate(chart_id,"QAText",OBJ_TEXT,0, Time[0], High[0]+(10*Point));
ObjectSetText("QAText", QTexta+" Ask ", 10, "Arial", ColorQuotes);
}
ObjectMove(chart_id,"QAText", 0, (Time[0]+(BarsCount-Bar)*60*Period()), LmaxAsk+(2*(LmaxAsk-LmaxBid)/pp)*pp);
}
}
color ColorSigSellSaxo;
int SigSellSaxo = 14;
int xsell=60;
int xbuy=60;
x=22;
ColorSigSellSaxo = C'118,192,217';
if (SignalSell)
{
if(tradeLmax)
{
SigSellSaxo = 20;
ColorSigSellSaxo = Yellow;
x=x-5;
xsell=75;
}
}
if(GapSell<0) {xsell=xsell+8;}
if(ObjectFind(chart_id,"GapSell")==-1)
{
ObjectCreate(chart_id,"GapSell",OBJ_LABEL,0, 0, 0);
ObjectSetInteger(chart_id,"GapSell", OBJPROP_CORNER, 1);
ObjectSetInteger(chart_id,"GapSell", OBJPROP_XDISTANCE, xsell);
ObjectSetInteger(chart_id,"GapSell", OBJPROP_YDISTANCE, x+28);
ObjectSetInteger(chart_id,"GapSell", OBJPROP_FONTSIZE, SigSellSaxo);
ObjectSetString(chart_id,"GapSell", OBJPROP_FONT,"Arial");
ObjectSetInteger(chart_id,"GapSell", OBJPROP_COLOR,ColorSigSellSaxo);
}
ObjectSetString(chart_id,"GapSell", OBJPROP_TEXT,DoubleToString(GapSell, 1));
color ColorSigBuySaxo;
int SigBuySaxo = 14;
ColorSigBuySaxo = C'118,192,217';
if (SignalBuy)
{
if(tradeLmax)
{
SigBuySaxo = 20;
ColorSigBuySaxo = Yellow;
x=x-5;
xbuy=75;
}
}
if(GapBuy<0) {xbuy=xbuy+8;}
if(ObjectFind(chart_id,"GapBuy")==-1)
{
ObjectCreate(chart_id,"GapBuy",OBJ_LABEL,0, 0, 0);
ObjectSetInteger(chart_id,"GapBuy", OBJPROP_CORNER, 1);
ObjectSetInteger(chart_id,"GapBuy", OBJPROP_XDISTANCE, xbuy);
ObjectSetInteger(chart_id,"GapBuy", OBJPROP_YDISTANCE, x);
ObjectSetInteger(chart_id,"GapBuy", OBJPROP_FONTSIZE, SigBuySaxo);
ObjectSetString(chart_id,"GapBuy", OBJPROP_FONT,"Arial");
ObjectSetInteger(chart_id,"GapBuy", OBJPROP_COLOR,ColorSigBuySaxo);
}
ObjectSetString(chart_id,"GapBuy", OBJPROP_TEXT,DoubleToString(GapBuy, 1));
if(ShowPriceLabel)
{
if( SignalBuy==true || SignalSell==true )
{
long tc=TimeCurrent();
ObjectCreate(0,"LmaxBid"+DoubleToString(tc,0),OBJ_ARROW_LEFT_PRICE,0,TimeCurrent(),LmaxBid);
ObjectSetInteger(0,"LmaxBid"+DoubleToString(tc,0),OBJPROP_COLOR,ColorQuotes);
if( GapBuy >= (MinLev))
{
ObjectCreate(0,"GapUp"+DoubleToString(tc,0),OBJ_ARROW_UP,0,TimeCurrent(),Mt4Ask-20*Point);
ObjectSetInteger(0,"GapUp"+DoubleToString(tc,0),OBJPROP_COLOR,LimeGreen);
ObjectCreate(0,"Mt4Ask"+DoubleToString(tc,0),OBJ_ARROW_LEFT_PRICE,0,TimeCurrent(),Mt4Ask);
ObjectSetInteger(0,"Mt4Ask"+DoubleToString(tc,0),OBJPROP_COLOR,Red);
ObjectCreate(0,"SlippageBuy"+DoubleToString(tc,0),OBJ_TEXT,0, TimeCurrent(), Mt4Ask+LastOpenSlippage*Point);
ObjectMove(0,"SlippageBuy"+DoubleToString(tc,0), 0, TimeCurrent(), Mt4Ask+LastOpenSlippage*Point);
ObjectSetText("SlippageBuy"+DoubleToString(tc,0), "Slippage Buy= "+DoubleToString(LastOpenSlippage,2), 8, "Arial", Red);
}
if(GapSell <= -(MinLev) )
{
ObjectCreate(0,"GapDown"+DoubleToString(tc,0),OBJ_ARROW_DOWN,0,TimeCurrent(),Mt4Bid+20*Point);
ObjectSetInteger(0,"GapDown"+DoubleToString(tc,0),OBJPROP_COLOR,Red);
ObjectCreate(0,"Mt4Bid"+DoubleToString(tc,0),OBJ_ARROW_LEFT_PRICE,0,TimeCurrent(),Mt4Bid);
ObjectSetInteger(0,"Mt4Bid"+DoubleToString(tc,0),OBJPROP_COLOR,Red);
ObjectCreate(0,"SlippageSell"+DoubleToString(tc,0),OBJ_TEXT,0, TimeCurrent(), Mt4Bid+LastOpenSlippage*Point);
ObjectMove(0,"SlippageSell"+DoubleToString(tc,0), 0, TimeCurrent(), Mt4Bid+LastOpenSlippage*Point);
ObjectSetText("SlippageSell"+DoubleToString(tc,0), "Slippage Sell= "+DoubleToString(LastOpenSlippage,2), 8, "Arial", Red);
}
}
}
if(ObjectFind(chart_id,"minlevel")==-1)
{
ObjectCreate("minlevel", OBJ_LABEL, 0, 0, 0);
ObjectSet("minlevel", OBJPROP_CORNER, 4);
ObjectSet("minlevel", OBJPROP_XDISTANCE, 8);
ObjectSet("minlevel", OBJPROP_YDISTANCE, 65);
}
ObjectSetText("minlevel", "Minimum Level: " +DoubleToString(MinLev,2), 9, "Arial", Lime);
if(ObjectFind(chart_id,"fixtp")==-1)
{
ObjectCreate("fixtp", OBJ_LABEL, 0, 0, 0);
ObjectSet("fixtp", OBJPROP_CORNER, 4);
ObjectSet("fixtp", OBJPROP_XDISTANCE, 8);
ObjectSet("fixtp", OBJPROP_YDISTANCE, 80);
}
ObjectSetText("fixtp", "FixTP: "+DoubleToString(FixTP2,2), 9, "Arial", White);
if(ObjectFind(chart_id,"fixsl")==-1)
{
ObjectCreate("fixsl", OBJ_LABEL, 0, 0, 0);
ObjectSet("fixsl", OBJPROP_CORNER, 4);
ObjectSet("fixsl", OBJPROP_XDISTANCE, 8);
ObjectSet("fixsl", OBJPROP_YDISTANCE, 95);
}
ObjectSetText("fixsl", "FixSL: "+DoubleToString(FixSL2,2), 9, "Arial", White);
if(ObjectFind(chart_id,"sl")==-1)
{
ObjectCreate("sl", OBJ_LABEL, 0, 0, 0);
ObjectSet("sl", OBJPROP_CORNER, 4);
ObjectSet("sl", OBJPROP_XDISTANCE, 8);
ObjectSet("sl", OBJPROP_YDISTANCE, 110);
}
ObjectSetText("sl", "StopLoss: "+DoubleToString(StopLoss2,2), 9, "Arial", White);
if(ObjectFind(chart_id,"tp")==-1)
{
ObjectCreate("tp", OBJ_LABEL, 0, 0, 0);
ObjectSet("tp", OBJPROP_CORNER, 4);
ObjectSet("tp", OBJPROP_XDISTANCE, 8);
ObjectSet("tp", OBJPROP_YDISTANCE, 125);
}
ObjectSetText("tp", "TakeProfit: "+DoubleToString(TakeProfit2,2), 9, "Arial", White);
if(ObjectFind(chart_id,"RiskPersent")==-1)
{
ObjectCreate("RiskPersent", OBJ_LABEL, 0, 0, 0);
ObjectSet("RiskPersent", OBJPROP_CORNER, 4);
ObjectSet("RiskPersent", OBJPROP_XDISTANCE, 8);
ObjectSet("RiskPersent", OBJPROP_YDISTANCE, 165);
}
ObjectSetText("RiskPersent","RiskPercent: " +DoubleToString(RiskPercent,0), 9, "Arial", White);
if(ObjectFind(chart_id,"Lots")==-1)
{
ObjectCreate("Lots", OBJ_LABEL, 0, 0, 0);
ObjectSet("Lots", OBJPROP_CORNER, 4);
ObjectSet("Lots", OBJPROP_XDISTANCE, 8);
ObjectSet("Lots", OBJPROP_YDISTANCE, 180);
}
ObjectSetText("Lots","Lots: " +TradeLot, 9, "Arial", Lime);
if(ObjectFind(chart_id,"max_Lots")==-1)
{
ObjectCreate("max_Lots", OBJ_LABEL, 0, 0, 0);
ObjectSet("max_Lots", OBJPROP_CORNER, 4);
ObjectSet("max_Lots", OBJPROP_XDISTANCE, 8);
ObjectSet("max_Lots", OBJPROP_YDISTANCE, 195);
}
ObjectSetText("max_Lots","Max Lots: " +DoubleToString(max_Lots,3), 9, "Arial", White);
if(ObjectFind(chart_id,"RiskDeposit")==-1)
{
ObjectCreate("RiskDeposit", OBJ_LABEL, 0, 0, 0);
ObjectSet("RiskDeposit", OBJPROP_CORNER, 4);
ObjectSet("RiskDeposit", OBJPROP_XDISTANCE, 8);
ObjectSet("RiskDeposit", OBJPROP_YDISTANCE, 210);
}
ObjectSetText("RiskDeposit","Deposit Stop if Loss: " +DoubleToString(DepositStop,0), 9, "Arial", White);
if(ObjectFind(chart_id,"DepositStopIfProfit")==-1)
{
ObjectCreate("DepositStopIfProfit", OBJ_LABEL, 0, 0, 0);
ObjectSet("DepositStopIfProfit", OBJPROP_CORNER, 4);
ObjectSet("DepositStopIfProfit", OBJPROP_XDISTANCE, 8);
ObjectSet("DepositStopIfProfit", OBJPROP_YDISTANCE, 225);
}
ObjectSetText("DepositStopIfProfit","Deposit Stop If Profit: " +DoubleToString(DepositStopIfProfit,0), 9, "Arial", White);
if(ObjectFind(chart_id,"datafeed")==-1)
{
ObjectCreate("datafeed", OBJ_LABEL, 0, 0, 0);
ObjectSet("datafeed", OBJPROP_CORNER, 4);
ObjectSet("datafeed", OBJPROP_XDISTANCE, 210);
ObjectSet("datafeed", OBJPROP_YDISTANCE, 100);
}
ObjectSetText("datafeed", QText, 9, "Arial", ColorQuotes);
if(ObjectFind(chart_id,"lmaxsymb")==-1)
{
ObjectCreate("lmaxsymb", OBJ_LABEL, 0, 0, 0);
ObjectSet("lmaxsymb", OBJPROP_CORNER, 4);
ObjectSet("lmaxsymb", OBJPROP_XDISTANCE, 210);
ObjectSet("lmaxsymb", OBJPROP_YDISTANCE, 115);
}
ObjectSetText("lmaxsymb", SymbCode, 9, "Arial", White);
if(ObjectFind(chart_id,"dfsymb")==-1)
{
ObjectCreate("dfsymb", OBJ_LABEL, 0, 0, 0);
ObjectSet("dfsymb", OBJPROP_CORNER, 4);
ObjectSet("dfsymb", OBJPROP_XDISTANCE, 210);
ObjectSet("dfsymb", OBJPROP_YDISTANCE, 130);
}
ObjectSetText("dfsymb", "Spread: "+DoubleToString((LmaxAsk-LmaxBid)/pp,2), 9, "Arial", White);
if(ObjectFind(chart_id,"lmaxask")==-1)
{
ObjectCreate("lmaxask", OBJ_LABEL, 0, 0, 0);
ObjectSet("lmaxask", OBJPROP_CORNER, 4);
ObjectSet("lmaxask", OBJPROP_XDISTANCE, 210);
ObjectSet("lmaxask", OBJPROP_YDISTANCE, 145);
}
ObjectSetText("lmaxask", lmaxtexta+" Ask: "+DoubleToString(LmaxAsk,Digits), 9, "Arial", White);
if(ObjectFind(chart_id,"lmaxbid")==-1)
{
ObjectCreate("lmaxbid", OBJ_LABEL, 0, 0, 0);
ObjectSet("lmaxbid", OBJPROP_CORNER, 4);
ObjectSet("lmaxbid", OBJPROP_XDISTANCE, 210);
ObjectSet("lmaxbid", OBJPROP_YDISTANCE, 160);
}
ObjectSetText("lmaxbid", lmaxtexta+" Bid: "+DoubleToString(LmaxBid,Digits), 9, "Arial", White);
if(ObjectFind(chart_id,"broker")==-1)
{
ObjectCreate("broker", OBJ_LABEL, 0, 0, 0);
ObjectSet("broker", OBJPROP_CORNER, 4);
ObjectSet("broker", OBJPROP_XDISTANCE, 360);
ObjectSet("broker", OBJPROP_YDISTANCE, 100);
}
ObjectSetText("broker",AccountInfoString(ACCOUNT_COMPANY), 9, "Arial", Yellow);
if(ObjectFind(chart_id,"mt4symb")==-1)
{
ObjectCreate("mt4symb", OBJ_LABEL, 0, 0, 0);
ObjectSet("mt4symb", OBJPROP_CORNER, 4);
ObjectSet("mt4symb", OBJPROP_XDISTANCE, 360);
ObjectSet("mt4symb", OBJPROP_YDISTANCE, 115);
}
ObjectSetText("mt4symb", Symbol(), 9, "Arial", White);
if(ObjectFind(chart_id,"spread")==-1)
{
ObjectCreate("spread", OBJ_LABEL, 0, 0, 0);
ObjectSet("spread", OBJPROP_CORNER, 4);
ObjectSet("spread", OBJPROP_XDISTANCE, 360);
ObjectSet("spread", OBJPROP_YDISTANCE, 130);
}
ObjectSetText("spread","Spread: " +DoubleToString(spread,2), 9, "Arial", White);
if(ObjectFind(chart_id,"mt4ask")==-1)
{
ObjectCreate("mt4ask", OBJ_LABEL, 0, 0, 0);
ObjectSet("mt4ask", OBJPROP_CORNER, 4);
ObjectSet("mt4ask", OBJPROP_XDISTANCE, 360);
ObjectSet("mt4ask", OBJPROP_YDISTANCE, 145);
}
ObjectSetText("mt4ask", "Mt4 Ask: "+DoubleToString(Mt4Ask,Digits), 9, "Arial", White);
if(ObjectFind(chart_id,"mt4bid")==-1)
{
ObjectCreate("mt4bid", OBJ_LABEL, 0, 0, 0);
ObjectSet("mt4bid", OBJPROP_CORNER, 4);
ObjectSet("mt4bid", OBJPROP_XDISTANCE, 360);
ObjectSet("mt4bid", OBJPROP_YDISTANCE, 160);
}
ObjectSetText("mt4bid", "Mt4 Bid: "+DoubleToString(Mt4Bid,Digits), 9, "Arial", White);
if(ObjectFind(chart_id,"ExOpen")==-1)
{
ObjectCreate("ExOpen", OBJ_LABEL, 0, 0, 0);
ObjectSet("ExOpen", OBJPROP_CORNER, 4);
ObjectSet("ExOpen", OBJPROP_XDISTANCE, 210);
ObjectSet("ExOpen", OBJPROP_YDISTANCE, 220);
}
ObjectSetText("ExOpen", "Open Order Execution Time: "+DoubleToString(LastOpenTime,0)+" ms", 9, "Arial", White);
if(ObjectFind(chart_id,"ExOpen1")==-1)
{
ObjectCreate("ExOpen1", OBJ_LABEL, 0, 0, 0);
ObjectSet("ExOpen1", OBJPROP_CORNER, 4);
Показано первые 50% кода (символов: 104202)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.