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

kg relative strength original and range trading ea v1.mq4

Вы автор или правообладатель?

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

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

О программе

Данный советник для MetaTrader 4 предназначен для автоматической торговли корзинами позиций на основе показаний пользовательского индикатора относительной силы «KG RS GROUP V1.1». Советник поддерживает два метода торговли: торговля по диапазону и торговля по оригинальному методу. Он отслеживает уровни силы для восьми валютных групп (JPY, USD, GBP, EUR, CHF, AUD, NZD, CAD) и открывает или закрывает корзины сделок в зависимости от текущей ситуации. Включает управление корзинами с уровнями take profit и stop loss, механизм «прыгающего» стоп-лосса, защиту счёта при достижении максимального убытка, закрытие всех позиций при достижении целевой прибыли, фильтрацию по торговым сессиям, проверку спреда и режим наблюдения за открытыми сделками без открытия новых.

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

НастройкаОписание
ins25 Раздел «Торговые методы» — Текстовый разделитель, обозначающий начало блока выбора торгового метода.
ins21 Раздел «Метод диапазонной торговли» — Текстовый разделитель для группы настроек диапазонной торговли.
TradeRangeMethod Метод диапазонной торговли — Включает или выключает диапазонный метод торговли. При включении советник открывает и закрывает корзины на основе уровней силы и отложенных условий.
Buy xxxJPY (WeakEntryPending) Уровень ожидания для слабых корзин — Значение силы, при котором советник выставляет отложенный ордер на открытие слабой корзины (покупка).
Sell xxxJPY (StrongEntryPending) Уровень ожидания для сильных корзин — Значение силы, при котором советник выставляет отложенный ордер на открытие сильной корзины (продажа).
RetraceDistance Расстояние ретрейса — Расстояние в пунктах, используемое для подтверждения сигнала после выставления отложенного ордера перед открытием корзины.
ValidatingTimeFilterMins Время валидации в минутах — Минимальное время ожидания после выставления отложенного ордера перед открытием корзины.
EndValidationPoints Конечные точки валидации — Дополнительное количество пунктов для подтверждения сигнала при открытии корзины.
StrengthInProfitClose Закрытие по прибыли силы — Включает автоматическое закрытие корзины, когда сила достигает заданного уровня прибыли.
StrengthProfitDollarTarget Цель прибыли по силе — Целевая сумма прибыли в долларах для автоматического закрытия корзины по силе.
StrengthInLossClose Закрытие по убытку силы — Включает автоматическое закрытие корзины, когда сила достигает заданного уровня убытка.
StrengthInLossDollar Уровень убытка по силе — Порог убытка в долларах для автоматического закрытия корзины по силе.
ins20 Раздел «Оригинальный метод торговли» — Текстовый разделитель для группы настроек оригинального метода.
TradeOriginalMethod Оригинальный метод торговли — Включает или выключает оригинальный метод торговли на основе разницы между красной и белой линиями индикатора.
KG RS GROUP v1.1 (WeakUpperBound) Верхняя граница слабого уровня — Верхний предел диапазона силы для открытия слабых сделок в оригинальном методе.
WeakLowerBound Нижняя граница слабого уровня — Нижний предел диапазона силы для открытия слабых сделок в оригинальном методе.
StrongUpperBound Верхняя граница сильного уровня — Верхний предел диапазона силы для открытия сильных сделок в оригинальном методе.
StrongLowerBound Нижняя граница сильного уровня — Нижний предел диапазона силы для открытия сильных сделок в оригинальном методе.
Difference between red and white lines (MinDiff) Минимальная разница — Минимальная разница между красной и белой линиями индикатора для подтверждения сигнала в оригинальном методе.
bl3 Разделитель — Текстовый разделитель визуального блока настроек.
ins8 Раздел «Общие входные параметры» — Текстовый разделитель для группы общих настроек.
MaxTradesAllowed Максимальное количество сделок — Общий лимит одновременно открытых сделок в пределах всех корзин.
Lot Размер лота — Стандартный размер лота для каждой сделки в корзине.
TradeWeak Торговля слабыми корзинами — Включает или выключает открытие слабых корзин (покупка).
TradeStrong Торговля сильными корзинами — Включает или выключает открытие сильных корзин (продажа).
MinTradesPerBasket Минимум сделок в корзине — Минимальное количество доступных пар для успешного открытия корзины.
PairSuffix Суффикс пары — Суффикс, добавляемый к имени валютной пары (например, «m» для пары USDJPYm).
MaximumSpread Максимальный спред — Максимально допустимый спред в пунктах для открытия сделки.
DisplayGapSize Размер отступа отображения — Количество пробелов для форматирования отображаемого сообщения на экране.
ShowMagicNumbersOnScreen Показывать магические номера на экране — Включает отображение магических номеров корзин в информационном окне.
WatchTradesOnly Только наблюдение за сделками — Включает режим наблюдения за открытыми сделками без открытия новых позиций.
CurrencySymbol Символ валюты — Символ валюты для отображения в информационных сообщениях (например, «$» или «€»).
ins31 Раздел «Фильтры торгового времени» — Текстовый разделитель для группы настроек временных фильтров.
SleepMinsAtStartup Пауза при запуске в минутах — Время ожидания в минутах после запуска советника перед началом работы.
TradeSundayCandle Торговля воскресной свечи — Включает или выключает торговлю по воскресной свече.
MondayStartHour Час начала в понедельник — Час, с которого начинается торговля в понедельник.
StopTradingOnFriday Остановка торговли в пятницу — Включает автоматическую остановку торговли в пятницу.
FridayStopHour Час остановки в пятницу — Час, после которого торговля прекращается в пятницу.
UseAsiaTimeFilter Использовать фильтр Азиатской сессии — Включает фильтр, запрещающий торговлю определёнными триггерами во время Азиатской сессии.
AsiaStartTime Время начала Азиатской сессии — Час начала Азиатской сессии для фильтрации торговли.
AsiaEndTime Время окончания Азиатской сессии — Час окончания Азиатской сессии для фильтрации торговли.
UseLondonTimeFilter Использовать фильтр Лондонской сессии — Включает фильтр, запрещающий торговлю определёнными триггерами во время Лондонской сессии.
LondonStartTime Время начала Лондонской сессии — Час начала Лондонской сессии для фильтрации торговли.
LondonEndTime Время окончания Лондонской сессии — Час окончания Лондонской сессии для фильтрации торговли.
UseNewYorkTimeFilter Использовать фильтр Нью-Йоркской сессии — Включает фильтр, запрещающий торговлю определёнными триггерами во время Нью-Йоркской сессии.
NewYorkStartTime Время начала Нью-Йоркской сессии — Час начала Нью-Йоркской сессии для фильтрации торговли.
NewYorkEndTime Время окончания Нью-Йоркской сессии — Час окончания Нью-Йоркской сессии для фильтрации торговли.
ins30 Раздел «Индивидуальные фильтры сделок» — Текстовый разделитель для группы индивидуальных настроек фильтрации.
UseKgGroupFilter Использовать фильтр группы KG — Включает фильтрацию отдельных сделок на основе показаний индикатора относительной силы на старшем таймфрейме.
ins32 Подсказка таймфрейма фильтра — Текстовая подсказка с указанием таймфреймов для фильтра (4H=240, D1=1440).
KgFilterMins Таймфрейм фильтра в минутах — Таймфрейм в минутах, на котором берётся показание индикатора относительной силы для фильтрации сделок.
BasketReverseNotCancel Разворот корзины вместо отмены — При включении направление сделки разворачивается при неудачной проверке фильтра, а не отменяется.
bl4 Разделитель — Текстовый разделитель визуального блока настроек.
ins22 Раздел «Параметры управления» — Текстовый разделитель для группы настроек управления позициями.
bin5 Настройки тейк-профита корзины — Текстовый разделитель для группы настроек автоматического закрытия корзины по прибыли.
BasketClosureTP Закрытие корзины по тейк-профиту — Включает автоматическое закрытие корзины при достижении целевой прибыли.
BasketStrongDollarTP Тейк-профит сильной корзины — Целевая сумма прибыли в долларах для автоматического закрытия сильной корзины.
BasketWeakDollarTP Тейк-профит слабой корзины — Целевая сумма прибыли в долларах для автоматического закрытия слабой корзины.
bin6 Настройки стоп-лосса корзины — Текстовый разделитель для группы настроек автоматического закрытия корзины по убытку.
BasketClosureSL Закрытие корзины по стоп-лоссу — Включает автоматическое закрытие корзины при достижении убытка.
BasketStrongDollarSL Стоп-лосс сильной корзины — Порог убытка в долларах для автоматического закрытия сильной корзины.
BasketWeakDollarSL Стоп-лосс слабой корзины — Порог убытка в долларах для автоматического закрытия слабой корзины.
bin7 Настройки прыгающего стоп-лосса — Текстовый разделитель для группы настроек прыгающего стоп-лосса.
UseJumpingStop Использовать прыгающий стоп-лосс — Включает механизм прыгающего стоп-лосса, который перемещается вслед за прибылью корзины.
JumpingStopDollars Шаг прыгающего стоп-лосса — Размер шага в долларах для перемещения прыгающего стоп-лосса.
LockInDollars Фиксация в долларах — Начальное значение фиксации прибыли для прыгающего стоп-лосса.
sps Раздел «Настройки защиты счёта» — Текстовый разделитель для группы настроек защиты счёта.
spsi Подсказка защиты счёта — Текстовая подсказка с описанием функции защиты счёта.
ShirtProtectionEnabled Включить защиту счёта — Включает автоматическое закрытие всех открытых сделок при достижении максимального убытка.
MaxLoss Максимальный убыток — Порог убытка в долларах, при достижении которого все открытые сделки закрываются.
IncludePendingInClosure Включать отложенные ордера в закрытие — Включает удаление отложенных ордеров при закрытии всех позиций.
bl5 Разделитель — Текстовый разделитель визуального блока настроек.
GOC Раздел «Настройки глобального закрытия» — Текстовый разделитель для группы настроек глобального закрытия всех сделок.
GlobalOrderClosureEnabled Включить глобальное закрытие — Включает автоматическое закрытие всех открытых сделок при достижении целевой прибыли.
IncludePendingOrdersInClosure Включать отложенные ордера в глобальное закрытие — Включает удаление отложенных ордеров при глобальном закрытии всех сделок.
DollarProfit Целевая прибыль в долларах — Сумма прибыли в долларах, при достижении которой выполняется глобальное закрытие всех сделок.
bl6 Разделитель — Текстовый разделитель визуального блока настроек.
ins1 Раздел «Параметры конкретных пар» — Текстовый разделитель для группы настроек конкретных валютных пар.
ins2 Раздел «Пары xxxJPY» — Текстовый разделитель для группы настроек пар с JPY.
JpyIsTrigger JPY триггер — Включает или выключает обработку JPY-триггера для открытия корзин.
TradeUSDJPY Торговля USDJPY — Включает или выключает торговлю парой USDJPY в JPY-корзине.
TradeCHFJPY Торговля CHFJPY — Включает или выключает торговлю парой CHFJPY в JPY-корзине.
TradeCADJPY Торговля CADJPY — Включает или выключает торговлю парой CADJPY в JPY-корзине.
TradeEURJPY Торговля EURJPY — Включает или выключает торговлю парой EURJPY в JPY-корзине.
TradeGBPJPY Торговля GBPJPY — Включает или выключает торговлю парой GBPJPY в JPY-корзине.
TradeAUDJPY Торговля AUDJPY — Включает или выключает торговлю парой AUDJPY в JPY-корзине.
TradeNZDJPY Торговля NZDJPY — Включает или выключает торговлю парой NZDJPY в JPY-корзине.
JpyWeakMagicNumber Магический номер слабой JPY-корзины — Уникальный магический номер для слабых JPY-сделок.
JpyStrongMagicNumber Магический номер сильной JPY-корзины — Уникальный магический номер для сильных JPY-сделок.
JpyTradeComment Комментарий JPY-сделок — Текстовый комментарий, добавляемый к JPY-сделкам.
JpyManagedByThisEA JPY управляется этим советником — Включает управление открытыми JPY-корзинами данным советником.
bl7 Разделитель — Текстовый разделитель визуального блока настроек.
ins3 Раздел «Пары xxxUSD и USDxxx» — Текстовый разделитель для группы настроек пар с USD.
UsdIsTrigger USD триггер — Включает или выключает обработку USD-триггера для открытия корзин.
TradeUSDJPY1 Торговля USDJPY — Включает или выключает торговлю парой USDJPY в USD-корзине.
TradeUSDCHF Торговля USDCHF — Включает или выключает торговлю парой USDCHF в USD-корзине.
TradeUSDCAD Торговля USDCAD — Включает или выключает торговлю парой USDCAD в USD-корзине.
TradeNZDUSD Торговля NZDUSD — Включает или выключает торговлю парой NZDUSD в USD-корзине.
TradeEURUSD Торговля EURUSD — Включает или выключает торговлю парой EURUSD в USD-корзине.
TradeGBPUSD Торговля GBPUSD — Включает или выключает торговлю парой GBPUSD в USD-корзине.
Получить полный код

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

#include <OrderReliable.mqh>
#define  NL    "\n"

/*
int start()
void DisplayUserFeedback()
bool CheckIfTradeAlreadyExists(string symbol, int type, int MagicNumber)
void ManageOpenBaskets(int MagicNumber)
bool CloseBasket(int MagicNumber)
int CalculateNoOfAvailableTrades(int MagicNumber)
bool ReturnSpreadDecision(string symbol)
int init()
void ShirtProtection()
string CalaulateDiffForOriginalMethod(string trigger)
void TradeWatcher()
bool StrengthProfitCloseDecision(int MagicNumber)
bool StrengthLossCloseDecision(int MagicNumber)
bool HasPendingWaitingTimePassed(datetime PendingTime)
bool ReturnIndicatorDecision(string symbol, bool TradeAllowed, string BasketType)
bool CciFilter(string symbol, bool TradeAllowed, string BasketType)
void ReadValuesIntoVars()
bool DoesTradeExist(symbol)
void CheckTradingTimes()
bool SendTrade(string symbol, int type, string TradeComment, int MagicNumber)

xxxJPY functions
void xxxJpyTrades()
void JpySendStrongTrades()
void JpySendWeakTrades()
void JpyCountOpenTrades()

xxxUsd functions
void xxxUsdTrades()
void UsdSendWeakTrades()
void UsdSendStrongTrades()
void UsdCountOpenTrades()

xxxGbp functions
void xxxGbpTrades()
void GbpSendWeakTrades()
void GbpSendStrongTrades()
void GbpCountOpenTrades()

EURxxx functions
void EURxxxTrades()
void EurSendWeakTrades()
void EurSendStrongTrades()
void EurCountOpenTrades()

xxxCHF functions
void xxxChfTrades()
void ChfSendWeakTrades()
void ChfSendStrongTrades()
void ChfCountOpenTrades()

Aud functions
void AudxxxTrades()
void AudSendWeakTrades()
void AudSendStrongTrades()
void AudCountOpenTrades()

Nzd functions
void NzdxxxTrades()
void NzdSendWeakTrades()
void NzdSendStrongTrades()
void NzdCountOpenTrades()

Cad functions
void CadxxxTrades()
void CadSendWeakTrades()
void CadSendStrongTrades()
void CadCountOpenTrades()

*/

/*
callmevossle on scaling in
Here is the logic I use in scaling trades... Once a trade gets into profit, I wait until the bar 
closes for the period I am trading, and then based either on the number of pips or dollar amount, 
I just open another position. I tend to write my EA's to follow some sort of trend so "scaling" turns out to be 
very profitable when you hit the trend. Of course, when your are wrong, you have to have solid money management 
to get you out.
*/

extern string     ins25="-----Trading Methods. Select 1 only.-----";
extern string     ins21="-----Range trading method-----";
extern bool       TradeRangeMethod=true;
extern double     WeakEntryPending=90;// Buy xxxJPY
extern double     StrongEntryPending=10;// Sell xxxJPY
extern int        RetraceDistance=5;
extern int        ValidatingTimeFilterMins=3;
extern int        EndValidationPoints=10;
extern bool       StrengthInProfitClose=false;
extern double     StrengthProfitDollarTarget=0;
extern bool       StrengthInLossClose=false;
extern double     StrengthInLossDollar=-5;
extern string     ins20="-----Original trading method-----";
extern bool       TradeOriginalMethod=false;
extern double     WeakUpperBound=50;//KG RS GROUP v1.1
extern double     WeakLowerBound=35;
extern double     StrongUpperBound=65;
extern double     StrongLowerBound=50;
extern double     MinDiff=8;// Difference between red and white lines
extern string     bl3="---------------------------------------------------------------------";
extern string     ins8="-----General inputs-----";
extern int        MaxTradesAllowed=24;
extern double     Lot=0.01;
extern bool       TradeWeak=true;
extern bool       TradeStrong=true;
extern int        MinTradesPerBasket=4;
extern string     PairSuffix="m";
extern int        MaximumSpread=20;
extern int        DisplayGapSize=30;
extern bool       ShowMagicNumbersOnScreen=false;
extern bool       WatchTradesOnly=false;
extern string     CurrencySymbol="$";
extern string     ins31="-----Trading time filters-----";
extern int        SleepMinsAtStartup=2;
extern bool       TradeSundayCandle=false;
extern int        MondayStartHour=3;
extern bool       StopTradingOnFriday=true;
extern int        FridayStopHour=15;
extern bool       UseAsiaTimeFilter=false;
extern int        AsiaStartTime=22;
extern int        AsiaEndTime=8;
extern bool       UseLondonTimeFilter=false;
extern int        LondonStartTime=8;
extern int        LondonEndTime=16;
extern bool       UseNewYorkTimeFilter=false;
extern int        NewYorkStartTime=13;
extern int        NewYorkEndTime=21;
extern string     ins30="-----Individual trade filters-----";
extern bool       UseKgGroupFilter=true;
extern string     ins32="4H=240: D1=1440"; 
extern int        KgFilterMins=240;
extern bool       BasketReverseNotCancel=true;
extern string     bl4="---------------------------------------------------------------------";
extern string     ins22="-----Management inputs-----";
extern string     bin5="Basket take profit settings";
extern bool       BasketClosureTP=true;
extern double     BasketStrongDollarTP=1;
extern double     BasketWeakDollarTP=1;
extern string     bin6="Basket stop loss settings";
extern bool       BasketClosureSL=false;
extern double     BasketStrongDollarSL=-1;
extern double     BasketWeakDollarSL=-1;
extern string     bin7="Basket jumping stop loss settings";
extern bool       UseJumpingStop=false;
extern double     JumpingStopDollars=2;
extern double     LockInDollars=0;
extern string     sps="----Shirt-protection settings----";
extern string     spsi="Close all open trades at this $ loss";
extern bool       ShirtProtectionEnabled=false;
extern double     MaxLoss=-10000000;
extern bool       IncludePendingInClosure=false;
extern string     bl5="---------------------------------------------------------------------";
extern string     GOC="----Global order closure settings----";
extern bool       GlobalOrderClosureEnabled=false;
extern bool       IncludePendingOrdersInClosure=false;
extern double     DollarProfit=100000;
extern string     bl6="---------------------------------------------------------------------";
extern string     ins1="-----Pair-specific inputs-----";

extern string     ins2="xxxJPY pairs";
extern bool       JpyIsTrigger=true;
extern bool       TradeUSDJPY=true;
extern bool       TradeCHFJPY=true;
extern bool       TradeCADJPY=false;
extern bool       TradeEURJPY=true;
extern bool       TradeGBPJPY=true;
extern bool       TradeAUDJPY=true;
extern bool       TradeNZDJPY=true;
extern int        JpyWeakMagicNumber=232425;
extern int        JpyStrongMagicNumber=232426;
extern string     JpyTradeComment="JPY trigger";
extern bool       JpyManagedByThisEA=true;
extern string     bl7="---------------------------------------------------------------------";

extern string     ins3="xxxUSD and USDxxx pairs";
extern bool       UsdIsTrigger=true;
extern bool       TradeUSDJPY1=true;
extern bool       TradeUSDCHF=true;
extern bool       TradeUSDCAD=true;
extern bool       TradeNZDUSD=true;
extern bool       TradeEURUSD=true;
extern bool       TradeGBPUSD=true;
extern bool       TradeAUDUSD=true;
extern int        UsdWeakMagicNumber=232427;
extern int        UsdStrongMagicNumber=232428;
extern string     UsdTradeComment="USD trigger";
extern bool       UsdManagedByThisEA=true;

extern string     bl1="---------------------------------------------------------------------";

extern string     ins4="xxxGBP and GBPxxx pairs";
extern bool       GbpIsTrigger=true;
extern bool       TradeGBPUSD1=true;
extern bool       TradeGBPCHF=true;
extern bool       TradeEURGBP=true;
extern bool       TradeGBPJPY1=true;
extern bool       TradeGBPNZD=true;
extern bool       TradeGBPCAD=true;
extern bool       TradeGBPAUD=false;
extern int        GbpWeakMagicNumber=232429;
extern int        GbpStrongMagicNumber=232430;
extern string     GbpTradeComment="GBP trigger";
extern bool       GbpManagedByThisEA=true;

extern string     bl8="---------------------------------------------------------------------";

extern string     ins5="EURxxx pairs";
extern bool       EurIsTrigger=true;
extern bool       TradeEURUSD1=true;
extern bool       TradeEURGBP1=true;
extern bool       TradeEURJPY1=true;
extern bool       TradeEURCHF=true;
extern bool       TradeEURCAD=true;
extern bool       TradeEURAUD=true;
extern bool       TradeEURNZD=true;
extern int        EurWeakMagicNumber=232431;
extern int        EurStrongMagicNumber=232432;
extern string     EurTradeComment="EUR trigger";
extern bool       EurManagedByThisEA=true;
extern string     bl30="---------------------------------------------------------------------";

extern string     ins6="xxxCHF and CHFxxx pairs";
extern bool       ChfIsTrigger=true;
extern bool       TradeUSDCHF1=true;
extern bool       TradeEURCHF1=true;
extern bool       TradeGBPCHF1=true;
extern bool       TradeNZDCHF=true;
extern bool       TradeAUDCHF=true;
extern bool       TradeCADCHF=false;
extern bool       TradeCHFJPY1=true;
extern int        ChfWeakMagicNumber=232433;
extern int        ChfStrongMagicNumber=232434;
extern string     ChfTradeComment="CHF trigger";
extern bool       ChfManagedByThisEA=true;

extern string     bl9="---------------------------------------------------------------------";

extern string     ins9="xxxAUD and AUDxxx pairs";
extern bool       AudIsTrigger=false;
extern bool       TradeAUDUSD1=true;
extern bool       TradeAUDCAD=true;
extern bool       TradeAUDJPY1=true;
extern bool       TradeAUDCHF1=true;
extern bool       TradeAUDNZD=true;
extern bool       TradeEURAUD1=true;
extern int        AudWeakMagicNumber=232435;
extern int        AudStrongMagicNumber=232436;
extern string     AudTradeComment="Aud trigger";
extern bool       AudManagedByThisEA=true;

extern string     bl31="---------------------------------------------------------------------";

extern string     ins10="xxxNZD and NZDxxx pairs";
extern bool       NzdIsTrigger=false;
extern bool       TradeGBPNZD1=true;
extern bool       TradeNZDUSD1=true;
extern bool       TradeNZDJPY1=true;
extern bool       TradeEURNZD1=true;
extern bool       TradeNZDCHF1=false;
extern int        NzdWeakMagicNumber=232437;
extern int        NzdStrongMagicNumber=232438;
extern string     NzdTradeComment="NZD trigger";
extern bool       NzdManagedByThisEA=true;

extern string     bl10="---------------------------------------------------------------------";

extern string     ins11="xxxCAD and CADxxx pairs";
extern bool       CadIsTrigger=false;
extern bool       TradeUSDCAD1=true;
extern bool       TradeCADCHF1=true;
extern bool       TradeCADJPY1=true;
extern bool       TradeAUDCAD1=true;
extern int        CadWeakMagicNumber=232439;
extern int        CadStrongMagicNumber=232440;
extern string     CadTradeComment="CAD trigger";
extern bool       CadManagedByThisEA=true;
extern bool       ShowAlerts=true;

string            ScreenMessage; //Display user feedback
string            Gap;
bool              TradingAllowed=true;// In case user has both trading methods selected
bool              IsAsianSession=false;
bool              IsLondonSession=false;
bool              IsNewYorkSession=false;
double            bid, ask; // For storing the Bid\Ask so that one instance of the ea can manage all trades, if required
double            point, digits; // Saves the Point and Digits of an order
bool              GlobalVariablesExist=false;
string            TicketName = "GlobalVariableTicketNo";// For storing ticket numbers in global vars for picking up failed part-closes
int               ReturnedTicketNo;//For closing trades on a recross
bool              CloseAllDcTrades;// Force closure of all DC trades if there is a failure to close any
int               DcTradesOpen;
double            DcProfit;

double            RedLine;
double            WhiteLine;
double            Diff;

double            JpyVal;//Holds reading from KG RS GROUP indi
bool              JpySendStrongTrades=false;// Tell start whether to attempt to send xxxJPY SELL trades
bool              JpySendWeakTrades=false;// Tell start whether to attempt to send xxxJPY BUY trades
int               JpyStrongTradesSent;// Keep a tally of 'strong' trades opened, so ea knows whether to keep on trying to send them
int               JpyWeakTradesSent;// Keep a tally of 'weak' trades opened, so ea knows whether to keep on trying to send them
int               JpyMaxTrades;// Maximum number of trades, based on whether TradeUSDJPY etc are set to true or false
bool              JpyWeakPending=false;
bool              JpyStrongPending=false;
double            JpyStrongUpl;
double            JpyWeakUpl;
bool              JpyCloseStrong=false;
bool              JpyCloseWeak=false;
datetime          JpyPendingTime;
bool              JpyValidatingStrong=false;
bool              JpyValidatingWeak=false;

double            UsdVal;//Holds reading from KG RS GROUP indi
bool              UsdSendStrongTrades=false;
bool              UsdSendWeakTrades=false;
int               UsdStrongTradesSent;
int               UsdWeakTradesSent;
int               UsdMaxTrades;
bool              UsdWeakPending=false;
bool              UsdStrongPending=false;
double            UsdStrongUpl;
double            UsdWeakUpl;
bool              UsdCloseStrong=false;
bool              UsdCloseWeak=false;
datetime          UsdPendingTime;
bool              UsdValidatingStrong=false;
bool              UsdValidatingWeak=false;

double            GbpVal;//Holds reading from KG RS GROUP indi
bool              GbpSendStrongTrades=false;
bool              GbpSendWeakTrades=false;
int               GbpStrongTradesSent;
int               GbpWeakTradesSent;
int               GbpMaxTrades;
bool              GbpWeakPending=false;
bool              GbpStrongPending=false;
double            GbpStrongUpl;
double            GbpWeakUpl;
bool              GbpCloseStrong=false;
bool              GbpCloseWeak=false;
datetime          GbpPendingTime;
bool              GbpValidatingStrong=false;
bool              GbpValidatingWeak=false;

double            EurVal;//Holds reading from KG RS GROUP indi
bool              EurSendStrongTrades=false;
bool              EurSendWeakTrades=false;
int               EurStrongTradesSent;
int               EurWeakTradesSent;
int               EurMaxTrades;
bool              EurWeakPending=false;
bool              EurStrongPending=false;
double            EurStrongUpl;
double            EurWeakUpl;
bool              EurCloseStrong=false;
bool              EurCloseWeak=false;
datetime          EurPendingTime;
bool              EurValidatingStrong=false;
bool              EurValidatingWeak=false;

double            ChfVal;//Holds reading from KG RS GROUP indi
bool              ChfSendStrongTrades=false;
bool              ChfSendWeakTrades=false;
int               ChfStrongTradesSent;
int               ChfWeakTradesSent;
int               ChfMaxTrades;
bool              ChfWeakPending=false;
bool              ChfStrongPending=false;
double            ChfStrongUpl;
double            ChfWeakUpl;
bool              ChfCloseStrong=false;
bool              ChfCloseWeak=false;
datetime          ChfPendingTime;
bool              ChfValidatingStrong=false;
bool              ChfValidatingWeak=false;

double            AudVal;//Holds reading from KG RS GROUP indi
bool              AudSendStrongTrades=false;
bool              AudSendWeakTrades=false;
int               AudStrongTradesSent;
int               AudWeakTradesSent;
int               AudMaxTrades;
bool              AudWeakPending=false;
bool              AudStrongPending=false;
double            AudStrongUpl;
double            AudWeakUpl;
bool              AudCloseStrong=false;
bool              AudCloseWeak=false;
datetime          AudPendingTime;
bool              AudValidatingStrong=false;
bool              AudValidatingWeak=false;

double            NzdVal;//Holds reading from KG RS GROUP indi
bool              NzdSendStrongTrades=false;
bool              NzdSendWeakTrades=false;
int               NzdStrongTradesSent;
int               NzdWeakTradesSent;
int               NzdMaxTrades;
bool              NzdWeakPending=false;
bool              NzdStrongPending=false;
double            NzdStrongUpl;
double            NzdWeakUpl;
bool              NzdCloseStrong=false;
bool              NzdCloseWeak=false;
datetime          NzdPendingTime;
bool              NzdValidatingStrong=false;
bool              NzdValidatingWeak=false;

double            CadVal;//Holds reading from KG RS GROUP indi
bool              CadSendStrongTrades=false;
bool              CadSendWeakTrades=false;
int               CadStrongTradesSent;
int               CadWeakTradesSent;
int               CadMaxTrades;
bool              CadWeakPending=false;
bool              CadStrongPending=false;
double            CadStrongUpl;
double            CadWeakUpl;
bool              CadCloseStrong=false;
bool              CadCloseWeak=false;
datetime          CadPendingTime;
bool              CadValidatingStrong=false;
bool              CadValidatingWeak=false;

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

int deinit()
{

   Comment("");

   return(0);
}

void DisplayUserFeedback()
{

   string GvName;//Global variable name

   ScreenMessage=StringConcatenate("This Auto-Trader is the copyright of Steve Hopwood. It is available freely at www.forexfactory.com",NL);

   if (TradeOriginalMethod)
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading Original method",NL);
   }//if (TradeOriginalMethod)
   if (TradeRangeMethod)
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading Range method",NL);
   }//if (TradeRangeMethod)

   ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Maximum trades allowed = ",MaxTradesAllowed);
   ScreenMessage=StringConcatenate(ScreenMessage, ":  MinTradesPerBasket = ",MinTradesPerBasket);
   ScreenMessage=StringConcatenate(ScreenMessage, ":  Lot size = ", Lot);
   ScreenMessage=StringConcatenate(ScreenMessage, ":  Maximum spread allowed = ", MaximumSpread,NL);
   if (ShirtProtectionEnabled) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Shirt protection enabled at ",CurrencySymbol, MaxLoss,NL);
   if (TradeWeak)
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading Weak baskets:  ");
      if (TradeRangeMethod)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, "    Trades pending at > ", WeakEntryPending,"  ");
         ScreenMessage=StringConcatenate(ScreenMessage, "    Basket validation at  ", WeakEntryPending - RetraceDistance);      
      }//if (TradeRangeMethod)
      if (TradeOriginalMethod)
      {
         ScreenMessage=StringConcatenate(ScreenMessage, "     WeakUpperBound = ", WeakUpperBound,": WeakLowerBound = ",WeakLowerBound);         
      }//if (TradeOriginalMethod
      if (BasketClosureTP) ScreenMessage=StringConcatenate(NL, ScreenMessage, "     Weak TP ",CurrencySymbol, BasketWeakDollarTP,": ");
      else ScreenMessage=StringConcatenate(NL, ScreenMessage, "    No Weak TP");
      if (BasketClosureSL) ScreenMessage=StringConcatenate(ScreenMessage, "     Weak  SL ",CurrencySymbol, BasketWeakDollarSL);
      else ScreenMessage=StringConcatenate(NL, ScreenMessage, "    No Weak SL");
      ScreenMessage=StringConcatenate(ScreenMessage,NL);
   }//if (TradeWeak)

   if (TradeStrong)
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading Strong baskets: ");
      if (TradeRangeMethod)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, "    Trades pending at < ", StrongEntryPending,"  ");
         ScreenMessage=StringConcatenate(ScreenMessage, "    Basket validation at  ", StrongEntryPending + RetraceDistance);         
      }//if (TradeRangeMethod)
      if (TradeOriginalMethod)
      {
         ScreenMessage=StringConcatenate(ScreenMessage, "     StrongUpperBound = ", StrongUpperBound,": StrongLowerBound = ",StrongLowerBound);
      }//if (TradeOriginalMethod
      if (BasketClosureTP) ScreenMessage=StringConcatenate(NL, ScreenMessage, "    Strong TP ",CurrencySymbol, BasketStrongDollarTP,": ");
      else ScreenMessage=StringConcatenate(NL, ScreenMessage, "    No Strong TP");
      if (BasketClosureSL) ScreenMessage=StringConcatenate(ScreenMessage, "    Strong SL ",CurrencySymbol, BasketStrongDollarSL);
      else ScreenMessage=StringConcatenate(NL, ScreenMessage, "    No Strong SL");
      ScreenMessage=StringConcatenate(ScreenMessage,NL);
   }//if (TradeWeak)

   if (TradeRangeMethod) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "ValidatingTimeFilterMins = ", ValidatingTimeFilterMins, ": Cancelled at ",WeakEntryPending-RetraceDistance-EndValidationPoints,"/",StrongEntryPending+RetraceDistance+EndValidationPoints,NL);

   if (TradeSundayCandle) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading the Sunday candle",NL);
   else  ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Not trading the Sunday candle",NL);
   ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Trading startss at ",DoubleToStr(MondayStartHour,2), " on Monday");
   if (StopTradingOnFriday) ScreenMessage=StringConcatenate(ScreenMessage, ":  Trading stops at ",DoubleToStr(FridayStopHour,2), " on Friday" ,NL);
   else ScreenMessage=StringConcatenate(ScreenMessage,NL);

   if (TradeRangeMethod && StrengthInProfitClose)
   {   
      ScreenMessage=StringConcatenate(ScreenMessage,Gap, "StrengthInProfitClose is enabled. StrengthProfitDollarTarget = ",CurrencySymbol,DoubleToStr(StrengthProfitDollarTarget,2),NL);
   }   
   if (TradeRangeMethod && !StrengthInProfitClose)
   {   
      ScreenMessage=StringConcatenate(ScreenMessage,Gap, "StrengthInProfitClose is disabled.",NL);
   }   

   if (TradeRangeMethod && StrengthInLossClose)
   {   
      ScreenMessage=StringConcatenate(ScreenMessage,Gap, "StrengthInLossClose is enabled. StrengthLossDollar = ",CurrencySymbol,DoubleToStr(StrengthInLossDollar,2),NL);
   }   
   if (TradeRangeMethod && !StrengthInLossClose)
   {   
      ScreenMessage=StringConcatenate(ScreenMessage,Gap, "StrengthInLossClose is disabled.",NL);
   }   

   if (TradeOriginalMethod) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "MinDiff = ",MinDiff,NL);

   if (UseJumpingStop)
   {
      ScreenMessage=StringConcatenate(ScreenMessage,Gap,"Jumping stop activated every ",CurrencySymbol, JumpingStopDollars,": LockInDollars = ", CurrencySymbol, LockInDollars, NL);
   }//if (UseJumpingStop)

   /*if (UseCCI)
   {
      ScreenMessage=StringConcatenate(ScreenMessage,Gap,"CCI filter is enabled. Fast=",CciFast," Slow=",CciSlow,NL);
   }//if (UseCCI)
   else ScreenMessage=StringConcatenate(ScreenMessage,Gap,"CCI filter is disabled",NL);
   */
   if (UseKgGroupFilter)
   {
      ScreenMessage=StringConcatenate(ScreenMessage,Gap,"Using KG RS GROUP to filter individual trades - ", KgFilterMins, " mins time frame",NL);
   }//if (UseCCI)
   else ScreenMessage=StringConcatenate(ScreenMessage,Gap,"Not using KG RS GROUP to filter individual trades",NL);
   if (BasketReverseNotCancel) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"BasketReverseNotCancel is enabled", NL);
   else ScreenMessage=StringConcatenate(ScreenMessage,Gap,"BasketReverseNotCancel is disbled", NL);

   if (UseAsiaTimeFilter && IsAsianSession) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "Asain session open, so not trading  JPY, AUD, NZD triggers",NL);
   if (UseLondonTimeFilter && IsLondonSession) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "London session open, so not trading  EUR, GBP, CHF, CAD triggers",NL);
   if (UseNewYorkTimeFilter && IsNewYorkSession) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "New York session open, so not trading  USD trigger",NL);

   if (JpyIsTrigger && (!UseAsiaTimeFilter || !IsAsianSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "JpyIsTrigger = true.  ");
      if (JpyManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         string Strength = CalaulateDiffForOriginalMethod("JPY");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Jpy strength = ", JpyVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Jpy Weak magic number is ", JpyWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Jpy Strong magic number is ", JpyStrongMagicNumber,NL);
      }
      if (JpyWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", JpyWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(JpyWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(JpyWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (JpyStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", JpyStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(JpyStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(JpyStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (JpyWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (JpyStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);
      if (JpyValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (JpyValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (JpyIsTrigger)   

   if (UsdIsTrigger && (!UseNewYorkTimeFilter || !IsNewYorkSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "UsdIsTrigger = true.  ");
      if (UsdManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("USD");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Usd strength = ", UsdVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Usd Weak magic number is ", UsdWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Usd Strong magic number is ", UsdStrongMagicNumber,NL);
      }
      if (UsdWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", UsdWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(UsdWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(UsdWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (UsdStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", UsdStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(UsdStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(UsdStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (UsdWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (UsdStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (UsdValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (UsdValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (UsdIsTrigger)   

   if (GbpIsTrigger && (!UseLondonTimeFilter || !IsLondonSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "GbpIsTrigger = true.  ");
      if (GbpManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("GBP");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Gbp strength = ", GbpVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Gbp Weak magic number is ", GbpWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Gbp Strong magic number is ", GbpStrongMagicNumber,NL);
      }
      if (GbpWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", GbpWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(GbpWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(GbpWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (GbpStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", GbpStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(GbpStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(GbpStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (GbpWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (GbpStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (GbpValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (GbpValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (GbpIsTrigger)   

   if (EurIsTrigger && (!UseLondonTimeFilter || !IsLondonSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "EurIsTrigger = true.  ");
      if (EurManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("EUR");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Eur strength = ", EurVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Eur Weak magic number is ", EurWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Eur Strong magic number is ", EurStrongMagicNumber,NL);
      }
      if (EurWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", EurWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(EurWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(EurWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (EurStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", EurStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(EurStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(EurStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (EurWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (EurStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (EurValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (EurValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (EurIsTrigger)   

   if (ChfIsTrigger && (!UseLondonTimeFilter || !IsLondonSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "ChfIsTrigger = true.  ");
      if (ChfManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("CHF");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Chf strength = ", ChfVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Chf Weak magic number is ", ChfWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Chf Strong magic number is ", ChfStrongMagicNumber,NL);
      }
      if (ChfWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", ChfWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(ChfWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(ChfWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (ChfStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", ChfStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(ChfStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(ChfStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (ChfWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (ChfStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (ChfValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (ChfValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (ChfIsTrigger)   

   if (AudIsTrigger && (!UseAsiaTimeFilter || !IsAsianSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "AudIsTrigger = true.  ");
      if (AudManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("AUD");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Aud strength = ", AudVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Aud Weak magic number is ", AudWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Aud Strong magic number is ", AudStrongMagicNumber,NL);
      }
      if (AudWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", AudWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(AudWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(AudWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (AudStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", AudStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(AudStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(AudStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (AudWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (AudStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (AudValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (AudValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (AudIsTrigger)   

   if (NzdIsTrigger && (!UseAsiaTimeFilter || !IsAsianSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "NzdIsTrigger = true.  ");
      if (NzdManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("NZD");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Nzd strength = ", NzdVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Nzd Weak magic number is ", NzdWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Nzd Strong magic number is ", NzdStrongMagicNumber,NL);
      }
      if (NzdWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", NzdWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(NzdWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(NzdWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (NzdStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", NzdStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(NzdStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(NzdStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (NzdWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (NzdStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (NzdValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (NzdValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (NzdIsTrigger)   

   if (CadIsTrigger && (!UseLondonTimeFilter || !IsLondonSession))
   {
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "CadIsTrigger = true.  ");
      if (CadManagedByThisEA) ScreenMessage=StringConcatenate(ScreenMessage, "Trades managed by this EA.");
      ScreenMessage=StringConcatenate(ScreenMessage, NL);
      if (TradeOriginalMethod)
      {
         Strength = CalaulateDiffForOriginalMethod("CAD");
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Red line = ",DoubleToStr(RedLine,2), ": White line = ", DoubleToStr(WhiteLine,2),": Direction = ", Strength, ": Diff = ", DoubleToStr(Diff,2), NL);
      }//
      ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Cad strength = ", CadVal, NL);
      if (ShowMagicNumbersOnScreen)
      {   
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Cad Weak magic number is ", CadWeakMagicNumber,NL);
         ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Cad Strong magic number is ", CadStrongMagicNumber,NL);
      }
      if (CadWeakTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", CadWeakTradesSent, " Weak trades open. Upl is ",CurrencySymbol, DoubleToStr(CadWeakUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(CadWeakMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (CadStrongTradesSent > 0) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      ", CadStrongTradesSent, " Strong trades open. Upl is ",CurrencySymbol, DoubleToStr(CadStrongUpl,2), NL);
      if (UseJumpingStop)
      {
         GvName=DoubleToStr(CadStrongMagicNumber,0);
         if(GlobalVariableCheck(GvName)) ScreenMessage=StringConcatenate(ScreenMessage,Gap,"      Locked profits = ",CurrencySymbol, GlobalVariableGet(GvName),NL);
      }//if (UseJumpingStop)
      if (CadWeakPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Weak basket pending",NL);
      if (CadStrongPending) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Strong basket pending",NL);      
      if (CadValidatingStrong) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Strong basket",NL);
      if (CadValidatingWeak) ScreenMessage=StringConcatenate(ScreenMessage, Gap, "      Validating Weak basket",NL);
   }// if (CadIsTrigger)   

   Comment(ScreenMessage);

}// End void DisplayUserFeedback()

bool CloseBasket(int MagicNumber)
{

   bool result=true;// Set to false if a closure fails

   for (int cc = OrdersTotal(); cc >= 0 ; cc--)
   {
      if (!OrderSelect(cc,SELECT_BY_POS)) continue;
      if (OrderMagicNumber()==MagicNumber)      
      {
         if (OrderType()==OP_BUY)
         {
            bool ticket =OrderCloseReliable(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(), MODE_BID),10,CLR_NONE);
            if (!ticket) result=false;
            else cc++;
         }//if (OrderType()==OP_BUY)   

         if (OrderType()==OP_SELL)
         {
            ticket=OrderCloseReliable(OrderTicket(),OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK),10,CLR_NONE);
            if (!ticket) result=false;
            else cc++;
         }//if (OrderType()==OP_SELL)   

      }//if (OrderMagicNumber()==MagicNumber)
   }//for (int cc=0; cc<OrdersTotal(); cc++)

   return(result);

}// End void CloseBasket(MagicNumber)

void ManageOpenBaskets(int MagicNumber)
{

   double StrongSL=BasketStrongDollarSL;
   double WeakSL=BasketWeakDollarSL;
   if (BasketClosureSL)
   {
      if (StrongSL > 0) StrongSL = -StrongSL;
      if (WeakSL > 0) WeakSL = -WeakSL;
   }//if (BasketClosureSL)

   string GvName; // Holds name of global variables

   if (MagicNumber == JpyStrongMagicNumber)
   {

      if (JpyCloseStrong)
      {
         bool ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            JpyCloseStrong=false;
            JpyStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
      }//if (JpyCloseStrong)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) bool CloseNeeded = StrengthProfitCloseDecision(JpyStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(JpyStrongMagicNumber);
         if (CloseNeeded)
         {
            JpyCloseStrong=true;
            if (ShowAlerts) Alert("JPY Strong basket is being closed by the StrengthInProfitClose method  ",JpyVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               JpyCloseStrong=false;
               JpyStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (JpyStrongUpl >= BasketStrongDollarTP)
         {
            JpyCloseStrong=true;
            if (ShowAlerts) Alert("JPY Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               JpyCloseStrong=false;
               JpyStrongPending=false;
               return;
            }//if (ClosureSucceeded) 
            return;
         }//if (JpyStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (JpyStrongUpl <= StrongSL)
         {
            JpyCloseStrong=true;
            if (ShowAlerts) Alert("JPY Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               JpyCloseStrong=false;
               JpyStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (JpyStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(JpyStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            double JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (JpyStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               JpyCloseStrong=true;
               if (ShowAlerts) Alert("JPY Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded)
               {
                  JpyCloseStrong=false;
                  JpyStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (JpyStrongUpl <= JsValue)

            if (JpyStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("JPY Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (JpyStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (JpyStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("JPY Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (JpyStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == JpyStrongMagicNumber)

   if (MagicNumber == JpyWeakMagicNumber)
   {

      if (JpyCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            JpyCloseWeak=false;
            JpyWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
      }//if (JpyCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(JpyWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(JpyWeakMagicNumber);
         if (CloseNeeded)
         {
            JpyCloseWeak=true;
            if (ShowAlerts) Alert("JPY Weak basket is being closed by the StrengthInProfitClose method  ",JpyVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               JpyCloseWeak=false;
               JpyWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (JpyWeakUpl >= BasketWeakDollarTP)
         {
            JpyCloseWeak=true;
            if (ShowAlerts) Alert("Jpy Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               JpyCloseWeak=false;
               JpyWeakPending=false;
               return;
            }//if (ClosureSucceeded) 
            return;
         }//if (JpyWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (JpyWeakUpl <= WeakSL)
         {
            JpyCloseWeak=true;
            if (ShowAlerts) Alert("JPY Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               JpyCloseWeak=false;
               JpyWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (JpyWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(JpyWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (JpyWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               JpyCloseWeak=true;
               if (ShowAlerts) Alert("JPY Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  JpyCloseWeak=false;
                  JpyWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (JpyWeakUpl <= JsValue)

            if (JpyWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("JPY Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (JpyWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (JpyWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("JPY Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (JpyWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == JpyWeakMagicNumber)

   if (MagicNumber == UsdStrongMagicNumber)
   {

      if (UsdCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            UsdCloseStrong=false;
            UsdStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
      } //if (JpyCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(UsdStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(UsdStrongMagicNumber);
         if (CloseNeeded)
         {
            UsdCloseStrong=true;
            if (ShowAlerts) Alert("USD Strong basket is being closed by the StrengthInProfitClose method  ",UsdVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               UsdCloseStrong=false;
               UsdStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (UsdStrongUpl >= BasketStrongDollarTP)
         {
            UsdCloseStrong=true;
            if (ShowAlerts) Alert("Usd Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               UsdCloseStrong=false;
               UsdStrongPending=false;
               return;
            }//if (ClosureSucceeded) 
            return;
         }//if (UsdStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (UsdStrongUpl <= StrongSL)
         {
            UsdCloseStrong=true;
            if (ShowAlerts) Alert("USD Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               UsdCloseStrong=false;
               UsdStrongPending=false;
               return;
            }//if (ClosureSucceeded) 
            return;
         }//if (UsdStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(UsdStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (UsdStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               UsdCloseStrong=true;
               if (ShowAlerts) Alert("USD Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
            {
               UsdCloseStrong=false;
               UsdStrongPending=false;
               return;
            }//if (ClosureSucceeded) 
               return;
            }//if (UsdStrongUpl <= JsValue)

            if (UsdStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("USD Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (UsdStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (UsdStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("USD Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (UsdStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == UsdStrongMagicNumber)

   if (MagicNumber == UsdWeakMagicNumber)
   {

      if (UsdCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            UsdCloseWeak=false;
            UsdWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
      }//if (UsdCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(UsdWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(UsdWeakMagicNumber);
         if (CloseNeeded)
         {
            UsdCloseWeak=true;
            if (ShowAlerts) Alert("USD Weak basket is being closed by the StrengthInProfitClose method  ",UsdVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               UsdCloseWeak=false;
               UsdWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (UsdWeakUpl >= BasketWeakDollarTP)
         {
            UsdCloseWeak=true;
            if (ShowAlerts) Alert("Usd Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               UsdCloseWeak=false;
               UsdWeakPending=false;
               return;
            }//if (ClosureSucceeded) 
            return;
         }//if (UsdWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (UsdWeakUpl <= WeakSL)
         {
            UsdCloseWeak=true;
            if (ShowAlerts) Alert("USD Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               UsdCloseWeak=false;
               UsdWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
            return;
         }//if (UsdWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(UsdWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (UsdWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               UsdCloseWeak=true;
               if (ShowAlerts) Alert("USD Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  UsdCloseWeak=false;
                  UsdWeakPending=false;
                  return;
               }//if (ClosureSucceeded) return;
            }//if (UsdWeakUpl <= JsValue)

            if (UsdWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("USD Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (UsdWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (UsdWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("USD Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (UsdWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == UsdWeakMagicNumber)   

   if (MagicNumber == GbpStrongMagicNumber)
   {

      if (GbpCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            GbpCloseStrong=false;
            GbpStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
      }// if (GbpCloseStrong)    

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(GbpStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(GbpStrongMagicNumber);
         if (CloseNeeded)
         {
            GbpCloseStrong=true;
            if (ShowAlerts) Alert("GBP Strong basket is being closed by the StrengthInProfitClose method  ",GbpVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               GbpCloseStrong=false;
               GbpStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (GbpStrongUpl >= BasketStrongDollarTP)
         {
            GbpCloseStrong=true;
            if (ShowAlerts) Alert("Gbp Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               GbpCloseStrong=false;
               GbpStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (GbpStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (GbpStrongUpl <= StrongSL)
         {
            GbpCloseStrong=true;
            if (ShowAlerts) Alert("GBP Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               GbpCloseStrong=false;
               GbpStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (GbpStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(GbpStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (GbpStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               GbpCloseStrong=true;
               if (ShowAlerts) Alert("GBP Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  GbpCloseStrong=false;
                  GbpStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (GbpStrongUpl <= JsValue)

            if (GbpStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("GBP Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (GbpStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (GbpStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("GBP Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (GbpStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == GbpStrongMagicNumber)

   if (MagicNumber == GbpWeakMagicNumber)
   {

      if (GbpCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            GbpCloseWeak=false;
            GbpWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }//if (GbpCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(GbpWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(GbpWeakMagicNumber);
         if (CloseNeeded)
         {
            GbpCloseWeak=true;
            if (ShowAlerts) Alert("GBP Weak basket is being closed by the StrengthInProfitClose method  ",GbpVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               GbpCloseWeak=false;
               GbpWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (GbpWeakUpl >= BasketWeakDollarTP)
         {
            GbpCloseWeak=true;
            if (ShowAlerts) Alert("Gbp Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               GbpCloseWeak=false;
               GbpWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (GbpWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (GbpWeakUpl <= WeakSL)
         {
            GbpCloseWeak=true;
            if (ShowAlerts) Alert("GBP Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               GbpCloseWeak=false;
               GbpWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (GbpWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(GbpWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (GbpWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               GbpCloseWeak=true;
               if (ShowAlerts) Alert("GBP Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  GbpCloseWeak=false;
                  GbpWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (GbpWeakUpl <= JsValue)

            if (GbpWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("GBP Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (GbpWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (GbpWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("GBP Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (GbpWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == GbpWeakMagicNumber)   

   if (MagicNumber == EurStrongMagicNumber)
   {

      if (EurCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            EurCloseStrong=false;
            EurStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
      }// if (EurCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(EurStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(EurStrongMagicNumber);
         if (CloseNeeded)
         {
            EurCloseStrong=true;
            if (ShowAlerts) Alert("EUR Strong basket is being closed by the StrengthInProfitClose method  ",EurVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               EurCloseStrong=false;
               EurStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (EurStrongUpl >= BasketStrongDollarTP)
         {
            EurCloseStrong=true;
            if (ShowAlerts) Alert("Eur Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               EurCloseStrong=false;
               EurStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (EurStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (EurStrongUpl <= StrongSL)
         {
            EurCloseStrong=true;
            if (ShowAlerts) Alert("EUR Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               EurCloseStrong=false;
               EurStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (EurStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(EurStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (EurStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               EurCloseStrong=true;
               if (ShowAlerts) Alert("EUR Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  EurCloseStrong=false;
                  EurStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (EurStrongUpl <= JsValue)

            if (EurStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("EUR Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (EurStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (EurStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("EUR Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (EurStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == EurStrongMagicNumber)

   if (MagicNumber == EurWeakMagicNumber)
   {

      if (EurCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            EurCloseWeak=false;
            EurWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }//if (EurCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(EurWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(EurWeakMagicNumber);
         if (CloseNeeded)
         {
            EurCloseWeak=true;
            if (ShowAlerts) Alert("EUR Weak basket is being closed by the StrengthInProfitClose method  ",EurVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               EurCloseWeak=false;
               EurWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (EurWeakUpl >= BasketWeakDollarTP)
         {
            EurCloseWeak=true;
            if (ShowAlerts) Alert("Eur Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               EurCloseWeak=false;
               EurWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (EurWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (EurWeakUpl <= WeakSL)
         {
            EurCloseWeak=true;
            if (ShowAlerts) Alert("EUR Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               EurCloseWeak=false;
               EurWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (EurWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(EurWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (EurWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               EurCloseWeak=true;
               if (ShowAlerts) Alert("EUR Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  EurCloseWeak=false;
                  EurWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (EurWeakUpl <= JsValue)

            if (EurWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("EUR Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (EurWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (EurWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("EUR Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (EurWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == EurWeakMagicNumber)

   if (MagicNumber == ChfStrongMagicNumber)
   {

      if (ChfCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            ChfCloseStrong=false;
            ChfStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }// if (ChfCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(ChfStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(ChfStrongMagicNumber);
         if (CloseNeeded)
         {
            ChfCloseStrong=true;
            if (ShowAlerts) Alert("CHF Strong basket is being closed by the StrengthInProfitClose method  ",ChfVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               ChfCloseStrong=false;
               ChfStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (ChfStrongUpl >= BasketStrongDollarTP)
         {
            ChfCloseStrong=true;
            if (ShowAlerts) Alert("Chf Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               ChfCloseStrong=false;
               ChfStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (ChfStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (ChfStrongUpl <= StrongSL)
         {
            ChfCloseStrong=true;
            if (ShowAlerts) Alert("CHF Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               ChfCloseStrong=false;
               ChfStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (ChfStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(ChfStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (ChfStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               ChfCloseStrong=true;
               if (ShowAlerts) Alert("CHF Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  ChfCloseStrong=false;
                  ChfStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (ChfStrongUpl <= JsValue)

            if (ChfStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("CHF Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (ChfStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (ChfStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("CHF Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (ChfStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == ChfStrongMagicNumber)

   if (MagicNumber == ChfWeakMagicNumber)
   {

      if (ChfCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            ChfCloseWeak=false;
            ChfWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
      }//if (ChfCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(ChfWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(ChfWeakMagicNumber);
         if (CloseNeeded)
         {
            ChfCloseWeak=true;
            if (ShowAlerts) Alert("CHF Weak basket is being closed by the StrengthInProfitClose method  ",ChfVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               ChfCloseWeak=false;
               ChfWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (ChfWeakUpl >= BasketWeakDollarTP)
         {
            ChfCloseWeak=true;
            if (ShowAlerts) Alert("Chf Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               ChfCloseWeak=false;
               ChfWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (ChfWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (ChfWeakUpl <= WeakSL)
         {
            ChfCloseWeak=true;
            if (ShowAlerts) Alert("CHF Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               ChfCloseWeak=false;
               ChfWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (ChfWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(ChfWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (ChfWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               ChfCloseWeak=true;
               if (ShowAlerts) Alert("CHF Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  ChfCloseWeak=false;
                  ChfWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (ChfWeakUpl <= JsValue)

            if (ChfWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("CHF Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (ChfWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (ChfWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("CHF Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (ChfWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == ChfWeakMagicNumber)

   if (MagicNumber == AudStrongMagicNumber)
   {

      if (AudCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            AudCloseStrong=false;
            AudStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }// if (AudCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(AudStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(AudStrongMagicNumber);
         if (CloseNeeded)
         {
            AudCloseStrong=true;
            if (ShowAlerts) Alert("AUD Strong basket is being closed by the StrengthInProfitClose method  ",AudVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               AudCloseStrong=false;
               AudStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (AudStrongUpl >= BasketStrongDollarTP)
         {
            AudCloseStrong=true;
            if (ShowAlerts) Alert("Aud Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               AudCloseStrong=false;
               AudStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (AudStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (AudStrongUpl <= StrongSL)
         {
            AudCloseStrong=true;
            if (ShowAlerts) Alert("Aud Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               AudCloseStrong=false;
               AudStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (AudStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(AudStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (AudStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               AudCloseStrong=true;
               if (ShowAlerts) Alert("Aud Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  AudCloseStrong=false;
                  AudStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (AudStrongUpl <= JsValue)

            if (AudStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Aud Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (AudStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (AudStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Aud Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (AudStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == AudStrongMagicNumber)

   if (MagicNumber == AudWeakMagicNumber)
   {

      if (AudCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            AudCloseWeak=false;
            AudWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }//if (AudCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(AudWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(AudWeakMagicNumber);
         if (CloseNeeded)
         {
            AudCloseWeak=true;
            if (ShowAlerts) Alert("AUD Weak basket is being closed by the StrengthInProfitClose method  ",AudVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               AudCloseWeak=false;
               AudWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (AudWeakUpl >= BasketWeakDollarTP)
         {
            AudCloseWeak=true;
            if (ShowAlerts) Alert("Aud Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               AudCloseWeak=false;
               AudWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (AudWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (AudWeakUpl <= WeakSL)
         {
            AudCloseWeak=true;
            if (ShowAlerts) Alert("Aud Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               AudCloseWeak=false;
               AudWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (AudWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(AudWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (AudWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               AudCloseWeak=true;
               if (ShowAlerts) Alert("Aud Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  AudCloseWeak=false;
                  AudWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (AudWeakUpl <= JsValue)

            if (AudWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Aud Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (AudWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (AudWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Aud Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (AudWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)      

   }// if (MagicNumber == AudWeakMagicNumber)

   if (MagicNumber == NzdStrongMagicNumber)
   {

      if (NzdCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            NzdCloseStrong=false;
            NzdStrongPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }// if (NzdCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(NzdStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(NzdStrongMagicNumber);
         if (CloseNeeded)
         {
            NzdCloseStrong=true;
            if (ShowAlerts) Alert("NZD Strong basket is being closed by the StrengthInProfitClose method  ",NzdVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               NzdCloseStrong=false;
               NzdStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {      
         if (NzdStrongUpl >= BasketStrongDollarTP)
         {
            NzdCloseStrong=true;
            if (ShowAlerts) Alert("Nzd Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               NzdCloseStrong=false;
               NzdStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (NzdStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (NzdStrongUpl <= StrongSL)
         {
            NzdCloseStrong=true;
            if (ShowAlerts) Alert("Nzd Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               NzdCloseStrong=false;
               NzdStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (NzdStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(NzdStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (NzdStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               NzdCloseStrong=true;
               if (ShowAlerts) Alert("Nzd Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  NzdCloseStrong=false;
                  NzdStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (NzdStrongUpl <= JsValue)

            if (NzdStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Nzd Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (NzdStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (NzdStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Nzd Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (NzdStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == NzdStrongMagicNumber)

   if (MagicNumber == NzdWeakMagicNumber)
   {

      if (NzdCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            NzdCloseWeak=false;
            NzdWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }//if (NzdCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(NzdWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(NzdWeakMagicNumber);
         if (CloseNeeded)
         {
            NzdCloseWeak=true;
            if (ShowAlerts) Alert("NZD Weak basket is being closed by the StrengthInProfitClose method  ",NzdVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               NzdCloseWeak=false;
               NzdWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (NzdWeakUpl >= BasketWeakDollarTP)
         {
            NzdCloseWeak=true;
            if (ShowAlerts) Alert("Nzd Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               NzdCloseWeak=false;
               NzdWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (NzdWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (NzdWeakUpl <= WeakSL)
         {
            NzdCloseWeak=true;
            if (ShowAlerts) Alert("Nzd Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               NzdCloseWeak=false;
               NzdWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (NzdWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(NzdWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (NzdWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               NzdCloseWeak=true;
               if (ShowAlerts) Alert("Nzd Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  NzdCloseWeak=false;
                  NzdWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (NzdWeakUpl <= JsValue)

            if (NzdWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Nzd Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (NzdWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (NzdWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Nzd Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (NzdWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)
   }// if (MagicNumber == NzdWeakMagicNumber)

   if (MagicNumber == CadStrongMagicNumber)
   {

      if (CadCloseStrong)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            CadCloseStrong=false;
            CadStrongPending=false;            
            return;
         }//if (ClosureSucceeded) 
         return;
      }// if (CadCloseStrong)      

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(CadStrongMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(CadStrongMagicNumber);
         if (CloseNeeded)
         {
            CadCloseStrong=true;
            if (ShowAlerts) Alert("CAD Strong basket is being closed by the StrengthInProfitClose method  ",CadVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               CadCloseStrong=false;
               CadStrongPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)      

      if (BasketClosureTP)
      {      
         if (CadStrongUpl >= BasketStrongDollarTP)
         {
            CadCloseStrong=true;
            if (ShowAlerts) Alert("Cad Strong basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               CadCloseStrong=false;
               CadStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (CadStrongUpl >= BasketStrongDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (CadStrongUpl <= StrongSL)
         {
            CadCloseStrong=true;
            if (ShowAlerts) Alert("Cad Strong basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               CadCloseStrong=false;
               CadStrongPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (CadStrongUpl <= StrongSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(CadStrongMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (CadStrongUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               CadCloseStrong=true;
               if (ShowAlerts) Alert("Cad Strong basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  CadCloseStrong=false;
                  CadStrongPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (CadStrongUpl <= JsValue)

            if (CadStrongUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Cad Strong basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (CadStrongUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (CadStrongUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Cad Strong basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (CadStrongUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)

   }// if (MagicNumber == CadStrongMagicNumber)

   if (MagicNumber == CadWeakMagicNumber)
   {

      if (CadCloseWeak)
      {
         ClosureSucceeded = CloseBasket(MagicNumber);
         if (ClosureSucceeded) 
         {
            CadCloseWeak=false;
            CadWeakPending=false;
            return;
         }//if (ClosureSucceeded) 
         return;
      }//if (CadCloseWeak)

      if (TradeRangeMethod)
      {
         if (StrengthInProfitClose) CloseNeeded = StrengthProfitCloseDecision(CadWeakMagicNumber);
         if (StrengthInLossClose) CloseNeeded = StrengthLossCloseDecision(CadWeakMagicNumber);
         if (CloseNeeded)
         {
            CadCloseWeak=true;
            if (ShowAlerts) Alert("CAD Weak basket is being closed by the StrengthInProfitClose method  ",CadVal);
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded)
            {
               CadCloseWeak=false;
               CadWeakPending=false;
               return;
            }//if (ClosureSucceeded)             
         }// if (CloseNeeded)
      }//if (TradeRangeMethod)

      if (BasketClosureTP)
      {
         if (CadWeakUpl >= BasketWeakDollarTP)
         {
            CadCloseWeak=true;
            if (ShowAlerts) Alert("CAD Weak basket hit TP. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               CadCloseWeak=false;
               CadWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (CadWeakUpl >= BasketWeakDollarTP)
      }//if (BasketClosureTP)

      if (BasketClosureSL)
      {      
         if (CadWeakUpl <= WeakSL)
         {
            CadCloseWeak=true;
            if (ShowAlerts) Alert("CAD Weak basket hit SL. Closing the basket.");
            ClosureSucceeded = CloseBasket(MagicNumber);
            if (ClosureSucceeded) 
            {
               CadCloseWeak=false;
               CadWeakPending=false;
               return;
            }//if (ClosureSucceeded) 

            return;
         }//if (CadWeakUpl <= WeakSL)
      }//if (BasketClosureSL)

      if (UseJumpingStop)
      {

         GvName = DoubleToStr(CadWeakMagicNumber, 0);
         if (GlobalVariableCheck(GvName))
         {
            JsValue = GlobalVariableGet(GvName);// JumpingStopValue
            if (CadWeakUpl <= JsValue)
            {
               GlobalVariableDel(GvName);
               CadCloseWeak=true;
               if (ShowAlerts) Alert("Cad Weak basket hit jumping SL. Closing the basket.");
               ClosureSucceeded = CloseBasket(MagicNumber);
               if (ClosureSucceeded) 
               {
                  CadCloseWeak=false;
                  CadWeakPending=false;
                  return;
               }//if (ClosureSucceeded) 

               return;
            }//if (CadWeakUpl <= JsValue)

            if (CadWeakUpl >= JsValue + (JumpingStopDollars * 2))
            {
               JsValue = JsValue + JumpingStopDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Cad Weak basket jumping stop moved to ",CurrencySymbol,JsValue);
            }//if (CadWeakUpl >= JsValue + (JumpingStopDollars * 2))
         }//if (GlobalVariableCheck(GvName))

         if (!GlobalVariableCheck(GvName))
         {
            if (CadWeakUpl >= JumpingStopDollars)
            {
               JsValue = LockInDollars;
               GlobalVariableSet(GvName, JsValue);
               if (ShowAlerts) Alert("Cad Weak basket jumping stop set at ",CurrencySymbol,JsValue);
            }//if (CadWeakUpl <= JumpingStopDollars)
         }//if (!GlobalVariableCheck(GvName))
      }//if (UseJumpingStop)
   }// if (MagicNumber == CadWeakMagicNumber)

}// End void ManageOpenBaskets(int MagicNumber)

bool CheckIfTradeAlreadyExists(string symbol, int type, int MagicNumber)
   {

      if (OrdersTotal()==0) return(false);
      for (int cc = OrdersTotal(); cc > 0; cc--)
      {
          if (!OrderSelect(cc, SELECT_BY_POS,MODE_TRADES)) continue;
          if (OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber && OrderType()==type) return(true);
      }
      return(false);

   }// end bool CheckIfTradeAlreadyExists(string symbol, int type)

void JpySendStrongTrades()
{

   string symbol;
   string TradeComment = JpyTradeComment;
   int MagicNumber = JpyStrongMagicNumber;
   JpyStrongPending=false;

   symbol = StringConcatenate("USDJPY", PairSuffix);
   bool TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeUSDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      bool result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("EURJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeEURJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("GBPJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeGBPJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread)
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("CHFJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeCHFJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread)
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("AUDJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeAUDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread)
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("NZDJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeNZDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread)
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

   symbol = StringConcatenate("CADJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeCADJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread)
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) JpyStrongTradesSent++;
   }

}// End void JpySendStrongTrades()

void JpySendWeakTrades()
{

   string symbol;
   string TradeComment = JpyTradeComment;
   int MagicNumber = JpyWeakMagicNumber;
   JpyWeakPending=false;

   symbol = StringConcatenate("USDJPY", PairSuffix);
   bool TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeUSDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      bool result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("EURJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeEURJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("GBPJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeGBPJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("CHFJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeCHFJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("AUDJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeAUDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("NZDJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeNZDJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

   symbol = StringConcatenate("CADJPY", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeCADJPY && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) JpyWeakTradesSent++;
   }

}// End void JpySendStrongTrades()

void JpyCountOpenTrades()
{

   JpyStrongTradesSent=0;
   JpyWeakTradesSent=0;
   JpyWeakUpl=0;
   JpyStrongUpl=0;

   if (OrdersTotal() == 0) return(0);

   for (int cc = 0; cc < OrdersTotal(); cc++)   
   {
      OrderSelect(cc, SELECT_BY_POS);
      if (OrderMagicNumber()== JpyWeakMagicNumber) 
      {
         JpyWeakTradesSent++;
         JpyWeakUpl=JpyWeakUpl + OrderProfit();
      }

      if (OrderMagicNumber()== JpyStrongMagicNumber) 
      {
         JpyStrongTradesSent++;
         JpyStrongUpl = JpyStrongUpl + OrderProfit();
      }
   }//for (int cc = 0; cc < OrdersTotal(); cc++)

}// End void JpyCountOpenTrades()

void xxxJpyTrades()
{

   JpyCountOpenTrades();

   string GvName;
   if (JpyStrongTradesSent == 0)
   {
      GvName = DoubleToStr(JpyStrongMagicNumber,0);
      if (GlobalVariableCheck(GvName)) GlobalVariableDel(GvName);
   }//if (JpyStrongTradesSent == 0)
   if (JpyWeakTradesSent == 0)
   {
      GvName = DoubleToStr(JpyWeakMagicNumber,0);
      if (GlobalVariableCheck(GvName)) GlobalVariableDel(GvName);
   }//if (JpyWeakTradesSent == 0)

   if (JpyStrongTradesSent >= JpyMaxTrades)
   {
      JpySendStrongTrades=false;
      JpyStrongPending=false;
   }//if (NoOfTradesOpened >= JpyMaxTrades)   

   if (JpyStrongTradesSent > 0 && JpyManagedByThisEA)
   {
      ManageOpenBaskets(JpyStrongMagicNumber);
   }//if (JpyStrongTradesSent > 0 && JpyManagedByThisEA)

   if (JpyWeakTradesSent >= JpyMaxTrades)
   {
      JpySendWeakTrades=false;
      JpyWeakPending=false;
   }//if (NoOfTradesOpened >= JpyMaxTrades)

   if (JpyWeakTradesSent > 0 && JpyManagedByThisEA)
   {
      ManageOpenBaskets(JpyWeakMagicNumber);
   }//if (JpyWeakTradesSent > 0 && JpyManagedByThisEA)

   JpyVal = iCustom(NULL,0, "KG RS GROUP V1.1",1,0);
   DisplayUserFeedback();

   if (JpySendStrongTrades && OrdersTotal() < MaxTradesAllowed)
   {
      JpySendStrongTrades();
      if (JpyStrongTradesSent >= JpyMaxTrades)// Basket opening has succeeded
      {
         JpySendStrongTrades=false;
         JpyStrongPending=false;
         return;
      }//if (NoOfTradesOpened >= JpyMaxTrades)
   }//if (JpyStrongTradesSent)

   if (JpySendWeakTrades && OrdersTotal() < MaxTradesAllowed)
   {
      JpySendWeakTrades();
      if (JpyWeakTradesSent >= JpyMaxTrades)// Basket opening has succeeded
      {
         JpySendWeakTrades=false;
         JpyWeakPending=false;
         return;
      }//if (NoOfTradesOpened >= JpyMaxTrades)
   }//if (JpyStrongTradesSent)

   if (UseAsiaTimeFilter && IsAsianSession)
   {
      JpyStrongPending = false;
      JpyValidatingStrong=false;
      JpyWeakPending = false;
      JpyValidatingWeak=false;
      return;
   }//if (UseAsiaTimeFilter && IsAsianSession)

   if (TradeRangeMethod)
   {

      if (JpyVal < StrongEntryPending && JpyStrongTradesSent==0 && TradeStrong && !JpyValidatingStrong) 
      {
         JpyStrongPending=true;
         return;
      }//if (JpyVal < StrongEntryPending && JpyStrongTradesSent==0 && TradeStrong) 

      if (JpyStrongPending && JpyVal >= (StrongEntryPending+RetraceDistance))
      {
         JpyValidatingStrong=true;
         JpyPendingTime=TimeCurrent();
         JpyStrongPending=false;
         return;
      }//if (JpyStrongPending && JpyVal > StrongEntryPending)   

      if (JpyValidatingStrong)
      {   

         bool TimeUp = HasPendingWaitingTimePassed(JpyPendingTime); // Returns true if so
         if ((TimeUp && JpyVal >= (StrongEntryPending+RetraceDistance)) || JpyVal >= StrongEntryPending+RetraceDistance+EndValidationPoints)
         {   

            int TradesAvailable = CalculateNoOfAvailableTrades(JpyStrongMagicNumber);
            if (TradesAvailable < MinTradesPerBasket)
            {
               JpyStrongPending=false;
               JpyValidatingStrong=false;
               return;
            }
            if (ShowAlerts) Alert("Opening Strong JPY basket");
            JpyStrongTradesSent=true;
            JpySendStrongTrades();
            JpyStrongPending=false;
            JpyValidatingStrong=false;
         }   //if (TimeUp && JpyVal >= (StrongEntryPending+RetraceDistance))

         if ((TimeUp && JpyVal < (StrongEntryPending+RetraceDistance)) || (!TimeUp && JpyVal < (StrongEntryPending+RetraceDistance)))
         {
            JpyValidatingStrong=false;
         }//if (TimeUp && JpyVal < (StrongEntryPending+RetraceDistance))         
      }//if (JpyValidatingStrong)

      if (JpyVal > WeakEntryPending && JpyWeakTradesSent==0 && TradeWeak && !JpyValidatingWeak) 
      {
         JpyWeakPending=true;
         return;
      }//if (JpyVal < WeakEntryPending && JpyWeakTradesSent==0 && TradeWeak) 

      if (JpyWeakPending && JpyVal <= (WeakEntryPending-RetraceDistance))
      {
         JpyValidatingWeak=true;
         JpyPendingTime=TimeCurrent();
         JpyWeakPending=false;
         return;
      }//if (JpyWeakPending && JpyVal > WeakEntryPending)   

      if (JpyValidatingWeak)
      {   

         TimeUp = HasPendingWaitingTimePassed(JpyPendingTime); // Returns true if so
         if ((TimeUp && JpyVal <= (WeakEntryPending-RetraceDistance)) || JpyVal <= WeakEntryPending-RetraceDistance-RetraceDistance)
         {   

            TradesAvailable = CalculateNoOfAvailableTrades(JpyWeakMagicNumber);
            if (TradesAvailable < MinTradesPerBasket)
            {
               JpyWeakPending=false;
               JpyValidatingWeak=false;
               return;
            }
            if (ShowAlerts) Alert("Opening Weak JPY basket");
            JpyWeakTradesSent=true;
            JpySendWeakTrades();
            JpyWeakPending=false;
            JpyValidatingWeak=false;
         }   //if (TimeUp && JpyVal >= (WeakEntryPending+RetraceDistance))

         if ((TimeUp && JpyVal > (WeakEntryPending-RetraceDistance)) || (!TimeUp && JpyVal > (WeakEntryPending-RetraceDistance)))
         {
            JpyValidatingWeak=false;
         }//if (TimeUp && JpyVal < (WeakEntryPending+RetraceDistance))         
      }//if (JpyValidatingWeak)
   }//if (TradeRangeMethod)

   if (TradeOriginalMethod)
   {

      string Strength = CalaulateDiffForOriginalMethod("JPY");

      if (Strength == "Weak")
      {
         if ((JpyVal <= WeakUpperBound && JpyVal >= WeakLowerBound) && Diff >= MinDiff && JpyWeakTradesSent ==0 && OrdersTotal() < MaxTradesAllowed)
         {

            TradesAvailable = CalculateNoOfAvailableTrades(JpyWeakMagicNumber);
            if (TradesAvailable < MinTradesPerBasket)
            {
               return;
            }//if (TradesAvailable < MinTradesPerBasket)
            if (ShowAlerts) Alert("Opening Weak JPY basket");
            JpySendWeakTrades=true;
            JpySendWeakTrades();            
         }// if ((JpyVal <= WeakUpperBound && JpyVal >= WeakLowerBound)&& Diff >= MinDiff)
      } // if (Strength == "Weak")

      if (Strength == "Strong")
      {
         if ((JpyVal <= StrongUpperBound && JpyVal >= StrongLowerBound) && Diff >= MinDiff && JpyStrongTradesSent == 0 && OrdersTotal() < MaxTradesAllowed)
         {

            TradesAvailable = CalculateNoOfAvailableTrades(JpyStrongMagicNumber);
            if (TradesAvailable < MinTradesPerBasket)
            {
               return;
            }//if (TradesAvailable < MinTradesPerBasket)
            if (ShowAlerts) Alert("Opening Strong JPY basket");
            JpySendStrongTrades=true;
            JpySendStrongTrades();            
         }// if ((JpyVal <= WeakUpperBound && JpyVal >= WeakLowerBound)&& Diff >= MinDiff)
      } // if (Strength == "Strong")

   }//if (TradeOriginalMethod)

}// void xxxJpyTrades()

void UsdSendStrongTrades()
{

   string symbol;
   string TradeComment = UsdTradeComment;
   int MagicNumber = UsdStrongMagicNumber;
   UsdStrongPending=false;

   symbol = StringConcatenate("USDJPY", PairSuffix);
   bool TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeUSDJPY1 && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      bool result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("USDCHF", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeUSDCHF && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("USDCAD", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_BUY, MagicNumber);
   if (!TradeExists && TradeUSDCAD && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_BUY, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("NZDUSD", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeNZDUSD && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("EURUSD", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeEURUSD && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("GBPUSD", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeGBPUSD && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

   symbol = StringConcatenate("AUDUSD", PairSuffix);
   TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeAUDUSD && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) UsdStrongTradesSent++;
   }

}// End void UsdSendStrongTrades()

void UsdSendWeakTrades()
{

   string symbol;
   string TradeComment = UsdTradeComment;
   int MagicNumber = UsdWeakMagicNumber;
   UsdWeakPending=false;   

   symbol = StringConcatenate("USDJPY", PairSuffix);
   bool TradeExists = CheckIfTradeAlreadyExists(symbol, OP_SELL, MagicNumber);
   if (!TradeExists && TradeUSDJPY1 && MarketInfo(symbol,MODE_SPREAD) <= MaximumSpread) 
   {
      bool result = SendTrade(symbol, OP_SELL, TradeComment, MagicNumber);
      if (result) UsdWeakTradesSent++;
   }

   symbol = StringConcatenate("USDCHF", PairSuffi

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

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

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

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

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

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

Стоимость полного кода
18 721,10₽ ≈ $228.81