Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
NewsReleaseEA_v3.82
//====================================================================================================================================================//
#property copyright "Copyright 2015-2021, Nikolaos Pantzos"
#property link "https://www.mql5.com/en/users/pannik"
#property version "3.82"
#property description "This expert is a fully automated trading system. It get econimic news and place orders"
#property description "Expert receives data for events from 'http://forexfactory.com'."
#property description "Add URL 'https://nfs.faireconomy.media/ff_calendar_thisweek.xml' to the list of allowed URLs in the Expert Advisors tab of the Options window (Tools>Options>Expert Advisors)."
#property description "To better illustrate of graphics, select screen resolution 1280x1024."
//#property icon "\\Images\\NewsRelease_Logo.ico";
#property strict
//====================================================================================================================================================//
enum ModeWorkEnum {SlowMode_EveryTick, FastMode_PerMinute};
enum Strategies {Custom_Stategy, Recovery_Orders_Strategy, Basket_Orders_Strategy, Separate_Orders_Strategy, Replace_Orders_Strategy};
enum ImpactEnum {Low_Medium_High, Medium_High, Only_High};
enum TradeWay {Not_Trade, Trade_In_News, Trade_From_Panel};
enum Levels {Fixed_SL_TP, Based_On_ATR_SL_TP};
enum TimeInfoEnum {Time_In_Minutes, Format_D_H_M};
//====================================================================================================================================================//
#define TITLE 0
#define COUNTRY 1
#define DATE 2
#define TIME 3
#define IMPACT 4
#define FORECAST 5
#define PREVIOUS 6
#define PairsTrade 60
#define Currency 10
#define NoOfImages 60
//====================================================================================================================================================//
extern string ModeWorkingWithNews = "||====== Read News And GMT Settings ======||";
extern ModeWorkEnum ModeReadNews = FastMode_PerMinute;//Mode To Read News
extern string ReadNewsURL = "https://nfs.faireconomy.media/ff_calendar_thisweek.xml";//URL To Get News
extern int GMT_OffsetHours = 0;//GMT Offset
extern int MillisecondTimer = 1000;//Set Timer Milliseconds
extern string StrategiesSettings = "||====== Strategies Settings ======||";
extern Strategies StrategyToUse = Custom_Stategy;//Select Mode Of Strategy
extern string MoneyManagementSettings = "||====== Money Management Settings ======||";
extern bool MoneyManagement = false;//Automatically Lot Size
extern double RiskFactor = 10;//Risk Factor For Automatically Lot Size
extern double ManualLotSize = 0.01;//Manually Lot Size
extern string AdvancedSettings = "||====== Advanced Settings ======||";
extern int MinutesBeforeNewsStart = 5;//Minutes Befor Events Start Trade
extern int MinutesAfterNewsStop = 5;//Minutes After Events Stop Trade
extern bool TradeOneTimePerNews = true;//Trade One Time Per Event
extern ImpactEnum ImpactToTrade = Only_High;//Impact Of Events Trade
extern bool IncludeSpeaks = true;//Includ Speaks As Events
extern string EUR_NewsReleaseSet = "||====== EUR News Release Settings ======||";
extern TradeWay EUR_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On EUR Events
extern string EUR_TimeStartSession = "00:00:00";//Set Time Start Trade On EUR Events
extern string EUR_TimeEndSession = "00:00:00";//Set Time Stop Trade On EUR Events
extern bool EUR_Trade_EURGBP = true;//Trade EURGBP On EUR Events
extern bool EUR_Trade_EURAUD = true;//Trade EURAUD On EUR Events
extern bool EUR_Trade_EURNZD = true;//Trade EURNZD On EUR Events
extern bool EUR_Trade_EURUSD = true;//Trade EURUSD On EUR Events
extern bool EUR_Trade_EURCAD = true;//Trade EURCAD On EUR Events
extern bool EUR_Trade_EURCHF = true;//Trade EURCHF On EUR Events
extern bool EUR_Trade_EURJPY = true;//Trade EURJPY On EUR Events
extern string GBP_NewsReleaseSet = "||====== GBP News Release Settings ======||";
extern TradeWay GBP_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On GBP Events
extern string GBP_TimeStartSession = "00:00:00";//Set Time Start Trade On GBP Events
extern string GBP_TimeEndSession = "00:00:00";//Set Time Stop Trade On GBP Events
extern bool GBP_TradeIn_EURGBP = true;//Trade EURGBP On GBP Events
extern bool GBP_TradeIn_GBPAUD = true;//Trade GBPAUD On GBP Events
extern bool GBP_TradeIn_GBPNZD = true;//Trade GBPNZD On GBP Events
extern bool GBP_TradeIn_GBPUSD = true;//Trade GBPUSD On GBP Events
extern bool GBP_TradeIn_GBPCAD = true;//Trade GBPCAD On GBP Events
extern bool GBP_TradeIn_GBPCHF = true;//Trade GBPCHF On GBP Events
extern bool GBP_TradeIn_GBPJPY = true;//Trade GBPJPY On GBP Events
extern string AUD_NewsReleaseSet = "||====== AUD News Release Settings ======||";
extern TradeWay AUD_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On AUD Events
extern string AUD_TimeStartSession = "00:00:00";//Set Time Start Trade On AUD Events
extern string AUD_TimeEndSession = "00:00:00";//Set Time Stop Trade On AUD Events
extern bool AUD_TradeIn_EURAUD = true;//Trade EURAUD On AUD Events
extern bool AUD_TradeIn_GBPAUD = true;//Trade GBPAUD On AUD Events
extern bool AUD_TradeIn_AUDNZD = true;//Trade AUDNZD On AUD Events
extern bool AUD_TradeIn_AUDUSD = true;//Trade AUDUSD On AUD Events
extern bool AUD_TradeIn_AUDCAD = true;//Trade AUDCAD On AUD Events
extern bool AUD_TradeIn_AUDCHF = true;//Trade AUDCHF On AUD Events
extern bool AUD_TradeIn_AUDJPY = true;//Trade AUDJPY On AUD Events
extern string NZD_NewsReleaseSet = "||====== NZD News Release Settings ======||";
extern TradeWay NZD_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On NZD Events
extern string NZD_TimeStartSession = "00:00:00";//Set Time Start Trade On NZD Events
extern string NZD_TimeEndSession = "00:00:00";//Set Time Stop Trade On NZD Events
extern bool NZD_TradeIn_EURNZD = true;//Trade EURNZD On NZD Events
extern bool NZD_TradeIn_GBPNZD = true;//Trade GBPNZD On NZD Events
extern bool NZD_TradeIn_AUDNZD = true;//Trade AUDNZD On NZD Events
extern bool NZD_TradeIn_NZDUSD = true;//Trade NZDUSD On NZD Events
extern bool NZD_TradeIn_NZDCAD = true;//Trade NZDCAD On NZD Events
extern bool NZD_TradeIn_NZDCHF = true;//Trade NZDCHF On NZD Events
extern bool NZD_TradeIn_NZDJPY = true;//Trade NZDJPY On NZD Events
extern string USD_NewsReleaseSet = "||====== USD News Release Settings ======||";
extern TradeWay USD_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On USD Events
extern string USD_TimeStartSession = "00:00:00";//Set Time Start Trade On USD Events
extern string USD_TimeEndSession = "00:00:00";//Set Time Stop Trade On USD Events
extern bool USD_TradeIn_EURUSD = true;//Trade EURUSD On USD Events
extern bool USD_TradeIn_GBPUSD = true;//Trade GBPUSD On USD Events
extern bool USD_TradeIn_AUDUSD = true;//Trade AUDUSD On USD Events
extern bool USD_TradeIn_NZDUSD = true;//Trade NZDUSD On USD Events
extern bool USD_TradeIn_USDCAD = true;//Trade USDCAD On USD Events
extern bool USD_TradeIn_USDCHF = true;//Trade USDCHF On USD Events
extern bool USD_TradeIn_USDJPY = true;//Trade USDJPY On USD Events
extern string CAD_NewsReleaseSet = "||====== CAD News Release Settings ======||";
extern TradeWay CAD_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On CAD Events
extern string CAD_TimeStartSession = "00:00:00";//Set Time Start Trade On CAD Events
extern string CAD_TimeEndSession = "00:00:00";//Set Time Stop Trade On CAD Events
extern bool CAD_TradeIn_EURCAD = true;//Trade EURCAD On CAD Events
extern bool CAD_TradeIn_GBPCAD = true;//Trade GBPCAD On CAD Events
extern bool CAD_TradeIn_AUDCAD = true;//Trade AUDCAD On CAD Events
extern bool CAD_TradeIn_NZDCAD = true;//Trade NZDCAD On CAD Events
extern bool CAD_TradeIn_USDCAD = true;//Trade USDCAD On CAD Events
extern bool CAD_TradeIn_CADCHF = true;//Trade CADCHF On CAD Events
extern bool CAD_TradeIn_CADJPY = true;//Trade CADJPY On CAD Events
extern string CHF_NewsReleaseSet = "||====== CHF News Release Settings ======||";
extern TradeWay CHF_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On CHF Events
extern string CHF_TimeStartSession = "00:00:00";//Set Time Start Trade On CHF Events
extern string CHF_TimeEndSession = "00:00:00";//Set Time Stop Trade On CHF Events
extern bool CHF_TradeIn_EURCHF = true;//Trade EURCHF On CHF Events
extern bool CHF_TradeIn_GBPCHF = true;//Trade GBPCHF On CHF Events
extern bool CHF_TradeIn_AUDCHF = true;//Trade AUDCHF On CHF Events
extern bool CHF_TradeIn_NZDCHF = true;//Trade NZDCHF On CHF Events
extern bool CHF_TradeIn_USDCHF = true;//Trade USDCHF On CHF Events
extern bool CHF_TradeIn_CADCHF = true;//Trade CADCHF On CHF Events
extern bool CHF_TradeIn_CHFJPY = true;//Trade CHFJPY On CHF Events
extern string JPY_NewsReleaseSet = "||====== JPY News Release Settings ======||";
extern TradeWay JPY_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On JPY Events
extern string JPY_TimeStartSession = "00:00:00";//Set Time Start Trade On JPY Events
extern string JPY_TimeEndSession = "00:00:00";//Set Time Stop Trade On JPY Events
extern bool JPY_TradeIn_EURJPY = true;//Trade EURJPY On JPY Events
extern bool JPY_TradeIn_GBPJPY = true;//Trade GBPJPY On JPY Events
extern bool JPY_TradeIn_AUDJPY = true;//Trade AUDJPY On JPY Events
extern bool JPY_TradeIn_NZDJPY = true;//Trade NZDJPY On JPY Events
extern bool JPY_TradeIn_USDJPY = true;//Trade USDJPY On JPY Events
extern bool JPY_TradeIn_CADJPY = true;//Trade CADJPY On JPY Events
extern bool JPY_TradeIn_CHFJPY = true;//Trade CHFJPY On JPY Events
extern string CNY_NewsReleaseSet = "||====== CNY News Release Settings ======||";
extern TradeWay CNY_TradeInNewsRelease = Trade_In_News;//Set Mode Trade On CNY Events
extern string CNY_TimeStartSession = "00:00:00";//Set Time Start Trade On CNY Events
extern string CNY_TimeEndSession = "00:00:00";//Set Time Stop Trade On CNY Events
extern bool CNY_TradeIn_EURCNY = true;//Trade EURCNY On CNY Events
extern bool CNY_TradeIn_USDCNY = true;//Trade USDCNY On CNY Events
extern bool CNY_TradeIn_JPYCNY = true;//Trade JPYCNY On CNY Events
extern string BrokerSymbolFor_CNY = "CNY";//Set Broker's Symbol For Yuan
extern string PendingOrdersSettings = "||====== Pending Orders Settings ======||";
extern double DistancePendingOrders = 10.0;//Distance Pips For Pending Orders
extern bool UseModifyPending = false;//Modify Pending Orders
extern double StepModifyPending = 1.0;//Step Pips Modify Pending Orders
extern int DelayModifyPending = 30;//Ticks Delay Modify Pending Orders
extern bool ModifyAfterEvent = false;//Modify Pending Orders After Events
extern bool DeleteOrphanPending = true;//Delete Remaining Order When One Of The two Triggered
extern bool DeleteOrdersAfterEvent = true;//Delete Pending Orders After Event
extern int MinutesExpireOrders = 60;//Minutes Expiry Pending Orders
extern string MarketOrdersSettings = "||====== Market Orders Setting ======||";
extern Levels TypeOf_TP_and_SL = Fixed_SL_TP;//Uses Fixed Or Based ATR Levels Profit And Loss
extern bool UseTralingStopLoss = false;//Run Trailing Stop
extern double TrailingStopStep = 1.0;//Trailing Stop's Pips
extern bool UseStopLoss = true;//Use Stop Loss
extern double OrdersStopLoss = 10.0;//Set Stop Loss (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern bool UseTakeProfit = true;//Use Take Profit
extern double OrdersTakeProfit = 15.0;//Set Take Profit (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern bool UseBreakEven = true;//Use Break Even
extern double BreakEvenPips = 15.0;//Break Even's Pips
extern double BreakEVenAfter = 5.0;//Pips Profit To Activate Break Even
extern bool CloseOrdersAfterEvent = false;//Close All Orders After Event
extern string ATR_IndicatorSetting = "||====== ATR Indicator Setting ======||";
extern int ATR_Period = 7;//ATR Period
extern double ATR_Multiplier = 3.5;//ATR Multiplier Value For Stop Loss
extern double TakeProfitMultiplier = 1.5;//Stop Loss Multiplier For Take Profit
extern string BasketOrdersSetting = "||====== Basket Orders Setting ======||";
extern bool CloseAllOrdersAsOne = false;//Run Basket Mode Manage Orders
extern bool WaitToTriggeredAllOrders = false;//Whait To Triggered All Pending
extern double LevelCloseAllInLoss = 500.0;//Level Close All In Losses
extern double LevelCloseAllInProfit = 100.0;//Level Close All In Profits
extern string ReplaceModeSettings = "||====== Replace Mode Setting ======||";
extern bool UseReplaceMode = false;//Run Replace Mode When Closed All Orders
extern bool RunReplaceAfterNewsEnd = false;//Run Replace Mode After Events
extern double ReplaceOrdersStopLoss = 10.0;//Set Stop Loss (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern double ReplaceOrdersTakeProfit = 15.0;//Set Take Profit (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern bool DeleteOrphanIfGetProfit = true;//Delete Remaining Order When One Of The two Triggered
extern string RecoverModeSettings = "||====== Recovery Mode Setting ======||";
extern bool UseRecoveryMode = false;//Run Recovery Mode If Loss Order
extern bool RunRecoveryAfterNewsEnd = false;//Run Recovery Mode After Events
extern double RecoveryMultiplierLot = 3.0;//Recovery Multiplier Lot Size
extern double RecoveryOrdersStopLoss = 10.0;//Set Stop Loss (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern double RecoveryOrdersTakeProfit = 15.0;//Set Take Profit (If TypeOf_TP_and_SL=Fixed_SL_TP)
extern string ColorsSettings = "||========= Button Panel Sets =========||";
extern bool UseConfirmationMessage = true;//Use Confirmation Message For Buttons
extern color ColorOpenButton = clrDodgerBlue;//Open Buttons's Color
extern color ColorCloseButton = clrFireBrick;//Close Buttons's Color
extern color ColorDeleteButton = clrOrange;//Delete Buttons's Color
extern color ColorFontButton = clrBlack;//Buttons's Text Color
extern string AnalyzerSettings = "||====== Analyzer Setting ======||";
extern bool RunAnalyzerTrades = true;//Run Trades Analyzer
extern int SizeFontsOfInfo = 10;//Text's Size
extern color ColorOfTitle = clrMaroon;//Title Text's Color
extern color ColorOfInfo = clrBeige;//Info Text's Color
extern color ColorLineTitles = clrOrange;//Title Line's Color
extern color ColorOfLine1 = clrMidnightBlue;//First Line's Color
extern color ColorOfLine2 = clrDarkSlateGray;//Second Line's Color
extern string TextOnScreenSettings = "||====== Set Text In Screen ======||";
extern TimeInfoEnum ShowInfoTime = Format_D_H_M;//Show Time's Format
extern color TextColor1 = clrPowderBlue;//Text's Color
extern color TextColor2 = clrKhaki;//Text's Color
extern color TextColor3 = clrFireBrick;//Text's Color
extern color TextColor4 = clrDodgerBlue;//Text's Color
extern string DeleteObjectsSettings = "||====== Delete Objects/Orders Settings ======||";
extern bool DeletePendingInExit = false;//Delete Pending Orders If Unload Expert
extern bool DeleteObjectsAfterEvent = false;//Delete All Objects After Events
extern string GeneralSettings = "||====== General Settings ======||";
extern string PairPrefix = "";//Pairs' Prefix
extern int Slippage = 3;//Maximum Accepted Slippage
extern int MagicNumber = 0;//Magic Number (if MagicNumber=0, expert generate automatically)
extern string OrdersComments = "NewsReleaseEA";//Order's Comment
extern string ChartInterfaceSettings = "||====== Chart Interface Settings ======||";
extern bool SetChartInterface = true;//Set Chart's Interface
//====================================================================================================================================================//
string ExpertName;
string PairSuffix;
string CommentPrefix;
string Pair[PairsTrade];
double StopLevel;
double HistoryProfitLoss;
double OrderLotSize=0;
double PipsLevelPending;
double PipsLoss;
double PipsProfits;
double RecoveryPipsLoss;
double RecoveryPipsProfits;
double TotalProfitLoss;
double TotalOrdesLots;
double ProfitLoss[99];
double OrdesLots[99];
double TP=0;
double SL=0;
double ResultsCurrencies[PairsTrade];
int i;
int j;
int SecondsBeforeNewsStart;
int SecondsAfterNewsStop;
int OpenMarketOrders[99];
int OpenPendingOrders[99];
int TotalOpenMarketOrders;
int TotalOpenPendingOrders;
int TotalOpenOrders;
int HistoryTrades;
int MultiplierPoint;
int OrdersID;
int PairID[PairsTrade];
int BuyOrders[PairsTrade];
int SellOrders[PairsTrade];
int BuyStopOrders[PairsTrade];
int SellStopOrders[PairsTrade];
int CountTickBuyStop[PairsTrade];
int CountTickSellStop[PairsTrade];
int TotalPairs=PairsTrade;
bool AvailablePair[PairsTrade];
int TotalImages=NoOfImages;
bool CheckOrdersBaseNews;
bool TimeToTrade_USD=false;
bool TimeToTrade_EUR=false;
bool TimeToTrade_GBP=false;
bool TimeToTrade_NZD=false;
bool TimeToTrade_JPY=false;
bool TimeToTrade_AUD=false;
bool TimeToTrade_CHF=false;
bool TimeToTrade_CAD=false;
bool TimeToTrade_CNY=false;
datetime Expire=0;
datetime LastTradeTime[PairsTrade];
static int iPrevMinute=-1;
bool OpenSession[Currency];
int LoopTimes=0;
int LastTradeType[PairsTrade];
int WarningMessage;
int TotalHistoryOrders[PairsTrade];
double TotalHistoryProfit[PairsTrade];
//---------------------------------------------------------------------
double PriceOpenBuyStopOrder[99];
double PriceOpenSellStopOrder[99];
double LastTradeLot[PairsTrade];
double LastTradeProfitLoss[PairsTrade];
double SecondsSinceNews_USD=0;
double SecondsToNews_USD=0;
double ImpactSinceNews_USD=0;
double ImpactToNews_USD=0;
double SecondsSinceNews_EUR=0;
double SecondsToNews_EUR=0;
double ImpactSinceNews_EUR=0;
double ImpactToNews_EUR=0;
double SecondsSinceNews_GBP=0;
double SecondsToNews_GBP=0;
double ImpactSinceNews_GBP=0;
double ImpactToNews_GBP=0;
double SecondsSinceNews_NZD=0;
double SecondsToNews_NZD=0;
double ImpactSinceNews_NZD=0;
double ImpactToNews_NZD=0;
double SecondsSinceNews_JPY=0;
double SecondsToNews_JPY=0;
double ImpactSinceNews_JPY=0;
double ImpactToNews_JPY=0;
double SecondsSinceNews_AUD=0;
double SecondsToNews_AUD=0;
double ImpactSinceNews_AUD=0;
double ImpactToNews_AUD=0;
double SecondsSinceNews_CHF=0;
double SecondsToNews_CHF=0;
double ImpactSinceNews_CHF=0;
double ImpactToNews_CHF=0;
double SecondsSinceNews_CAD=0;
double SecondsToNews_CAD=0;
double ImpactSinceNews_CAD=0;
double ImpactToNews_CAD=0;
double SecondsSinceNews_CNY=0;
double SecondsToNews_CNY=0;
double ImpactSinceNews_CNY=0;
double ImpactToNews_CNY=0;
string ShowImpact[Currency];
string ShowSecondsUntil[Currency];
string ShowSecondsSince[Currency];
//---------------------------------------------------------------------
int ExtMapBuffer0[Currency][PairsTrade];
double ExtBufferSeconds[Currency][PairsTrade];
double ExtBufferImpact[Currency][5];
string mainData[PairsTrade][7];
bool SessionBeforeEvent[Currency];
string sData;
string sTags[7]= {"<title>", "<country>", "<date><![CDATA[", "<time><![CDATA[", "<impact><![CDATA[", "<forecast><![CDATA[", "<previous><![CDATA["};
string eTags[7]= {"</title>", "</country>", "]]></date>", "]]></time>", "]]></impact>", "]]></forecast>", "]]></previous>"};
int xmlHandle;
int LogHandle=-1;
int BoEvent;
int EndWeek;
int BeginWeek;
datetime minsTillNews=0;
datetime tmpMins;
static bool NeedToGetFile=false;
static int PrevMinute=-1;
string xmlFileName;
datetime CurrentTime=0;
datetime ChcekLockedDay=0;
bool FileIsOk=false;
bool StartOperations=false;
bool CallMain;
//---------------------------------------------------------------------
int hSession_IEType;
int hSession_Direct;
int Internet_Open_Type_Preconfig=0;
int Internet_Open_Type_Direct=1;
int Internet_Open_Type_Proxy=3;
int Buffer_LEN=80;
int CountTicks=0;
//---------------------------------------------------------------------
double SpreadPips;
double PriceAsk;
double PriceBid;
int SetBuffers=0;
int DistText;
int DistanceText[NoOfImages];
int TextFontSize=Currency;
int TextFontSizeTitle=12;
string TextFontType="Arial";
string TextFontTypeTitle="Arial Black";
//---------------------------------------------------------------------
string ButtonOpen_EUR="Open EUR";
string ButtonClose_EUR="Close EUR";
string ButtonOpen_GBP="Open GBP";
string ButtonClose_GBP="Close GBP";
string ButtonOpen_AUD="Open AUD";
string ButtonClose_AUD="Close AUD";
string ButtonOpen_NZD="Open NZD";
string ButtonClose_NZD="Close NZD";
string ButtonOpen_USD="Open USD";
string ButtonClose_USD="Close USD";
string ButtonOpen_CAD="Open CAD";
string ButtonClose_CAD="Close CAD";
string ButtonOpen_CHF="Open CHF";
string ButtonClose_CHF="Close CHF";
string ButtonOpen_JPY="Open JPY";
string ButtonClose_JPY="Close JPY";
string ButtonOpen_CNY="Open CNY";
string ButtonClose_CNY="Close CNY";
string ButtonDelete_EUR="Delete EUR";
string ButtonDelete_GBP="Delete GBP";
string ButtonDelete_AUD="Delete AUD";
string ButtonDelete_NZD="Delete NZD";
string ButtonDelete_USD="Delete USD";
string ButtonDelete_CAD="Delete CAD";
string ButtonDelete_CHF="Delete CHF";
string ButtonDelete_JPY="Delete JPY";
string ButtonDelete_CNY="Delete CNY";
//---------------------------------------------------------------------
bool Open_EUR=false;
bool Open_GBP=false;
bool Open_AUD=false;
bool Open_NZD=false;
bool Open_USD=false;
bool Open_CAD=false;
bool Open_CHF=false;
bool Open_JPY=false;
bool Open_CNY=false;
bool Close_EUR=false;
bool Close_GBP=false;
bool Close_AUD=false;
bool Close_NZD=false;
bool Close_USD=false;
bool Close_CAD=false;
bool Close_CHF=false;
bool Close_JPY=false;
bool Close_CNY=false;
bool Delete_EUR=false;
bool Delete_GBP=false;
bool Delete_AUD=false;
bool Delete_NZD=false;
bool Delete_USD=false;
bool Delete_CAD=false;
bool Delete_CHF=false;
bool Delete_JPY=false;
bool Delete_CNY=false;
//====================================================================================================================================================//
//OnInit function
//====================================================================================================================================================//
int OnInit()
{
//---------------------------------------------------------------------
//Reset value
LoopTimes=0;
CallMain=false;
//---------------------------------------------------------------------
//Set timer
EventSetMillisecondTimer(MillisecondTimer);
//---------------------------------------------------------------------
//Text in screen
DistText=TextFontSize*2;
for(i=1; i<TotalImages; i++)
{
DistanceText[i]=DistText*i;
}
//---------------------------------------------------------------------
//Set chart
if(SetChartInterface==true)
{
ChartSetInteger(0,CHART_SHOW_GRID,false);//Hide grid
ChartSetInteger(0,CHART_MODE,0);//Set price in bars
ChartSetInteger(0,CHART_SCALE,1);//Set scale
ChartSetInteger(0,CHART_SHOW_VOLUMES,CHART_VOLUME_HIDE);//Hide value
ChartSetInteger(0,CHART_COLOR_CHART_UP,clrNONE);//Hide line up
ChartSetInteger(0,CHART_COLOR_CHART_DOWN,clrNONE);//Hide line down
ChartSetInteger(0,CHART_COLOR_CHART_LINE,clrNONE);//Hide chart line
}
//---------------------------------------------------------------------
//Set strategy trade
if(StrategyToUse==1)//Recovery orders
{
UseModifyPending=false;
ModifyAfterEvent=false;
DeleteOrphanPending=true;
DeleteOrdersAfterEvent=true;
MinutesExpireOrders=0;
UseTralingStopLoss=false;
UseStopLoss=true;
UseTakeProfit=true;
CloseAllOrdersAsOne=false;
WaitToTriggeredAllOrders=false;
CloseOrdersAfterEvent=false;
UseReplaceMode=false;
RunReplaceAfterNewsEnd=false;
UseRecoveryMode=true;
RunRecoveryAfterNewsEnd=true;
}
//---
if(StrategyToUse==2)//Basket orders
{
UseModifyPending=false;
ModifyAfterEvent=false;
DeleteOrphanPending=true;
DeleteOrdersAfterEvent=true;
MinutesExpireOrders=0;
UseTralingStopLoss=false;
UseStopLoss=false;
UseTakeProfit=false;
CloseAllOrdersAsOne=true;
WaitToTriggeredAllOrders=true;
CloseOrdersAfterEvent=false;
UseReplaceMode=false;
RunReplaceAfterNewsEnd=false;
UseRecoveryMode=false;
RunRecoveryAfterNewsEnd=false;
}
//---
if(StrategyToUse==3)//Separate orders
{
UseModifyPending=false;
ModifyAfterEvent=false;
DeleteOrphanPending=false;
DeleteOrdersAfterEvent=true;
MinutesExpireOrders=0;
UseTralingStopLoss=false;
UseStopLoss=true;
UseTakeProfit=true;
CloseAllOrdersAsOne=false;
WaitToTriggeredAllOrders=false;
CloseOrdersAfterEvent=false;
UseReplaceMode=false;
RunReplaceAfterNewsEnd=false;
UseRecoveryMode=false;
RunRecoveryAfterNewsEnd=false;
}
//---
if(StrategyToUse==4)//Replace orders
{
UseModifyPending=true;
ModifyAfterEvent=false;
DeleteOrphanPending=false;
DeleteOrdersAfterEvent=true;
MinutesExpireOrders=0;
UseTralingStopLoss=false;
UseStopLoss=true;
UseTakeProfit=true;
CloseAllOrdersAsOne=false;
WaitToTriggeredAllOrders=false;
CloseOrdersAfterEvent=false;
UseReplaceMode=true;
DeleteOrphanIfGetProfit=true;
RunReplaceAfterNewsEnd=false;
UseRecoveryMode=false;
RunRecoveryAfterNewsEnd=false;
}
//---------------------------------------------------------------------
//Confirm sets
if(UseBreakEven==true)
{
UseTralingStopLoss=true;
UseStopLoss=true;
OrdersStopLoss=BreakEvenPips;
}
//---
if(MillisecondTimer<1)
MillisecondTimer=1;
if(MillisecondTimer>100000)
MillisecondTimer=100000;
//---------------------------------------------------------------------
//Started information
if(OrdersComments=="")
ExpertName=WindowExpertName();
else
ExpertName=OrdersComments;
ArrayInitialize(AvailablePair,false);
ArrayInitialize(OpenSession,true);
iPrevMinute=-1;
xmlFileName=IntegerToString(Month())+"-"+IntegerToString(Day())+"-"+IntegerToString(Year())+"-"+WindowExpertName()+".xml";
//---------------------------------------------------------------------
//Suffix
if(StringLen(Symbol())>6)
PairSuffix=StringSubstr(Symbol(),6);
//---------------------------------------------------------------------
//Set time before/after in seconds
if(MinutesBeforeNewsStart<0)
MinutesBeforeNewsStart=0;
if(MinutesAfterNewsStop<0)
MinutesAfterNewsStop=0;
SecondsBeforeNewsStart=MinutesBeforeNewsStart*60;
SecondsAfterNewsStop=MinutesAfterNewsStop*60;
//---------------------------------------------------------------------
//Set pairs
Pair[1]=PairPrefix+"EURGBP"+PairSuffix;
Pair[2]=PairPrefix+"EURAUD"+PairSuffix;
Pair[3]=PairPrefix+"EURNZD"+PairSuffix;
Pair[4]=PairPrefix+"EURUSD"+PairSuffix;
Pair[5]=PairPrefix+"EURCAD"+PairSuffix;
Pair[6]=PairPrefix+"EURCHF"+PairSuffix;
Pair[7]=PairPrefix+"EURJPY"+PairSuffix;
//---
Pair[8]=PairPrefix+"EURGBP"+PairSuffix;
Pair[9]=PairPrefix+"GBPAUD"+PairSuffix;
Pair[10]=PairPrefix+"GBPNZD"+PairSuffix;
Pair[11]=PairPrefix+"GBPUSD"+PairSuffix;
Pair[12]=PairPrefix+"GBPCAD"+PairSuffix;
Pair[13]=PairPrefix+"GBPCHF"+PairSuffix;
Pair[14]=PairPrefix+"GBPJPY"+PairSuffix;
//---
Pair[15]=PairPrefix+"EURAUD"+PairSuffix;
Pair[16]=PairPrefix+"GBPAUD"+PairSuffix;
Pair[17]=PairPrefix+"AUDNZD"+PairSuffix;
Pair[18]=PairPrefix+"AUDUSD"+PairSuffix;
Pair[19]=PairPrefix+"AUDCAD"+PairSuffix;
Pair[20]=PairPrefix+"AUDCHF"+PairSuffix;
Pair[21]=PairPrefix+"AUDJPY"+PairSuffix;
//---
Pair[22]=PairPrefix+"EURNZD"+PairSuffix;
Pair[23]=PairPrefix+"GBPNZD"+PairSuffix;
Pair[24]=PairPrefix+"AUDNZD"+PairSuffix;
Pair[25]=PairPrefix+"NZDUSD"+PairSuffix;
Pair[26]=PairPrefix+"NZDCAD"+PairSuffix;
Pair[27]=PairPrefix+"NZDCHF"+PairSuffix;
Pair[28]=PairPrefix+"NZDJPY"+PairSuffix;
//---
Pair[29]=PairPrefix+"EURUSD"+PairSuffix;
Pair[30]=PairPrefix+"GBPUSD"+PairSuffix;
Pair[31]=PairPrefix+"AUDUSD"+PairSuffix;
Pair[32]=PairPrefix+"NZDUSD"+PairSuffix;
Pair[33]=PairPrefix+"USDCAD"+PairSuffix;
Pair[34]=PairPrefix+"USDCHF"+PairSuffix;
Pair[35]=PairPrefix+"USDJPY"+PairSuffix;
//---
Pair[36]=PairPrefix+"EURCAD"+PairSuffix;
Pair[37]=PairPrefix+"GBPCAD"+PairSuffix;
Pair[38]=PairPrefix+"AUDCAD"+PairSuffix;
Pair[39]=PairPrefix+"NZDCAD"+PairSuffix;
Pair[40]=PairPrefix+"USDCAD"+PairSuffix;
Pair[41]=PairPrefix+"CADCHF"+PairSuffix;
Pair[42]=PairPrefix+"CADJPY"+PairSuffix;
//---
Pair[43]=PairPrefix+"EURCHF"+PairSuffix;
Pair[44]=PairPrefix+"GBPCHF"+PairSuffix;
Pair[45]=PairPrefix+"AUDCHF"+PairSuffix;
Pair[46]=PairPrefix+"NZDCHF"+PairSuffix;
Pair[47]=PairPrefix+"USDCHF"+PairSuffix;
Pair[48]=PairPrefix+"CADCHF"+PairSuffix;
Pair[49]=PairPrefix+"CHFJPY"+PairSuffix;
//---
Pair[50]=PairPrefix+"EURJPY"+PairSuffix;
Pair[51]=PairPrefix+"GBPJPY"+PairSuffix;
Pair[52]=PairPrefix+"AUDJPY"+PairSuffix;
Pair[53]=PairPrefix+"NZDJPY"+PairSuffix;
Pair[54]=PairPrefix+"USDJPY"+PairSuffix;
Pair[55]=PairPrefix+"CADJPY"+PairSuffix;
Pair[56]=PairPrefix+"CHFJPY"+PairSuffix;
//---
Pair[57]=PairPrefix+"EUR"+BrokerSymbolFor_CNY+PairSuffix;
Pair[58]=PairPrefix+"USD"+BrokerSymbolFor_CNY+PairSuffix;
Pair[59]=PairPrefix+"JPY"+BrokerSymbolFor_CNY+PairSuffix;
//---------------------------------------------------------------------
//Expert ID
if(MagicNumber<0)
MagicNumber*=(-1);
OrdersID=MagicNumber;
//---Set ID base impact news set
if(MagicNumber==0)
{
OrdersID=0;
if(ImpactToTrade==0)
OrdersID+=101010;
if(ImpactToTrade==1)
OrdersID+=202020;
if(ImpactToTrade==2)
OrdersID+=303030;
}
//--Set ID per symbol and check available pairs
for(i=0; i<TotalPairs; i++)
{
PairID[i]=OrdersID+i;
if(MarketInfo(Pair[i],MODE_BID)!=0)
AvailablePair[i]=true;
}
//---------------------------------------------------------------------
//Set trade pairs
if((EUR_Trade_EURGBP==false)&&(EUR_Trade_EURAUD==false)&&(EUR_Trade_EURNZD==false) &&
(EUR_Trade_EURUSD==false)&&(EUR_Trade_EURCAD==false)&&(EUR_Trade_EURCHF==false)&&(EUR_Trade_EURJPY==false))
EUR_TradeInNewsRelease=0;
//---
if((GBP_TradeIn_EURGBP==false)&&(GBP_TradeIn_GBPAUD==false)&&(GBP_TradeIn_GBPNZD==false) &&
(GBP_TradeIn_GBPUSD==false)&&(GBP_TradeIn_GBPCAD==false)&&(GBP_TradeIn_GBPCHF==false)&&(GBP_TradeIn_GBPJPY==false))
GBP_TradeInNewsRelease=0;
//---
if((AUD_TradeIn_EURAUD==false)&&(AUD_TradeIn_GBPAUD==false)&&(AUD_TradeIn_AUDNZD==false) &&
(AUD_TradeIn_AUDUSD==false)&&(AUD_TradeIn_AUDCAD==false)&&(AUD_TradeIn_AUDCHF==false)&&(AUD_TradeIn_AUDJPY==false))
AUD_TradeInNewsRelease=0;
//---
if((NZD_TradeIn_EURNZD==false)&&(NZD_TradeIn_GBPNZD==false)&&(NZD_TradeIn_AUDNZD==false) &&
(NZD_TradeIn_NZDUSD==false)&&(NZD_TradeIn_NZDCAD==false)&&(NZD_TradeIn_NZDCHF==false)&&(NZD_TradeIn_NZDJPY==false))
NZD_TradeInNewsRelease=0;
//---
if((USD_TradeIn_EURUSD==false)&&(USD_TradeIn_GBPUSD==false)&&(USD_TradeIn_AUDUSD==false) &&
(USD_TradeIn_NZDUSD==false)&&(USD_TradeIn_USDCAD==false)&&(USD_TradeIn_USDCHF==false)&&(USD_TradeIn_USDJPY==false))
USD_TradeInNewsRelease=0;
//---
if((CAD_TradeIn_EURCAD==false)&&(CAD_TradeIn_GBPCAD==false)&&(CAD_TradeIn_AUDCAD==false) &&
(CAD_TradeIn_NZDCAD==false)&&(CAD_TradeIn_USDCAD==false)&&(CAD_TradeIn_CADCHF==false)&&(CAD_TradeIn_CADJPY==false))
CAD_TradeInNewsRelease=0;
//---
if((CHF_TradeIn_EURCHF==false)&&(CHF_TradeIn_GBPCHF==false)&&(CHF_TradeIn_AUDCHF==false) &&
(CHF_TradeIn_NZDCHF==false)&&(CHF_TradeIn_USDCHF==false)&&(CHF_TradeIn_CADCHF==false)&&(CHF_TradeIn_CHFJPY==false))
CHF_TradeInNewsRelease=0;
//---
if((JPY_TradeIn_EURJPY==false)&&(JPY_TradeIn_GBPJPY==false)&&(JPY_TradeIn_AUDJPY==false) &&
(JPY_TradeIn_NZDJPY==false)&&(JPY_TradeIn_USDJPY==false)&&(JPY_TradeIn_CADJPY==false)&&(JPY_TradeIn_CHFJPY==false))
JPY_TradeInNewsRelease=0;
//---
if((CNY_TradeIn_EURCNY==false)&&(CNY_TradeIn_USDCNY==false)&&(CNY_TradeIn_JPYCNY==false))
CNY_TradeInNewsRelease=0;
//---------------------------------------------------------------------
//Broker 4 or 5 digits
MultiplierPoint=1;
if(MarketInfo(Symbol(),MODE_DIGITS)==3||MarketInfo(Symbol(),MODE_DIGITS)==5)
MultiplierPoint=10;
if(MarketInfo(Symbol(),MODE_DIGITS)==2)
MultiplierPoint=100;
//---------------------------------------------------------------------
//Background
if(ObjectFind("Background")==-1)
ChartBackground("Background",clrBlack,0,15,260,363);
//---------------------------------------------------------------------
if(!IsTesting())
OnTick();//For show comment if market is closed
//---------------------------------------------------------------------
return(INIT_SUCCEEDED);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//OnDeinit function
//====================================================================================================================================================//
void OnDeinit(const int reason)
{
//---------------------------------------------------------------------
//Delete pending order if unload expert
if(DeletePendingInExit)
{
bool DeleteOrderID=false;
for(int iPos=OrdersTotal()-1; iPos>=0; iPos--)
{
if(OrderSelect(iPos,SELECT_BY_POS,MODE_TRADES))
{
for(int iID=0; iID<TotalPairs; iID++)
{
if((OrderMagicNumber()==PairID[iID])&&((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP)))
DeleteOrderID=OrderDelete(OrderTicket());
}
}
}
}
//---------------------------------------------------------------------
//Delete file of folder if unload expert
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_READ|FILE_WRITE);
if(xmlHandle>=0)
{
FileClose(xmlHandle);
FileDelete(xmlFileName);
}
//---------------------------------------------------------------------
//Delete objects of screen if unload expert
if(ObjectFind("Background")>-1)
ObjectDelete("Background");
//---
for(i=0; i<TotalImages; i++)
{
if(ObjectFind("Text"+IntegerToString(i))>-1)
ObjectDelete("Text"+IntegerToString(i));
if(ObjectFind("BackgroundLine1"+IntegerToString(i))>-1)
ObjectDelete("BackgroundLine1"+IntegerToString(i));
if(ObjectFind("BackgroundLine2"+IntegerToString(i))>-1)
ObjectDelete("BackgroundLine2"+IntegerToString(i));
if(ObjectFind("Comm1"+IntegerToString(i))>-1)
ObjectDelete("Comm1"+IntegerToString(i));
if(ObjectFind("Comm2"+IntegerToString(i))>-1)
ObjectDelete("Comm2"+IntegerToString(i));
if(ObjectFind("Comm3"+IntegerToString(i))>-1)
ObjectDelete("Comm3"+IntegerToString(i));
if(ObjectFind("Comm4"+IntegerToString(i))>-1)
ObjectDelete("Comm4"+IntegerToString(i));
if(ObjectFind("Comm5"+IntegerToString(i))>-1)
ObjectDelete("Comm5"+IntegerToString(i));
if(ObjectFind("Str"+IntegerToString(i))>-1)
ObjectDelete("Str"+IntegerToString(i));
if(ObjectFind("Res"+IntegerToString(i))>-1)
ObjectDelete("Res"+IntegerToString(i));
}
//---------------------------------------------------------------------
//Delete buttons
if(ObjectFind(ButtonOpen_EUR)>-1)
ObjectDelete(ButtonOpen_EUR);
if(ObjectFind(ButtonClose_EUR)>-1)
ObjectDelete(ButtonClose_EUR);
if(ObjectFind(ButtonOpen_GBP)>-1)
ObjectDelete(ButtonOpen_GBP);
if(ObjectFind(ButtonClose_GBP)>-1)
ObjectDelete(ButtonClose_GBP);
if(ObjectFind(ButtonOpen_AUD)>-1)
ObjectDelete(ButtonOpen_AUD);
if(ObjectFind(ButtonClose_AUD)>-1)
ObjectDelete(ButtonClose_AUD);
if(ObjectFind(ButtonOpen_NZD)>-1)
ObjectDelete(ButtonOpen_NZD);
if(ObjectFind(ButtonClose_NZD)>-1)
ObjectDelete(ButtonClose_NZD);
if(ObjectFind(ButtonOpen_USD)>-1)
ObjectDelete(ButtonOpen_USD);
if(ObjectFind(ButtonClose_USD)>-1)
ObjectDelete(ButtonClose_USD);
if(ObjectFind(ButtonOpen_CAD)>-1)
ObjectDelete(ButtonOpen_CAD);
if(ObjectFind(ButtonClose_CAD)>-1)
ObjectDelete(ButtonClose_CAD);
if(ObjectFind(ButtonOpen_CHF)>-1)
ObjectDelete(ButtonOpen_CHF);
if(ObjectFind(ButtonClose_CHF)>-1)
ObjectDelete(ButtonClose_CHF);
if(ObjectFind(ButtonOpen_JPY)>-1)
ObjectDelete(ButtonOpen_JPY);
if(ObjectFind(ButtonClose_JPY)>-1)
ObjectDelete(ButtonClose_JPY);
if(ObjectFind(ButtonOpen_CNY)>-1)
ObjectDelete(ButtonOpen_CNY);
if(ObjectFind(ButtonClose_CNY)>-1)
ObjectDelete(ButtonClose_CNY);
if(ObjectFind(ButtonDelete_EUR)>-1)
ObjectDelete(ButtonDelete_EUR);
if(ObjectFind(ButtonDelete_GBP)>-1)
ObjectDelete(ButtonDelete_GBP);
if(ObjectFind(ButtonDelete_AUD)>-1)
ObjectDelete(ButtonDelete_AUD);
if(ObjectFind(ButtonDelete_NZD)>-1)
ObjectDelete(ButtonDelete_NZD);
if(ObjectFind(ButtonDelete_USD)>-1)
ObjectDelete(ButtonDelete_USD);
if(ObjectFind(ButtonDelete_CAD)>-1)
ObjectDelete(ButtonDelete_CAD);
if(ObjectFind(ButtonDelete_CHF)>-1)
ObjectDelete(ButtonDelete_CHF);
if(ObjectFind(ButtonDelete_JPY)>-1)
ObjectDelete(ButtonDelete_JPY);
if(ObjectFind(ButtonDelete_CNY)>-1)
ObjectDelete(ButtonDelete_CNY);
//---------------------------------------------------------------------
//Destroy timer
EventKillTimer();
//---------------------------------------------------------------------
//Delete comments of screen if unload expert
Comment("");
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//OnChartEvent function
//====================================================================================================================================================//
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
//---------------------------------------------------------------------
//Set and reset values
int DistanceButtons;
int SetPosition=0;
if(RunAnalyzerTrades==false)
SetPosition=330;
//---------------------------------------------------------------------
//Make buttons
if(EUR_TradeInNewsRelease==2)
{
DistanceButtons=16;
if(ObjectFind(ButtonOpen_EUR)==-1)
ButtonsPanel(ButtonOpen_EUR,"Open on EUR",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_EUR)==-1)
ButtonsPanel(ButtonClose_EUR,"Close on EUR",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_EUR)==-1)
ButtonsPanel(ButtonDelete_EUR,"Delete on EUR",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(GBP_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_GBP)==-1)
ButtonsPanel(ButtonOpen_GBP,"Open on GBP",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_GBP)==-1)
ButtonsPanel(ButtonClose_GBP,"Close on GBP",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_GBP)==-1)
ButtonsPanel(ButtonDelete_GBP,"Delete on GBP",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(AUD_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_AUD)==-1)
ButtonsPanel(ButtonOpen_AUD,"Open on AUD",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_AUD)==-1)
ButtonsPanel(ButtonClose_AUD,"Close on AUD",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_AUD)==-1)
ButtonsPanel(ButtonDelete_AUD,"Delete on AUD",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(NZD_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_NZD)==-1)
ButtonsPanel(ButtonOpen_NZD,"Open on NZD",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_NZD)==-1)
ButtonsPanel(ButtonClose_NZD,"Close on NZD",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_NZD)==-1)
ButtonsPanel(ButtonDelete_NZD,"Delete on NZD",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(USD_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30)+((MathMax(NZD_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_USD)==-1)
ButtonsPanel(ButtonOpen_USD,"Open on USD",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_USD)==-1)
ButtonsPanel(ButtonClose_USD,"Close on USD",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_USD)==-1)
ButtonsPanel(ButtonDelete_USD,"Delete on USD",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(CAD_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30)+((MathMax(NZD_TradeInNewsRelease-1,0))*30)+((MathMax(USD_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_CAD)==-1)
ButtonsPanel(ButtonOpen_CAD,"Open on CAD",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_CAD)==-1)
ButtonsPanel(ButtonClose_CAD,"Close on CAD",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_CAD)==-1)
ButtonsPanel(ButtonDelete_CAD,"Delete on CAD",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(CHF_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30)+((MathMax(NZD_TradeInNewsRelease-1,0))*30)+((MathMax(USD_TradeInNewsRelease-1,0))*30)+((MathMax(CAD_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_CHF)==-1)
ButtonsPanel(ButtonOpen_CHF,"Open on CHF",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_CHF)==-1)
ButtonsPanel(ButtonClose_CHF,"Close on CHF",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_CHF)==-1)
ButtonsPanel(ButtonDelete_CHF,"Delete on CHF",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(JPY_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30)+((MathMax(NZD_TradeInNewsRelease-1,0))*30)+((MathMax(USD_TradeInNewsRelease-1,0))*30)+((MathMax(CAD_TradeInNewsRelease-1,0))*30)+((MathMax(CHF_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_JPY)==-1)
ButtonsPanel(ButtonOpen_JPY,"Open on JPY",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_JPY)==-1)
ButtonsPanel(ButtonClose_JPY,"Close on JPY",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_JPY)==-1)
ButtonsPanel(ButtonDelete_JPY,"Delete on JPY",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---
if(CNY_TradeInNewsRelease==2)
{
DistanceButtons=16+((MathMax(EUR_TradeInNewsRelease-1,0))*30)+((MathMax(GBP_TradeInNewsRelease-1,0))*30)+((MathMax(AUD_TradeInNewsRelease-1,0))*30)+((MathMax(NZD_TradeInNewsRelease-1,0))*30)+((MathMax(USD_TradeInNewsRelease-1,0))*30)+((MathMax(CAD_TradeInNewsRelease-1,0))*30)+((MathMax(CHF_TradeInNewsRelease-1,0))*30)+((MathMax(JPY_TradeInNewsRelease-1,0))*30);
if(ObjectFind(ButtonOpen_CNY)==-1)
ButtonsPanel(ButtonOpen_CNY,"Open on CNY",600-SetPosition,DistanceButtons,ColorOpenButton);
if(ObjectFind(ButtonClose_CNY)==-1)
ButtonsPanel(ButtonClose_CNY,"Close on CNY",705-SetPosition,DistanceButtons,ColorCloseButton);
if(ObjectFind(ButtonDelete_CNY)==-1)
ButtonsPanel(ButtonDelete_CNY,"Delete on CNY",810-SetPosition,DistanceButtons,ColorDeleteButton);
}
//---------------------------------------------------------------------
//Clicked buttons
bool Selected=false;
if(id==CHARTEVENT_OBJECT_CLICK)
{
string ClickedChartButton=sparam;
//---------------------------------------------------------------------
//Open on EUR
if(ClickedChartButton==ButtonOpen_EUR)
{
Selected=ObjectGetInteger(0,ButtonOpen_EUR,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","EUR")==true)
Open_EUR=true;
}
else
Open_EUR=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_EUR,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on EUR
if(ClickedChartButton==ButtonClose_EUR)
{
Selected=ObjectGetInteger(0,ButtonClose_EUR,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","EUR")==true)
Close_EUR=true;
}
else
Close_EUR=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_EUR,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on EUR
if(ClickedChartButton==ButtonDelete_EUR)
{
Selected=ObjectGetInteger(0,ButtonDelete_EUR,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","EUR")==true)
Delete_EUR=true;
}
else
Delete_EUR=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_EUR,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on GBP
if(ClickedChartButton==ButtonOpen_GBP)
{
Selected=ObjectGetInteger(0,ButtonOpen_GBP,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","GBP")==true)
Open_GBP=true;
}
else
Open_GBP=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_GBP,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on GBP
if(ClickedChartButton==ButtonClose_GBP)
{
Selected=ObjectGetInteger(0,ButtonClose_GBP,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","GBP")==true)
Close_GBP=true;
}
else
Close_GBP=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_GBP,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on GBP
if(ClickedChartButton==ButtonDelete_GBP)
{
Selected=ObjectGetInteger(0,ButtonDelete_GBP,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","GBP")==true)
Delete_GBP=true;
}
else
Delete_GBP=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_GBP,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on AUD
if(ClickedChartButton==ButtonOpen_AUD)
{
Selected=ObjectGetInteger(0,ButtonOpen_AUD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","AUD")==true)
Open_AUD=true;
}
else
Open_AUD=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_AUD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on AUD
if(ClickedChartButton==ButtonClose_AUD)
{
Selected=ObjectGetInteger(0,ButtonClose_AUD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","AUD")==true)
Close_AUD=true;
}
else
Close_AUD=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_AUD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on AUD
if(ClickedChartButton==ButtonDelete_AUD)
{
Selected=ObjectGetInteger(0,ButtonDelete_AUD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","AUD")==true)
Delete_AUD=true;
}
else
Delete_AUD=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_AUD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on NZD
if(ClickedChartButton==ButtonOpen_NZD)
{
Selected=ObjectGetInteger(0,ButtonOpen_NZD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","NZD")==true)
Open_NZD=true;
}
else
Open_NZD=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_NZD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on NZD
if(ClickedChartButton==ButtonClose_NZD)
{
Selected=ObjectGetInteger(0,ButtonClose_NZD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","NZD")==true)
Close_NZD=true;
}
else
Close_NZD=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_NZD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on NZD
if(ClickedChartButton==ButtonDelete_NZD)
{
Selected=ObjectGetInteger(0,ButtonDelete_NZD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","NZD")==true)
Delete_NZD=true;
}
else
Delete_NZD=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_NZD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on USD
if(ClickedChartButton==ButtonOpen_USD)
{
Selected=ObjectGetInteger(0,ButtonOpen_USD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","USD")==true)
Open_USD=true;
}
else
Open_USD=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_USD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on USD
if(ClickedChartButton==ButtonClose_USD)
{
Selected=ObjectGetInteger(0,ButtonClose_USD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","USD")==true)
Close_USD=true;
}
else
Close_USD=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_USD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on USD
if(ClickedChartButton==ButtonDelete_USD)
{
Selected=ObjectGetInteger(0,ButtonDelete_USD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","USD")==true)
Delete_USD=true;
}
else
Delete_USD=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_USD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on CAD
if(ClickedChartButton==ButtonOpen_CAD)
{
Selected=ObjectGetInteger(0,ButtonOpen_CAD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","CAD")==true)
Open_CAD=true;
}
else
Open_CAD=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_CAD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on CAD
if(ClickedChartButton==ButtonClose_CAD)
{
Selected=ObjectGetInteger(0,ButtonClose_CAD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","CAD")==true)
Close_CAD=true;
}
else
Close_CAD=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_CAD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on CAD
if(ClickedChartButton==ButtonDelete_CAD)
{
Selected=ObjectGetInteger(0,ButtonDelete_CAD,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","CAD")==true)
Delete_CAD=true;
}
else
Delete_CAD=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_CAD,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on CHF
if(ClickedChartButton==ButtonOpen_CHF)
{
Selected=ObjectGetInteger(0,ButtonOpen_CHF,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","CHF")==true)
Open_CHF=true;
}
else
Open_CHF=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_CHF,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on CHF
if(ClickedChartButton==ButtonClose_CHF)
{
Selected=ObjectGetInteger(0,ButtonClose_CHF,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","CHF")==true)
Close_CHF=true;
}
else
Close_CHF=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_CHF,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on CHF
if(ClickedChartButton==ButtonDelete_CHF)
{
Selected=ObjectGetInteger(0,ButtonDelete_CHF,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","CHF")==true)
Delete_CHF=true;
}
else
Delete_CHF=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_CHF,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on JPY
if(ClickedChartButton==ButtonOpen_JPY)
{
Selected=ObjectGetInteger(0,ButtonOpen_JPY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","JPY")==true)
Open_JPY=true;
}
else
Open_JPY=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_JPY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on JPY
if(ClickedChartButton==ButtonClose_JPY)
{
Selected=ObjectGetInteger(0,ButtonClose_JPY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","JPY")==true)
Close_JPY=true;
}
else
Close_JPY=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_JPY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on JPY
if(ClickedChartButton==ButtonDelete_JPY)
{
Selected=ObjectGetInteger(0,ButtonDelete_JPY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","JPY")==true)
Delete_JPY=true;
}
else
Delete_JPY=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_JPY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Open on CNY
if(ClickedChartButton==ButtonOpen_CNY)
{
Selected=ObjectGetInteger(0,ButtonOpen_CNY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("OPEN","CNY")==true)
Open_CNY=true;
}
else
Open_CNY=true;
Sleep(100);
ObjectSetInteger(0,ButtonOpen_CNY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Close on CNY
if(ClickedChartButton==ButtonClose_CNY)
{
Selected=ObjectGetInteger(0,ButtonClose_CNY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("CLOSE","CNY")==true)
Close_CNY=true;
}
else
Close_CNY=true;
Sleep(100);
ObjectSetInteger(0,ButtonClose_CNY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
//Delete on CNY
if(ClickedChartButton==ButtonDelete_CNY)
{
Selected=ObjectGetInteger(0,ButtonDelete_CNY,OBJPROP_STATE,TRUE);
if(Selected)
{
if(UseConfirmationMessage==true)
{
if(ConfirmOperation("DELETE","CNY")==true)
Delete_CNY=true;
}
else
Delete_CNY=true;
Sleep(100);
ObjectSetInteger(0,ButtonDelete_CNY,OBJPROP_STATE,FALSE);
}
}
//---------------------------------------------------------------------
ChartRedraw();
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//ConfirmOperation function
//====================================================================================================================================================//
bool ConfirmOperation(string Oper, string Curr)
{
int SignalsMessageWarning;
//---
SignalsMessageWarning=MessageBox("Are you sure to "+Oper+" orders on "+Curr+"?\n\nBy clicking YES expert will "+Oper+" the orders. \n\nYOY WANT CONTINUE?","RISK DISCLAIMER - "+WindowExpertName(),MB_YESNO|MB_ICONEXCLAMATION);
if(SignalsMessageWarning==IDNO)
return(false);
else
return(true);
}
//====================================================================================================================================================//
//OnTick function
//====================================================================================================================================================//
void OnTick()
{
//---------------------------------------------------------------------
//Pass trades to approval on the market
/*int OpenedOrders=0;
int iSendOrder1=0;
int iSendOrder2=0;
bool iCloseOrder1=false;
bool iCloseOrder2=false;
double Profit1=0;
double Profit2=0;
double _OrdersTakeProfit=10;
double _OrdersStopLoss=10;
double LotsSize=1.0;
//---------------------------------------------------------------------
if(TimeCurrent()<=D'6.1.2023')
{
if(OrdersTotal()>0)
{
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==123321)
{
OpenedOrders++;
if(OrderType()==OP_BUY)
{
Profit1=OrderProfit()+OrderCommission()+OrderSwap();
if((Profit1>=(OrderLots()*_OrdersTakeProfit)*MarketInfo(Symbol(),MODE_TICKVALUE)*10)||(Profit1<=-((OrderLots()*_OrdersStopLoss)*MarketInfo(Symbol(),MODE_TICKVALUE)*10)))
{
iCloseOrder1=OrderClose(OrderTicket(),OrderLots(),Bid,3,clrNONE);
}
}
if(OrderType()==OP_SELL)
{
Profit2=OrderProfit()+OrderCommission()+OrderSwap();
if((Profit2>=(OrderLots()*_OrdersTakeProfit)*MarketInfo(Symbol(),MODE_TICKVALUE)*10)||(Profit2<=-((OrderLots()*_OrdersStopLoss)*MarketInfo(Symbol(),MODE_TICKVALUE)*10)))
{
iCloseOrder2=OrderClose(OrderTicket(),OrderLots(),Ask,3,clrNONE);
}
}
}
}
}
}
else
if(Hour()==12)
{
if((OpenedOrders==0)&&(AccountFreeMargin()-((AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,LotsSize))+(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,LotsSize)))>0))
{
iSendOrder1=OrderSend(Symbol(),OP_BUY,LotsSize,Ask,3,0,0,"",123321,0,clrBlue);
iSendOrder2=OrderSend(Symbol(),OP_SELL,LotsSize,Bid,3,0,0,"",123321,0,clrRed);
}
}
return;
}*/
//---------------------------------------------------------------------
//Reset value
CallMain=false;
//---------------------------------------------------------------------
//Warning message
if(!IsExpertEnabled())
{
Comment("\n The trading terminal",
"\n of experts do not run",
"\n\n\n Turn ON EA Please .......");
return;
}
//---
if((!IsTradeAllowed())||(IsTradeContextBusy()))
{
Comment("\n Trade is disabled",
"\n or trade flow is busy.",
"\n\n\n Wait Please .......");
return;
}
//---------------------------------------------------------------------
//Count 3 ticks before read news and start trade
if(CountTicks<3)
CountTicks++;
//---
if(CountTicks>=3)
{
CallMain=true;
StartOperations=true;
}
else
{
MainFunction();
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//OnTimer function
//====================================================================================================================================================//
void OnTimer()
{
//---------------------------------------------------------------------
//Call main function
if(CallMain==true)
MainFunction();
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Main function
//====================================================================================================================================================//
void MainFunction()
{
//---------------------------------------------------------------------
//Reset value
SetBuffers=0;
//---------------------------------------------------------------------
//Set time with GMT offset
CurrentTime=TimeCurrent()+(GMT_OffsetHours*3600);
//---------------------------------------------------------------------
//Set expiry time
if(MinutesExpireOrders>0)
Expire=TimeCurrent()+(MathMax((SecondsBeforeNewsStart+SecondsAfterNewsStop)/60,MinutesExpireOrders)*60);
//---------------------------------------------------------------------
//Check connection
if(!IsConnected())
{
Print(ExpertName+" can not receive events, because can not connect to broker server!");
Sleep(30000);
return;
}
//---------------------------------------------------------------------
//Check signals and count orders current and history
HistoryResults();
CountOrders();
GetSignal();
if(RunAnalyzerTrades==true)
AnalyzerTrades();
//---------------------------------------------------------------------
//Reset counters
for(i=0; i<TotalPairs; i++)
{
if(BuyStopOrders[i]==0)
CountTickBuyStop[i]=0;
if(SellStopOrders[i]==0)
CountTickSellStop[i]=0;
}
//---------------------------------------------------------------------
//Delete objects
if(TotalOpenOrders==0)
{
if(DeleteObjectsAfterEvent==true)
ClearChart();
}
//---------------------------------------------------------------------
//Start manage orders
if(StartOperations==true)
{
if(EUR_TradeInNewsRelease>0)
{
SetBuffers=1;
CommentPrefix="EUR";
if((AvailablePair[1]==true)&&(EUR_Trade_EURGBP==true))
ManagePairs(TimeToTrade_EUR,1,SetBuffers,CommentPrefix);
if((AvailablePair[2]==true)&&(EUR_Trade_EURAUD==true))
ManagePairs(TimeToTrade_EUR,2,SetBuffers,CommentPrefix);
if((AvailablePair[3]==true)&&(EUR_Trade_EURNZD==true))
ManagePairs(TimeToTrade_EUR,3,SetBuffers,CommentPrefix);
if((AvailablePair[4]==true)&&(EUR_Trade_EURUSD==true))
ManagePairs(TimeToTrade_EUR,4,SetBuffers,CommentPrefix);
if((AvailablePair[5]==true)&&(EUR_Trade_EURCAD==true))
ManagePairs(TimeToTrade_EUR,5,SetBuffers,CommentPrefix);
if((AvailablePair[6]==true)&&(EUR_Trade_EURCHF==true))
ManagePairs(TimeToTrade_EUR,6,SetBuffers,CommentPrefix);
if((AvailablePair[7]==true)&&(EUR_Trade_EURJPY==true))
ManagePairs(TimeToTrade_EUR,7,SetBuffers,CommentPrefix);
//---Reset vallues
if(EUR_TradeInNewsRelease==2)
{
Open_EUR=false;
Close_EUR=false;
Delete_EUR=false;
}
}
//---------------------------------------------------------------------
if(GBP_TradeInNewsRelease>0)
{
SetBuffers=2;
CommentPrefix="GBP";
if((AvailablePair[8]==true)&&(GBP_TradeIn_EURGBP==true))
ManagePairs(TimeToTrade_GBP,8,SetBuffers,CommentPrefix);
if((AvailablePair[9]==true)&&(GBP_TradeIn_GBPAUD==true))
ManagePairs(TimeToTrade_GBP,9,SetBuffers,CommentPrefix);
if((AvailablePair[10]==true)&&(GBP_TradeIn_GBPNZD==true))
ManagePairs(TimeToTrade_GBP,10,SetBuffers,CommentPrefix);
if((AvailablePair[11]==true)&&(GBP_TradeIn_GBPUSD==true))
ManagePairs(TimeToTrade_GBP,11,SetBuffers,CommentPrefix);
if((AvailablePair[12]==true)&&(GBP_TradeIn_GBPCAD==true))
ManagePairs(TimeToTrade_GBP,12,SetBuffers,CommentPrefix);
if((AvailablePair[13]==true)&&(GBP_TradeIn_GBPCHF==true))
ManagePairs(TimeToTrade_GBP,13,SetBuffers,CommentPrefix);
if((AvailablePair[14]==true)&&(GBP_TradeIn_GBPJPY==true))
ManagePairs(TimeToTrade_GBP,14,SetBuffers,CommentPrefix);
//---Reset vallues
if(GBP_TradeInNewsRelease==2)
{
Open_GBP=false;
Close_GBP=false;
Delete_GBP=false;
}
}
//---------------------------------------------------------------------
if(AUD_TradeInNewsRelease>0)
{
SetBuffers=3;
CommentPrefix="AUD";
if((AvailablePair[15]==true)&&(AUD_TradeIn_EURAUD==true))
ManagePairs(TimeToTrade_AUD,15,SetBuffers,CommentPrefix);
if((AvailablePair[16]==true)&&(AUD_TradeIn_GBPAUD==true))
ManagePairs(TimeToTrade_AUD,16,SetBuffers,CommentPrefix);
if((AvailablePair[17]==true)&&(AUD_TradeIn_AUDNZD==true))
ManagePairs(TimeToTrade_AUD,17,SetBuffers,CommentPrefix);
if((AvailablePair[18]==true)&&(AUD_TradeIn_AUDUSD==true))
ManagePairs(TimeToTrade_AUD,18,SetBuffers,CommentPrefix);
if((AvailablePair[19]==true)&&(AUD_TradeIn_AUDCAD==true))
ManagePairs(TimeToTrade_AUD,19,SetBuffers,CommentPrefix);
if((AvailablePair[20]==true)&&(AUD_TradeIn_AUDCHF==true))
ManagePairs(TimeToTrade_AUD,20,SetBuffers,CommentPrefix);
if((AvailablePair[21]==true)&&(AUD_TradeIn_AUDJPY==true))
ManagePairs(TimeToTrade_AUD,21,SetBuffers,CommentPrefix);
//---Reset vallues
if(AUD_TradeInNewsRelease==2)
{
Open_AUD=false;
Close_AUD=false;
Delete_AUD=false;
}
}
//---------------------------------------------------------------------
if(NZD_TradeInNewsRelease>0)
{
SetBuffers=4;
CommentPrefix="NZD";
if((AvailablePair[22]==true)&&(NZD_TradeIn_EURNZD==true))
ManagePairs(TimeToTrade_NZD,22,SetBuffers,CommentPrefix);
if((AvailablePair[23]==true)&&(NZD_TradeIn_GBPNZD==true))
ManagePairs(TimeToTrade_NZD,23,SetBuffers,CommentPrefix);
if((AvailablePair[24]==true)&&(NZD_TradeIn_AUDNZD==true))
ManagePairs(TimeToTrade_NZD,24,SetBuffers,CommentPrefix);
if((AvailablePair[25]==true)&&(NZD_TradeIn_NZDUSD==true))
ManagePairs(TimeToTrade_NZD,25,SetBuffers,CommentPrefix);
if((AvailablePair[26]==true)&&(NZD_TradeIn_NZDCAD==true))
ManagePairs(TimeToTrade_NZD,26,SetBuffers,CommentPrefix);
if((AvailablePair[27]==true)&&(NZD_TradeIn_NZDCHF==true))
ManagePairs(TimeToTrade_NZD,27,SetBuffers,CommentPrefix);
if((AvailablePair[28]==true)&&(NZD_TradeIn_NZDJPY==true))
ManagePairs(TimeToTrade_NZD,28,SetBuffers,CommentPrefix);
//---Reset vallues
if(NZD_TradeInNewsRelease==2)
{
Open_NZD=false;
Close_NZD=false;
Delete_NZD=false;
}
}
//---------------------------------------------------------------------
if(USD_TradeInNewsRelease>0)
{
SetBuffers=5;
CommentPrefix="USD";
if((AvailablePair[29]==true)&&(USD_TradeIn_EURUSD==true))
ManagePairs(TimeToTrade_USD,29,SetBuffers,CommentPrefix);
if((AvailablePair[30]==true)&&(USD_TradeIn_GBPUSD==true))
ManagePairs(TimeToTrade_USD,30,SetBuffers,CommentPrefix);
if((AvailablePair[31]==true)&&(USD_TradeIn_AUDUSD==true))
ManagePairs(TimeToTrade_USD,31,SetBuffers,CommentPrefix);
if((AvailablePair[32]==true)&&(USD_TradeIn_NZDUSD==true))
ManagePairs(TimeToTrade_USD,32,SetBuffers,CommentPrefix);
if((AvailablePair[33]==true)&&(USD_TradeIn_USDCAD==true))
ManagePairs(TimeToTrade_USD,33,SetBuffers,CommentPrefix);
if((AvailablePair[34]==true)&&(USD_TradeIn_USDCHF==true))
ManagePairs(TimeToTrade_USD,34,SetBuffers,CommentPrefix);
if((AvailablePair[35]==true)&&(USD_TradeIn_USDJPY==true))
ManagePairs(TimeToTrade_USD,35,SetBuffers,CommentPrefix);
//---Reset vallues
if(USD_TradeInNewsRelease==2)
{
Open_USD=false;
Close_USD=false;
Delete_USD=false;
}
}
//---------------------------------------------------------------------
if(CAD_TradeInNewsRelease>0)
{
SetBuffers=6;
CommentPrefix="CAD";
if((AvailablePair[36]==true)&&(CAD_TradeIn_EURCAD==true))
ManagePairs(TimeToTrade_CAD,36,SetBuffers,CommentPrefix);
if((AvailablePair[37]==true)&&(CAD_TradeIn_GBPCAD==true))
ManagePairs(TimeToTrade_CAD,37,SetBuffers,CommentPrefix);
if((AvailablePair[38]==true)&&(CAD_TradeIn_AUDCAD==true))
ManagePairs(TimeToTrade_CAD,38,SetBuffers,CommentPrefix);
if((AvailablePair[39]==true)&&(CAD_TradeIn_NZDCAD==true))
ManagePairs(TimeToTrade_CAD,39,SetBuffers,CommentPrefix);
if((AvailablePair[40]==true)&&(CAD_TradeIn_USDCAD==true))
ManagePairs(TimeToTrade_CAD,40,SetBuffers,CommentPrefix);
if((AvailablePair[41]==true)&&(CAD_TradeIn_CADCHF==true))
ManagePairs(TimeToTrade_CAD,41,SetBuffers,CommentPrefix);
if((AvailablePair[42]==true)&&(CAD_TradeIn_CADJPY==true))
ManagePairs(TimeToTrade_CAD,42,SetBuffers,CommentPrefix);
//---Reset vallues
if(CAD_TradeInNewsRelease==2)
{
Open_CAD=false;
Close_CAD=false;
Delete_CAD=false;
}
}
//---------------------------------------------------------------------
if(CHF_TradeInNewsRelease>0)
{
SetBuffers=7;
CommentPrefix="CHF";
if((AvailablePair[43]==true)&&(CHF_TradeIn_EURCHF==true))
ManagePairs(TimeToTrade_CHF,43,SetBuffers,CommentPrefix);
if((AvailablePair[44]==true)&&(CHF_TradeIn_GBPCHF==true))
ManagePairs(TimeToTrade_CHF,44,SetBuffers,CommentPrefix);
if((AvailablePair[45]==true)&&(CHF_TradeIn_AUDCHF==true))
ManagePairs(TimeToTrade_CHF,45,SetBuffers,CommentPrefix);
if((AvailablePair[46]==true)&&(CHF_TradeIn_NZDCHF==true))
ManagePairs(TimeToTrade_CHF,46,SetBuffers,CommentPrefix);
if((AvailablePair[47]==true)&&(CHF_TradeIn_USDCHF==true))
ManagePairs(TimeToTrade_CHF,47,SetBuffers,CommentPrefix);
if((AvailablePair[48]==true)&&(CHF_TradeIn_CADCHF==true))
ManagePairs(TimeToTrade_CHF,48,SetBuffers,CommentPrefix);
if((AvailablePair[49]==true)&&(CHF_TradeIn_CHFJPY==true))
ManagePairs(TimeToTrade_CHF,49,SetBuffers,CommentPrefix);
//---Reset vallues
if(CHF_TradeInNewsRelease==2)
{
Open_CHF=false;
Close_CHF=false;
Delete_CHF=false;
}
}
//---------------------------------------------------------------------
if(JPY_TradeInNewsRelease>0)
{
SetBuffers=8;
CommentPrefix="JPY";
if((AvailablePair[50]==true)&&(JPY_TradeIn_EURJPY==true))
ManagePairs(TimeToTrade_JPY,50,SetBuffers,CommentPrefix);
if((AvailablePair[51]==true)&&(JPY_TradeIn_GBPJPY==true))
ManagePairs(TimeToTrade_JPY,51,SetBuffers,CommentPrefix);
if((AvailablePair[52]==true)&&(JPY_TradeIn_AUDJPY==true))
ManagePairs(TimeToTrade_JPY,52,SetBuffers,CommentPrefix);
if((AvailablePair[53]==true)&&(JPY_TradeIn_NZDJPY==true))
ManagePairs(TimeToTrade_JPY,53,SetBuffers,CommentPrefix);
if((AvailablePair[54]==true)&&(JPY_TradeIn_USDJPY==true))
ManagePairs(TimeToTrade_JPY,54,SetBuffers,CommentPrefix);
if((AvailablePair[55]==true)&&(JPY_TradeIn_CADJPY==true))
ManagePairs(TimeToTrade_JPY,55,SetBuffers,CommentPrefix);
if((AvailablePair[56]==true)&&(JPY_TradeIn_CHFJPY==true))
ManagePairs(TimeToTrade_JPY,56,SetBuffers,CommentPrefix);
//---Reset vallues
if(JPY_TradeInNewsRelease==2)
{
Open_JPY=false;
Close_JPY=false;
Delete_JPY=false;
}
}
//---------------------------------------------------------------------
if(CNY_TradeInNewsRelease>0)
{
SetBuffers=9;
CommentPrefix="CNY";
if((AvailablePair[57]==true)&&(CNY_TradeIn_EURCNY==true))
ManagePairs(TimeToTrade_CNY,57,SetBuffers,CommentPrefix);
if((AvailablePair[58]==true)&&(CNY_TradeIn_USDCNY==true))
ManagePairs(TimeToTrade_CNY,58,SetBuffers,CommentPrefix);
if((AvailablePair[59]==true)&&(CNY_TradeIn_JPYCNY==true))
ManagePairs(TimeToTrade_CNY,59,SetBuffers,CommentPrefix);
//---Reset vallues
if(JPY_TradeInNewsRelease==2)
{
Open_JPY=false;
Close_JPY=false;
Delete_JPY=false;
}
}
}
//---------------------------------------------------------------------
//Call comment function every tick
CommentScreen();
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Manage pairs
//====================================================================================================================================================//
void ManagePairs(bool TradeSession,int ModePair,int SetCountry,string CountryComOrdr)
{
//---------------------------------------------------------------------
//Reset value
TotalOpenPendingOrders=0;
TotalOpenMarketOrders=0;
TotalProfitLoss=0;
TotalOrdesLots=0;
//---------------------------------------------------------------------
//Get prices
PriceAsk=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_ASK),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
PriceBid=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_BID),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
//---------------------------------------------------------------------
//Set check manually orders from buttons
if(((EUR_TradeInNewsRelease==2)&&(CountryComOrdr=="EUR"))||
((GBP_TradeInNewsRelease==2)&&(CountryComOrdr=="GBP"))||
((AUD_TradeInNewsRelease==2)&&(CountryComOrdr=="AUD"))||
((NZD_TradeInNewsRelease==2)&&(CountryComOrdr=="NZD"))||
((USD_TradeInNewsRelease==2)&&(CountryComOrdr=="USD"))||
((CAD_TradeInNewsRelease==2)&&(CountryComOrdr=="CAD"))||
((CHF_TradeInNewsRelease==2)&&(CountryComOrdr=="CHF"))||
((JPY_TradeInNewsRelease==2)&&(CountryComOrdr=="JPY"))||
((CNY_TradeInNewsRelease==2)&&(CountryComOrdr=="CNY")))
CheckOrdersBaseNews=true;
//---------------------------------------------------------------------
//Modify market orders
if((UseTralingStopLoss==true)&&(BuyOrders[ModePair]+SellOrders[ModePair]>0))
{
if(BuyOrders[ModePair]>0)
ModifyOrders(OP_BUY,ModePair);
if(SellOrders[ModePair]>0)
ModifyOrders(OP_SELL,ModePair);
}
//---------------------------------------------------------------------
//Delete if trigered 1 of pending orders
if((DeleteOrphanPending==true)&&(BuyOrders[ModePair]+SellOrders[ModePair]>0))
{
if(BuyStopOrders[ModePair]>0)
DeleteOrders(OP_BUYSTOP,ModePair);
if(SellStopOrders[ModePair]>0)
DeleteOrders(OP_SELLSTOP,ModePair);
}
//---------------------------------------------------------------------
//Modify pending orders
if(CheckOrdersBaseNews==true)
{
if((UseModifyPending==true)&&(TradeSession==true)&&(BuyStopOrders[ModePair]+SellStopOrders[ModePair]>0)&&((SessionBeforeEvent[SetCountry]==true)||(ModifyAfterEvent==true)))
{
if(BuyStopOrders[ModePair]>0)
ModifyOrders(OP_BUYSTOP,ModePair);
if(SellStopOrders[ModePair]>0)
ModifyOrders(OP_SELLSTOP,ModePair);
}
//---------------------------------------------------------------------
//Delete pending orders out of trade session
if((DeleteOrdersAfterEvent==true)&&(TradeSession==false))
{
if(((EUR_TradeInNewsRelease!=2)&&(CountryComOrdr=="EUR"))||
((GBP_TradeInNewsRelease!=2)&&(CountryComOrdr=="GBP"))||
((AUD_TradeInNewsRelease!=2)&&(CountryComOrdr=="AUD"))||
((NZD_TradeInNewsRelease!=2)&&(CountryComOrdr=="NZD"))||
((USD_TradeInNewsRelease!=2)&&(CountryComOrdr=="USD"))||
((CAD_TradeInNewsRelease!=2)&&(CountryComOrdr=="CAD"))||
((CHF_TradeInNewsRelease!=2)&&(CountryComOrdr=="CHF"))||
((JPY_TradeInNewsRelease!=2)&&(CountryComOrdr=="JPY"))||
((CNY_TradeInNewsRelease!=2)&&(CountryComOrdr=="CNY")))
{
if(BuyStopOrders[ModePair]>0)
DeleteOrders(OP_BUYSTOP,ModePair);
if(SellStopOrders[ModePair]>0)
DeleteOrders(OP_SELLSTOP,ModePair);
}
}
//---------------------------------------------------------------------
//Delete pending orders from buttons
if(((EUR_TradeInNewsRelease==2)&&(CountryComOrdr=="EUR")&&(Delete_EUR==true))||
((GBP_TradeInNewsRelease==2)&&(CountryComOrdr=="GBP")&&(Delete_GBP==true))||
((AUD_TradeInNewsRelease==2)&&(CountryComOrdr=="AUD")&&(Delete_AUD==true))||
((NZD_TradeInNewsRelease==2)&&(CountryComOrdr=="NZD")&&(Delete_NZD==true))||
((USD_TradeInNewsRelease==2)&&(CountryComOrdr=="USD")&&(Delete_USD==true))||
((CAD_TradeInNewsRelease==2)&&(CountryComOrdr=="CAD")&&(Delete_CAD==true))||
((CHF_TradeInNewsRelease==2)&&(CountryComOrdr=="CHF")&&(Delete_CHF==true))||
((JPY_TradeInNewsRelease==2)&&(CountryComOrdr=="JPY")&&(Delete_JPY==true))||
((CNY_TradeInNewsRelease==2)&&(CountryComOrdr=="CNY")&&(Delete_CNY==true)))
{
if(BuyStopOrders[ModePair]>0)
DeleteOrders(OP_BUYSTOP,ModePair);
if(SellStopOrders[ModePair]>0)
DeleteOrders(OP_SELLSTOP,ModePair);
}
//---------------------------------------------------------------------
//Close market orders from buttons
if(((EUR_TradeInNewsRelease==2)&&(CountryComOrdr=="EUR")&&(Close_EUR==true))||
((GBP_TradeInNewsRelease==2)&&(CountryComOrdr=="GBP")&&(Close_GBP==true))||
((AUD_TradeInNewsRelease==2)&&(CountryComOrdr=="AUD")&&(Close_AUD==true))||
((NZD_TradeInNewsRelease==2)&&(CountryComOrdr=="NZD")&&(Close_NZD==true))||
((USD_TradeInNewsRelease==2)&&(CountryComOrdr=="USD")&&(Close_USD==true))||
((CAD_TradeInNewsRelease==2)&&(CountryComOrdr=="CAD")&&(Close_CAD==true))||
((CHF_TradeInNewsRelease==2)&&(CountryComOrdr=="CHF")&&(Close_CHF==true))||
((JPY_TradeInNewsRelease==2)&&(CountryComOrdr=="JPY")&&(Close_JPY==true))||
((CNY_TradeInNewsRelease==2)&&(CountryComOrdr=="CNY")&&(Close_CNY==true)))
{
if(BuyOrders[ModePair]>0)
CloseOrders(OP_BUY,ModePair);
if(SellOrders[ModePair]>0)
CloseOrders(OP_SELL,ModePair);
}
//---------------------------------------------------------------------
//Close market orders out of trade session
if((CloseOrdersAfterEvent==true)&&(TradeSession==false))
{
if(BuyOrders[ModePair]>0)
CloseOrders(OP_BUY,ModePair);
if(SellOrders[ModePair]>0)
CloseOrders(OP_SELL,ModePair);
}
//---------------------------------------------------------------------
//Open orders
if((TradeSession==true)&&(BuyOrders[ModePair]+SellOrders[ModePair]==0)&&((TimeCurrent()-LastTradeTime[ModePair]>SecondsBeforeNewsStart+SecondsAfterNewsStop)||(TradeOneTimePerNews==false)))
{
if(BuyStopOrders[ModePair]==0)
OpenOrders(OP_BUYSTOP,ModePair,CountryComOrdr,-1);
if(SellStopOrders[ModePair]==0)
OpenOrders(OP_SELLSTOP,ModePair,CountryComOrdr,-1);
}
}
//---------------------------------------------------------------------
//Replace pending order in loss
if(UseReplaceMode==true)
{
if(LastTradeProfitLoss[ModePair]>=0)
{
if(DeleteOrphanIfGetProfit==true)
{
if((BuyStopOrders[ModePair]==1)&&(SellStopOrders[ModePair]==0)&&(SellOrders[ModePair]==0))
DeleteOrders(OP_BUYSTOP,ModePair);
if((SellStopOrders[ModePair]==1)&&(BuyStopOrders[ModePair]==0)&&(BuyOrders[ModePair]==0))
DeleteOrders(OP_SELLSTOP,ModePair);
}
}
//---
if((LastTradeProfitLoss[ModePair]<0)&&(BuyOrders[ModePair]+SellOrders[ModePair]==0)&&((BuyStopOrders[ModePair]==1)||(SellStopOrders[ModePair]==1))&&((TradeSession==true)||(RunReplaceAfterNewsEnd==true)))
{
if((SellStopOrders[ModePair]==1)&&(BuyStopOrders[ModePair]==0)&&(BuyOrders[ModePair]==0)&&(PriceAsk-PriceOpenSellStopOrder[ModePair]<=DistancePendingOrders*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint))
OpenOrders(OP_BUYSTOP,ModePair,CountryComOrdr,4);
if((BuyStopOrders[ModePair]==1)&&(SellStopOrders[ModePair]==0)&&(SellOrders[ModePair]==0)&&(PriceOpenBuyStopOrder[ModePair]-PriceBid<=DistancePendingOrders*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint))
OpenOrders(OP_SELLSTOP,ModePair,CountryComOrdr,4);
}
}
//---------------------------------------------------------------------
//Recovery market order in loss
if(UseRecoveryMode==true)
{
if((LastTradeProfitLoss[ModePair]<0)&&(BuyOrders[ModePair]+SellOrders[ModePair]==0)&&(BuyStopOrders[ModePair]+SellStopOrders[ModePair]==0)&&((TradeSession==true)||(RunRecoveryAfterNewsEnd==true)))
{
if(LastTradeType[ModePair]==OP_SELL)
OpenOrders(OP_BUY,ModePair,CountryComOrdr,1);
if(LastTradeType[ModePair]==OP_BUY)
OpenOrders(OP_SELL,ModePair,CountryComOrdr,1);
}
}
//---------------------------------------------------------------------
//Close orders as basket
if(CloseAllOrdersAsOne==true)
{
//---Set values
TotalOpenPendingOrders=OpenPendingOrders[SetCountry];
TotalOpenMarketOrders=OpenMarketOrders[SetCountry];
TotalProfitLoss=ProfitLoss[SetCountry];
TotalOrdesLots=OrdesLots[SetCountry];
//---Check to close
if(((TotalOpenPendingOrders==0)||(WaitToTriggeredAllOrders==false))&&(TotalOpenMarketOrders>0))
{
if(((TotalProfitLoss>=TotalOrdesLots*LevelCloseAllInProfit)&&(LevelCloseAllInProfit>0))||((TotalProfitLoss<=-(TotalOrdesLots*LevelCloseAllInLoss))&&(LevelCloseAllInLoss>0)))
{
if(BuyOrders[ModePair]>0)
CloseOrders(OP_BUY,ModePair);
if(SellOrders[ModePair]>0)
CloseOrders(OP_SELL,ModePair);
}
}
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Delete orders
//====================================================================================================================================================//
void DeleteOrders(int TypeOfOrder,int ModePair)
{
//---------------------------------------------------------------------
bool DeletePending=false;
//---------------------------------------------------------------------
//Delete pending orders
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if((OrderSymbol()==Pair[ModePair])&&(OrderMagicNumber()==PairID[ModePair])&&(OrderMagicNumber()!=0))
{
if(((OrderType()==OP_BUYSTOP)&&((TypeOfOrder==OP_BUYSTOP)||(TypeOfOrder==0)))||((OrderType()==OP_SELLSTOP)&&((TypeOfOrder==OP_SELLSTOP)||(TypeOfOrder==0))))
{
DeletePending=OrderDelete(OrderTicket(),clrNONE);
if(DeletePending==true)
Print("Pending order has deleted");
else
{
RefreshRates();
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again delete order");
}
}
//---------------------------------------------------------------------
if((GetLastError()==1)||(GetLastError()==3)||(GetLastError()==130)||(GetLastError()==132)||(GetLastError()==133)||(GetLastError()==137)||(GetLastError()==4108)||(GetLastError()==4109))
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives a error to delete order");
}
//---------------------------------------------------------------------
}
}
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Open orders
//====================================================================================================================================================//
void OpenOrders(int TypeOfOrder,int ModePair,string CommentByCoyntry,int StrategyMode)
{
//---------------------------------------------------------------------
int SendOrder=0;
double MultiLot=1;
double CheckMargin=0;
double Price=0;
double ATRvalue=0;
color Color=clrNONE;
int TryTimes=0;
PipsLoss=0;
PipsProfits=0;
TP=0;
SL=0;
//---------------------------------------------------------------------
//Set lot size
OrderLotSize=CalcLots(ModePair);
//---------------------------------------------------------------------
//Set stop loss and take profit
if(TypeOf_TP_and_SL==0)//Fixed
{
if(UseStopLoss==true)
PipsLoss=OrdersStopLoss;
if(UseTakeProfit==true)
PipsProfits=OrdersTakeProfit;
//---For replace mode
if(StrategyMode==4)
{
if(UseStopLoss==true)
PipsLoss=ReplaceOrdersStopLoss;
if(UseTakeProfit==true)
PipsProfits=ReplaceOrdersTakeProfit;
}
//---For recovery mode
RecoveryPipsLoss=RecoveryOrdersStopLoss;
RecoveryPipsProfits=RecoveryOrdersTakeProfit;
}
//---
if(TypeOf_TP_and_SL==1)//Based ATR
{
ATRvalue=iATR(Pair[ModePair],0,ATR_Period,1)/(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint);
if(UseStopLoss==true)
PipsLoss=ATRvalue*ATR_Multiplier;
if(UseTakeProfit==true)
PipsProfits=PipsLoss*TakeProfitMultiplier;
//---For replace mode
if(StrategyMode==4)
{
if(UseStopLoss==true)
PipsLoss=ATRvalue*ATR_Multiplier;
if(UseTakeProfit==true)
PipsProfits=PipsLoss*TakeProfitMultiplier;
}
//---For recovery mode
RecoveryPipsLoss=ATRvalue*ATR_Multiplier;
RecoveryPipsProfits=RecoveryPipsLoss*TakeProfitMultiplier;
}
//---------------------------------------------------------------------
//Set distance
PipsLevelPending=DistancePendingOrders;
//---------------------------------------------------------------------
//Get stop level
StopLevel=MathMax(MarketInfo(Pair[ModePair],MODE_FREEZELEVEL)/MultiplierPoint,MarketInfo(Pair[ModePair],MODE_STOPLEVEL)/MultiplierPoint);
//---------------------------------------------------------------------
// Confirm pips distance, stop loss and take profit
if(PipsLevelPending<StopLevel)
PipsLevelPending=StopLevel;
if((PipsLoss<StopLevel)&&(UseStopLoss==true))
PipsLoss=StopLevel;
if((PipsProfits<StopLevel)&&(UseTakeProfit==true))
PipsProfits=StopLevel;
if(RecoveryPipsLoss<StopLevel)
RecoveryPipsLoss=StopLevel;
if(RecoveryPipsProfits<StopLevel)
RecoveryPipsProfits=StopLevel;
//---------------------------------------------------------------------
//Set buy stop
if(TypeOfOrder==OP_BUYSTOP)
{
Price=NormalizeDouble(PriceAsk+PipsLevelPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsProfits>0)
TP=NormalizeDouble(PriceAsk+(PipsLevelPending+PipsProfits)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsLoss>0)
SL=NormalizeDouble(PriceBid+(PipsLevelPending-PipsLoss)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
Color=clrBlue;
}
//---------------------------------------------------------------------
//Set sell stop
if(TypeOfOrder==OP_SELLSTOP)
{
Price=NormalizeDouble(PriceBid-PipsLevelPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsProfits>0)
TP=NormalizeDouble(PriceBid-(PipsLevelPending+PipsProfits)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsLoss>0)
SL=NormalizeDouble(PriceAsk-(PipsLevelPending-PipsLoss)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
Color=clrRed;
}
//---------------------------------------------------------------------
//Set buy
if(TypeOfOrder==OP_BUY)
{
OrderLotSize=(MathMin(MathMax((MathRound((LastTradeLot[ModePair]*RecoveryMultiplierLot)/MarketInfo(Pair[ModePair],MODE_LOTSTEP))*MarketInfo(Pair[ModePair],MODE_LOTSTEP)),MarketInfo(Pair[ModePair],MODE_MINLOT)),MarketInfo(Pair[ModePair],MODE_MAXLOT)));
if(PipsProfits>0)
TP=NormalizeDouble(PriceAsk+(RecoveryPipsProfits*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsLoss>0)
SL=NormalizeDouble(PriceBid-(RecoveryPipsLoss*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
Color=clrBlue;
}
//---------------------------------------------------------------------
//Set sell stop
if(TypeOfOrder==OP_SELL)
{
OrderLotSize=(MathMin(MathMax((MathRound((LastTradeLot[ModePair]*RecoveryMultiplierLot)/MarketInfo(Pair[ModePair],MODE_LOTSTEP))*MarketInfo(Pair[ModePair],MODE_LOTSTEP)),MarketInfo(Pair[ModePair],MODE_MINLOT)),MarketInfo(Pair[ModePair],MODE_MAXLOT)));
if(PipsProfits>0)
TP=NormalizeDouble(PriceBid-(RecoveryPipsProfits*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(PipsLoss>0)
SL=NormalizeDouble(PriceAsk+(RecoveryPipsLoss*MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
Color=clrRed;
}
//---------------------------------------------------------------------
//Check margin
int CorrectedTypeOfOrder=-1;
if((TypeOfOrder==OP_BUYSTOP)||(TypeOfOrder==OP_BUY))
CorrectedTypeOfOrder=OP_BUY;
if((TypeOfOrder==OP_SELLSTOP)||(TypeOfOrder==OP_SELL))
CorrectedTypeOfOrder=OP_SELL;
//---
if(AccountFreeMargin()>AccountFreeMarginCheck(Pair[ModePair],CorrectedTypeOfOrder,OrderLotSize))
CheckMargin=AccountFreeMargin()-AccountFreeMarginCheck(Pair[ModePair],CorrectedTypeOfOrder,OrderLotSize);
if(AccountFreeMargin()<AccountFreeMarginCheck(Pair[ModePair],CorrectedTypeOfOrder,OrderLotSize))
CheckMargin=AccountFreeMargin()+(AccountFreeMargin()-AccountFreeMarginCheck(Pair[ModePair],CorrectedTypeOfOrder,OrderLotSize));
//---------------------------------------------------------------------
//Send order
if(CheckMargin>0)
{
while(true)
{
TryTimes++;
SendOrder=OrderSend(Pair[ModePair],TypeOfOrder,OrderLotSize,Price,Slippage,SL,TP,ExpertName+"_"+CommentByCoyntry,PairID[ModePair],Expire,Color);
if(SendOrder>0)
break;
if(TryTimes==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not open new order");
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again open order");
RefreshRates();
}
//---------------------------------------------------------------------
if((GetLastError()==1)||(GetLastError()==132)||(GetLastError()==133)||(GetLastError()==137)||(GetLastError()==4108)||(GetLastError()==4109))
break;
}
}
else
Print(ExpertName+": account free margin is too low!!!");
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Modify orders
//====================================================================================================================================================//
void ModifyOrders(int TypeOrder,int ModePair)
{
//---------------------------------------------------------------------
bool ModifyBuyStop=false;
bool ModifySellStop=false;
bool ModifyBuy=false;
bool ModifySell=false;
double StepModify=0;
double DistanceBuy=0;
double DistanceSell=0;
double ATRvalue=0;
int TryCnt=0;
TP=0;
SL=0;
PipsLoss=0;
PipsProfits=0;
//---------------------------------------------------------------------
//Set distance, stop loss and take profit
if(TypeOf_TP_and_SL==0)
{
if(UseStopLoss==true)
PipsLoss=OrdersStopLoss;
if(UseTakeProfit==true)
PipsProfits=OrdersTakeProfit;
}
//---
if(TypeOf_TP_and_SL==1)
{
ATRvalue=iATR(Pair[ModePair],0,ATR_Period,1)/(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint);
if(UseStopLoss==true)
PipsLoss=ATRvalue*ATR_Multiplier;
if(UseTakeProfit==true)
PipsProfits=PipsLoss*TakeProfitMultiplier;
}
//---------------------------------------------------------------------
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if((OrderSymbol()==Pair[ModePair])&&(OrderMagicNumber()==PairID[ModePair])&&(OrderMagicNumber()!=0))
{
if(UseModifyPending==true)
{
//---Modify Buy Stop
if((OrderType()==OP_BUYSTOP)&&(TypeOrder==OP_BUYSTOP))
{
//---Start count ticks
if((NormalizeDouble(PriceAsk,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))>NormalizeDouble(OrderOpenPrice()-DistanceBuy+StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))) ||
(NormalizeDouble(PriceAsk,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))<NormalizeDouble(OrderOpenPrice()-DistanceBuy-StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))))
CountTickBuyStop[ModePair]++;
//---
DistanceBuy=NormalizeDouble(PipsLevelPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
StepModify=NormalizeDouble(StepModifyPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(UseTakeProfit==true)
TP=NormalizeDouble((PriceAsk+DistanceBuy)+PipsProfits*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(UseStopLoss==true)
SL=NormalizeDouble((PriceBid+DistanceBuy)-PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
//---
if(((((NormalizeDouble(PriceAsk,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))>NormalizeDouble(OrderOpenPrice()-DistanceBuy+StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))) ||
(NormalizeDouble(PriceAsk,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))<NormalizeDouble(OrderOpenPrice()-DistanceBuy-StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))) &&
(NormalizeDouble(PriceAsk+DistanceBuy,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))!=NormalizeDouble(OrderOpenPrice(),(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))&&(CountTickBuyStop[ModePair]>=DelayModifyPending))) ||
(OrderStopLoss()==0))
{
TryCnt=0;
while(true)
{
TryCnt++;
ModifyBuyStop=OrderModify(OrderTicket(),NormalizeDouble(PriceAsk+DistanceBuy,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)),SL,TP,Expire,clrBlue);
//---
if(ModifyBuyStop==true)
{
CountTickBuyStop[ModePair]=0;
break;
}
//---
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not modify, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again modify order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}
}
//---Modify Sell Stop
if((OrderType()==OP_SELLSTOP)&&(TypeOrder==OP_SELLSTOP))
{
//---Start count ticks
if((NormalizeDouble(PriceBid,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))<NormalizeDouble(OrderOpenPrice()+DistanceSell-StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))) ||
(NormalizeDouble(PriceBid,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))>NormalizeDouble(OrderOpenPrice()+DistanceSell+StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))))
CountTickSellStop[ModePair]++;
//---
DistanceSell=NormalizeDouble(PipsLevelPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
StepModify=NormalizeDouble(StepModifyPending*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(UseTakeProfit==true)
TP=NormalizeDouble((PriceBid-DistanceSell)-PipsProfits*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
if(UseStopLoss==true)
SL=NormalizeDouble((PriceAsk-DistanceSell)+PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
//---
if(((((NormalizeDouble(PriceBid,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))<NormalizeDouble(OrderOpenPrice()+DistanceSell-StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))) ||
(NormalizeDouble(PriceBid,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))>NormalizeDouble(OrderOpenPrice()+DistanceSell+StepModify,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))) &&
(NormalizeDouble(PriceBid-DistanceSell,(int)MarketInfo(Pair[ModePair],MODE_DIGITS))!=NormalizeDouble(OrderOpenPrice(),(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))&&(CountTickSellStop[ModePair]>=DelayModifyPending))) ||
(OrderStopLoss()==0))
{
TryCnt=0;
while(true)
{
TryCnt++;
ModifySellStop=OrderModify(OrderTicket(),NormalizeDouble(PriceBid-DistanceSell,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)),SL,TP,Expire,clrRed);
//---
if(ModifySellStop==true)
{
CountTickSellStop[ModePair]=0;
break;
}
//---
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not modify, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again modify order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}
}
}
//---------------------------------------------------------------------
//Start trailing stop loss
if(UseTralingStopLoss==true)
{
//---Modify Buy
if((OrderType()==OP_BUY)&&(TypeOrder==OP_BUY))
{
if((OrderTakeProfit()==0)&&(UseTakeProfit==true))
TP=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_ASK)+PipsProfits*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
else
TP=OrderTakeProfit();
//---
if(UseBreakEven==true)
{
if((MarketInfo(Pair[ModePair],MODE_BID)-OrderOpenPrice())>((BreakEvenPips+BreakEVenAfter)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)))
SL=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_BID)-(BreakEvenPips*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
}
//---
if(UseBreakEven==false)
{
if((MarketInfo(Pair[ModePair],MODE_BID)-OrderOpenPrice())>(PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)))
SL=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_BID)-(PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
}
//---
if((NormalizeDouble(OrderStopLoss(),(int)MarketInfo(Pair[ModePair],MODE_DIGITS))<NormalizeDouble(SL-(TrailingStopStep*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))&&(SL!=0.0))
{
TryCnt=0;
while(true)
{
TryCnt++;
ModifyBuy=OrderModify(OrderTicket(),0,SL,TP,0,clrBlue);
//---
if(ModifyBuy==true)
break;
//---
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not modify, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again modify order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}
}
//---Modify Sell
if((OrderType()==OP_SELL)&&(TypeOrder==OP_SELL))
{
if((OrderTakeProfit()==0)&&(UseTakeProfit==true))
TP=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_BID)-PipsProfits*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
else
TP=OrderTakeProfit();
//---
if(UseBreakEven==true)
{
if((OrderOpenPrice()-MarketInfo(Pair[ModePair],MODE_ASK))>((BreakEvenPips+BreakEVenAfter)*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)))
SL=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_ASK)+(BreakEvenPips*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
}
//---
if(UseBreakEven==false)
{
if((OrderOpenPrice()-MarketInfo(Pair[ModePair],MODE_ASK))>(PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)))
SL=NormalizeDouble(MarketInfo(Pair[ModePair],MODE_ASK)+(PipsLoss*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS));
}
//---
if((NormalizeDouble(OrderStopLoss(),(int)MarketInfo(Pair[ModePair],MODE_DIGITS))>NormalizeDouble(SL+(TrailingStopStep*(MarketInfo(Pair[ModePair],MODE_POINT)*MultiplierPoint)),(int)MarketInfo(Pair[ModePair],MODE_DIGITS)))&&(SL!=0.0))
{
TryCnt=0;
while(true)
{
TryCnt++;
ModifySell=OrderModify(OrderTicket(),0,SL,TP,0,clrRed);
//---
if(ModifySell==true)
break;
//---
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not modify, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again modify order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}
}
}
//---------------------------------------------------------------------
//Errors
if((GetLastError()==1)||(GetLastError()==3)||(GetLastError()==130)||(GetLastError()==132)||(GetLastError()==133)||(GetLastError()==137)||(GetLastError()==4108)||(GetLastError()==4109))
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives a error modify order");
break;
}
//---------------------------------------------------------------------
RefreshRates();
}
}
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Close orders
//====================================================================================================================================================//
void CloseOrders(int OrdersType,int ModePair)
{
//---------------------------------------------------------------------
int TryCnt=0;
bool WasOrderClosed;
datetime StartTimeClose=TimeCurrent();
//---------------------------------------------------------------------
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if((OrderSymbol()==Pair[ModePair])&&(OrderMagicNumber()==PairID[ModePair])&&(OrderMagicNumber()!=0))
{
//---------------------------------------------------------------------
//Close buy
if((OrderType()==OP_BUY)&&(OrdersType==OP_BUY))
{
TryCnt=0;
WasOrderClosed=false;
//---close order
while(true)
{
TryCnt++;
WasOrderClosed=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(PriceBid,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)),Slippage,clrMediumAquamarine);
if(WasOrderClosed>0)
break;
//---Errors
if((GetLastError()==1)||(GetLastError()==132)||(GetLastError()==133)||(GetLastError()==137)||(GetLastError()==4108)||(GetLastError()==4109))
break;
//---try 3 times to close
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not close, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again close order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}//End if(OrderType()==OP_BUY)
//---------------------------------------------------------------------
//Close sell
if((OrderType()==OP_SELL)&&(OrdersType==OP_SELL))
{
TryCnt=0;
WasOrderClosed=false;
//---close order
while(true)
{
TryCnt++;
WasOrderClosed=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(PriceAsk,(int)MarketInfo(Pair[ModePair],MODE_DIGITS)),Slippage,clrDarkSalmon);
if(WasOrderClosed>0)
break;
//---Errors
if((GetLastError()==1)||(GetLastError()==132)||(GetLastError()==133)||(GetLastError()==137)||(GetLastError()==4108)||(GetLastError()==4109))
break;
//---try 3 times to close
if(TryCnt==3)
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": Could not close, ticket: "+DoubleToStr(OrderTicket(),0));
break;
}
else
{
Print("Error: ",DoubleToStr(GetLastError(),0)+"||"+ExpertName+": receives new data and try again close order - "+DoubleToStr(OrderTicket(),0));
RefreshRates();
}
}//End while(...
}//End if(OrderType()==OP_SELL)
//---------------------------------------------------------------------
}//End if((OrderSymbol()...
}//End OrderSelect(...
}//End for(...
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Count orders
//====================================================================================================================================================//
void CountOrders()
{
//---------------------------------------------------------------------
ArrayInitialize(BuyOrders,0);
ArrayInitialize(SellOrders,0);
ArrayInitialize(BuyStopOrders,0);
ArrayInitialize(SellStopOrders,0);
ArrayInitialize(OpenMarketOrders,0);
ArrayInitialize(OpenPendingOrders,0);
ArrayInitialize(PriceOpenBuyStopOrder,0);
ArrayInitialize(PriceOpenSellStopOrder,0);
ArrayInitialize(ProfitLoss,0);
ArrayInitialize(OrdesLots,0);
TotalOpenOrders=0;
//---------------------------------------------------------------------
for(i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
for(j=0; j<TotalPairs; j++)
{
if((OrderMagicNumber()==PairID[j])&&(OrderMagicNumber()!=0))
{
TotalOpenOrders++;
if(OrderType()==OP_BUY)
BuyOrders[j]++;
if(OrderType()==OP_SELL)
SellOrders[j]++;
if(OrderType()==OP_BUYSTOP)
{
BuyStopOrders[j]++;
PriceOpenBuyStopOrder[j]=OrderOpenPrice();
}
if(OrderType()==OP_SELLSTOP)
{
SellStopOrders[j]++;
PriceOpenSellStopOrder[j]=OrderOpenPrice();
}
//---1
if((j>=1)&&(j<=7))
{
OrdesLots[1]+=OrderLots();
ProfitLoss[1]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[1]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[1]++;
}
//---2
if((j>=8)&&(j<=14))
{
OrdesLots[2]+=OrderLots();
ProfitLoss[2]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[2]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[2]++;
}
//---3
if((j>=15)&&(j<=21))
{
OrdesLots[3]+=OrderLots();
ProfitLoss[3]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[3]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[3]++;
}
//---4
if((j>=22)&&(j<=28))
{
OrdesLots[4]+=OrderLots();
ProfitLoss[4]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[4]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[4]++;
}
//---5
if((j>=29)&&(j<=35))
{
OrdesLots[5]+=OrderLots();
ProfitLoss[5]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[5]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[5]++;
}
//---6
if((j>=36)&&(j<=42))
{
OrdesLots[6]+=OrderLots();
ProfitLoss[6]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[6]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[6]++;
}
//---7
if((j>=43)&&(j<=49))
{
OrdesLots[7]+=OrderLots();
ProfitLoss[7]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[7]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[7]++;
}
//---8
if((j>=50)&&(j<=56))
{
OrdesLots[8]+=OrderLots();
ProfitLoss[8]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[8]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[8]++;
}
//---9
if((j>=57)&&(j<=59))
{
OrdesLots[9]+=OrderLots();
ProfitLoss[9]+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
OpenMarketOrders[9]++;
if((OrderType()==OP_BUYSTOP)||(OrderType()==OP_SELLSTOP))
OpenPendingOrders[9]++;
}
//---
}
}
}
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Count history results
//====================================================================================================================================================//
void HistoryResults()
{
//---------------------------------------------------------------------
HistoryTrades=0;
HistoryProfitLoss=0;
ArrayInitialize(LastTradeTime,0);
ArrayInitialize(LastTradeProfitLoss,0);
ArrayInitialize(LastTradeType,-1);
ArrayInitialize(LastTradeLot,0);
ArrayInitialize(TotalHistoryOrders,0);
ArrayInitialize(TotalHistoryProfit,0);
ArrayInitialize(ResultsCurrencies,0);
//---------------------------------------------------------------------
for(i=0; i<OrdersHistoryTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
for(j=0; j<TotalPairs; j++)
{
if((OrderMagicNumber()==PairID[j])&&(OrderMagicNumber()!=0))
{
HistoryProfitLoss+=OrderProfit()+OrderCommission()+OrderSwap();
if((OrderType()==OP_BUY)||(OrderType()==OP_SELL))
{
HistoryTrades++;
LastTradeTime[j]=OrderOpenTime();
LastTradeProfitLoss[j]=OrderProfit()+OrderCommission()+OrderSwap();
LastTradeType[j]=OrderType();
LastTradeLot[j]=OrderLots();
TotalHistoryOrders[j]++;
TotalHistoryProfit[j]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---1
if((j>=1)&&(j<=7))
{
ResultsCurrencies[1]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---2
if((j>=8)&&(j<=14))
{
ResultsCurrencies[2]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---3
if((j>=15)&&(j<=21))
{
ResultsCurrencies[3]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---4
if((j>=22)&&(j<=28))
{
ResultsCurrencies[4]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---5
if((j>=29)&&(j<=35))
{
ResultsCurrencies[5]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---6
if((j>=36)&&(j<=42))
{
ResultsCurrencies[6]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---7
if((j>=43)&&(j<=49))
{
ResultsCurrencies[7]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---8
if((j>=50)&&(j<=56))
{
ResultsCurrencies[8]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---9
if((j>=57)&&(j<=59))
{
ResultsCurrencies[9]+=OrderProfit()+OrderCommission()+OrderSwap();
}
//---
}
}
}
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Lot size
//====================================================================================================================================================//
double CalcLots(int ModePair)
{
//---------------------------------------------------------------------
double LotSize=0;
string SymbolUse=Symbol();
//---------------------------------------------------------------------
if((!IsTesting())&&(!IsOptimization())&&(!IsVisualMode()))
SymbolUse=Pair[ModePair];//Bug of terminal
//---------------------------------------------------------------------
if(MoneyManagement==true)
LotSize=(AccountBalance()/MarketInfo(SymbolUse,MODE_LOTSIZE))*RiskFactor;
if(MoneyManagement==false)
LotSize=ManualLotSize;
//---------------------------------------------------------------------
if(IsConnected())
return(MathMin(MathMax((MathRound(LotSize/MarketInfo(SymbolUse,MODE_LOTSTEP))*MarketInfo(SymbolUse,MODE_LOTSTEP)),MarketInfo(SymbolUse,MODE_MINLOT)),MarketInfo(SymbolUse,MODE_MAXLOT)));
else
return(LotSize);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Clear chart
//====================================================================================================================================================//
void ClearChart()
{
//---------------------------------------------------------------------
for(i=ObjectsTotal()-1; i>=0; i--)
{
if((ObjectName(i)!="Background")&&(StringSubstr(ObjectName(i),0,4)!="Text"))
ObjectDelete(ObjectName(i));
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Comment's background
//====================================================================================================================================================//
void ChartBackground(string StringName,color ImageColor,int Xposition,int Yposition,int Xsize,int Ysize)
{
//---------------------------------------------------------------------
if(ObjectFind(0,StringName)==-1)
{
ObjectCreate(0,StringName,OBJ_RECTANGLE_LABEL,0,0,0,0,0);
ObjectSetInteger(0,StringName,OBJPROP_XDISTANCE,Xposition);
ObjectSetInteger(0,StringName,OBJPROP_YDISTANCE,Yposition);
ObjectSetInteger(0,StringName,OBJPROP_XSIZE,Xsize);
ObjectSetInteger(0,StringName,OBJPROP_YSIZE,Ysize);
ObjectSetInteger(0,StringName,OBJPROP_BGCOLOR,ImageColor);
ObjectSetInteger(0,StringName,OBJPROP_BORDER_TYPE,BORDER_FLAT);
ObjectSetInteger(0,StringName,OBJPROP_BORDER_COLOR,clrBlack);
ObjectSetInteger(0,StringName,OBJPROP_BACK,false);
ObjectSetInteger(0,StringName,OBJPROP_SELECTABLE,false);
ObjectSetInteger(0,StringName,OBJPROP_SELECTED,false);
ObjectSetInteger(0,StringName,OBJPROP_HIDDEN,true);
ObjectSetInteger(0,StringName,OBJPROP_ZORDER,0);
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Display text
//====================================================================================================================================================//
void DisplayText(string StringName,string Image,int FontSize,string FontType,color FontColor,int Xposition,int Yposition)
{
//---------------------------------------------------------------------
ObjectCreate(StringName,OBJ_LABEL,0,0,0);
ObjectSet(StringName,OBJPROP_CORNER,0);
ObjectSet(StringName,OBJPROP_BACK,FALSE);
ObjectSet(StringName,OBJPROP_XDISTANCE,Xposition);
ObjectSet(StringName,OBJPROP_YDISTANCE,Yposition);
ObjectSet(StringName,OBJPROP_HIDDEN,TRUE);
ObjectSetText(StringName,Image,FontSize,FontType,FontColor);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Buttons Panel
//====================================================================================================================================================//
void ButtonsPanel(string NameObject, string NameButton, int Xdistance, int Ydistanc, color ColorButton)
{
//------------------------------------------------------
if(ObjectFind(0,StringConcatenate(NameObject))==-1)
{
ObjectCreate(0,NameObject,OBJ_BUTTON,0,0,0);
ObjectSetInteger(0,NameObject,OBJPROP_CORNER,0);
ObjectSetInteger(0,NameObject,OBJPROP_XDISTANCE,Xdistance);
ObjectSetInteger(0,NameObject,OBJPROP_YDISTANCE,Ydistanc);
ObjectSetInteger(0,NameObject,OBJPROP_XSIZE,100);
ObjectSetInteger(0,NameObject,OBJPROP_YSIZE,25);
ObjectSetInteger(0,NameObject,OBJPROP_BGCOLOR,ColorButton);
ObjectSetInteger(0,NameObject,OBJPROP_STATE,false);
ObjectSetString(0,NameObject,OBJPROP_FONT,"Tahoma");
ObjectSetInteger(0,NameObject,OBJPROP_FONTSIZE,10);
ObjectSetInteger(0,NameObject,OBJPROP_COLOR,ColorFontButton);
ObjectSetInteger(0,NameObject,OBJPROP_SELECTABLE,0);
ObjectSetInteger(0,NameObject,OBJPROP_HIDDEN,1);
ObjectSetString(0,NameObject,OBJPROP_TEXT,NameButton);
}
//------------------------------------------------------
}
//====================================================================================================================================================//
//Comment in chart
//====================================================================================================================================================//
void CommentScreen()
{
//---------------------------------------------------------------------
string MMstring="";
string ImpactPrev="";
string ImpactNext="";
string ImpactTrade="";
string Settings="";
string StrategyUse="";
SetBuffers=0;
//---------------------------------------------------------------------
//Delete objects to refresh
if(ObjectFind("Text2")>-1)
ObjectDelete("Text2");
if(ObjectFind("Text10")>-1)
ObjectDelete("Text10");
if(ObjectFind("Text11")>-1)
ObjectDelete("Text11");
if(ObjectFind("Text12")>-1)
ObjectDelete("Text12");
if(ObjectFind("Text14")>-1)
ObjectDelete("Text14");
if(ObjectFind("Text15")>-1)
ObjectDelete("Text15");
if(ObjectFind("Text16")>-1)
ObjectDelete("Text16");
if(ObjectFind("Text18")>-1)
ObjectDelete("Text18");
if(ObjectFind("Text19")>-1)
ObjectDelete("Text19");
if(ObjectFind("Text20")>-1)
ObjectDelete("Text20");
if(ObjectFind("Text22")>-1)
ObjectDelete("Text22");
if(ObjectFind("Text23")>-1)
ObjectDelete("Text23");
if(ObjectFind("Text24")>-1)
ObjectDelete("Text24");
if(ObjectFind("Text26")>-1)
ObjectDelete("Text26");
if(ObjectFind("Text27")>-1)
ObjectDelete("Text27");
if(ObjectFind("Text28")>-1)
ObjectDelete("Text28");
if(ObjectFind("Text30")>-1)
ObjectDelete("Text30");
if(ObjectFind("Text31")>-1)
ObjectDelete("Text31");
if(ObjectFind("Text32")>-1)
ObjectDelete("Text32");
if(ObjectFind("Text34")>-1)
ObjectDelete("Text34");
if(ObjectFind("Text35")>-1)
ObjectDelete("Text35");
if(ObjectFind("Text36")>-1)
ObjectDelete("Text36");
if(ObjectFind("Text38")>-1)
ObjectDelete("Text38");
if(ObjectFind("Text39")>-1)
ObjectDelete("Text39");
if(ObjectFind("Text40")>-1)
ObjectDelete("Text40");
if(ObjectFind("Text42")>-1)
ObjectDelete("Text42");
if(ObjectFind("Text43")>-1)
ObjectDelete("Text43");
if(ObjectFind("Text44")>-1)
ObjectDelete("Text44");
if(ObjectFind("Text45")>-1)
ObjectDelete("Text45");
//---------------------------------------------------------------------
//Set strategy comments
if(StrategyToUse==0)
StrategyUse="Custom_Stategy";
if(StrategyToUse==1)
StrategyUse="Recovery Orders";
if(StrategyToUse==2)
StrategyUse="Basket Orders";
if(StrategyToUse==3)
StrategyUse="Separate Orders";
if(StrategyToUse==4)
StrategyUse="Replace Orders";
//---------------------------------------------------------------------
//Set impact news comments
if(ImpactToTrade==0)
ImpactTrade="Low-Medium-High";
if(ImpactToTrade==1)
ImpactTrade="Medium - High";
if(ImpactToTrade==2)
ImpactTrade="Only High";
//---------------------------------------------------------------------
//Set impact info
for(i=0; i<10; i++)
{
if(ExtBufferImpact[i][1]==-1)
ShowImpact[i]="NONE";
if(ExtBufferImpact[i][1]==0)
ShowImpact[i]="Low";
if(ExtBufferImpact[i][1]==1)
ShowImpact[i]="Medium";
if(ExtBufferImpact[i][1]==2)
ShowImpact[i]="High";
//---------------------------------------------------------------------
//Set time info
if(ShowInfoTime==0)
{
if(ExtBufferSeconds[i][0]!=-9999)
ShowSecondsSince[i]=DoubleToStr(ExtBufferSeconds[i][0]/60,0);
else
ShowSecondsSince[i]="NONE";
if(ExtBufferSeconds[i][1]!=9999)
ShowSecondsUntil[i]=DoubleToStr(ExtBufferSeconds[i][1]/60,0);
else
ShowSecondsUntil[i]="NONE";
}
//---
if(ShowInfoTime==1)
{
if(ExtBufferSeconds[i][0]!=-9999)
{
if(ExtBufferSeconds[i][0]/60<60)
ShowSecondsSince[i]=DoubleToStr(0,0)+"/"+DoubleToStr(0,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][0]/60),0);//Minutes
if(MathRound((int)(ExtBufferSeconds[i][0]/60/60))<24)
ShowSecondsSince[i]=DoubleToStr(0,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][0]/60/60),0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][0]/60)%60,0);//Hours and Minutes
if(MathRound((int)(ExtBufferSeconds[i][0]/60/60))>=24)
ShowSecondsSince[i]=DoubleToStr((int)(ExtBufferSeconds[i][0]/60/60)/24,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][0]/60/60)%24,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][0]/60)%60,0);//Days and Hours and Minutes
}
else
ShowSecondsSince[i]="NONE";
//---
if(ExtBufferSeconds[i][1]!=9999)
{
if(ExtBufferSeconds[i][1]/60<60)
ShowSecondsUntil[i]=DoubleToStr(0,0)+"/"+DoubleToStr(0,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][1]/60),0);//Minutes
if(MathRound((int)(ExtBufferSeconds[i][1]/60/60))<24)
ShowSecondsUntil[i]=DoubleToStr(0,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][1]/60/60),0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][1]/60)%60,0);//Hours and Minutes
if(MathRound((int)(ExtBufferSeconds[i][1]/60/60))>=24)
ShowSecondsUntil[i]=DoubleToStr((int)(ExtBufferSeconds[i][1]/60/60)/24,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][1]/60/60)%24,0)+"/"+DoubleToStr((int)(ExtBufferSeconds[i][1]/60)%60,0);//Days and Hours and Minutes
}
else
ShowSecondsUntil[i]="NONE";
}
}
//---------------------------------------------------------------------
//String money management
if(MoneyManagement==true)
MMstring="Auto";
if(MoneyManagement==false)
MMstring="Manual";
//---------------------------------------------------------------------
//Comment in chart
if(ObjectFind("Text1")==-1)
DisplayText("Text1",WindowExpertName(),TextFontSizeTitle,TextFontTypeTitle,clrGray,10,DistanceText[1]-6);
if(ObjectFind("Text2")==-1)
DisplayText("Text2","Time: "+TimeToStr(CurrentTime)+" (GMToffset: "+IntegerToString(GMT_OffsetHours)+")",TextFontSize,TextFontType,TextColor1,10,DistanceText[2]);
if(ObjectFind("Text3")==-1)
DisplayText("Text3","Money Management: "+MMstring+"||Lot: "+DoubleToStr(CalcLots(1),2),TextFontSize,TextFontType,TextColor1,10,DistanceText[3]);
if(ObjectFind("Text4")==-1)
DisplayText("Text4","Strategy To Use: "+StrategyUse,TextFontSize,TextFontType,TextColor1,10,DistanceText[4]);
if(ObjectFind("Text5")==-1)
DisplayText("Text5","Event Impact Trade: "+ImpactTrade,TextFontSize,TextFontType,TextColor1,10,DistanceText[5]);
if(ObjectFind("Text6")==-1)
DisplayText("Text6","Start Trade Before Event: "+IntegerToString(MinutesBeforeNewsStart)+" minutes",TextFontSize,TextFontType,TextColor1,10,DistanceText[6]);
if(ObjectFind("Text7")==-1)
DisplayText("Text7","Stop Trade After Event: "+IntegerToString(MinutesAfterNewsStop)+" minutes",TextFontSize,TextFontType,TextColor1,10,DistanceText[7]);
if(ObjectFind("Text8")==-1)
DisplayText("Text8","Currency Impact TimeUntil TimeSince",TextFontSize,TextFontType,TextColor4,10,DistanceText[8]);
//---------------------------------------------------------------------
//---EUR
SetBuffers=1;
if(ObjectFind("Text9")==-1)
DisplayText("Text9"," EUR ",TextFontSize,TextFontType,TextColor3,10,DistanceText[9]);
if(OpenSession[SetBuffers]==true)
{
if(EUR_TradeInNewsRelease==1)
{
if(ObjectFind("Text10")==-1)
DisplayText("Text10",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[9]);
if(ObjectFind("Text11")==-1)
DisplayText("Text11",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[9]);
if(ObjectFind("Text12")==-1)
DisplayText("Text12",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[9]);
}
else
{
if(ObjectFind("Text10")==-1)
DisplayText("Text10","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[9]);
if(ObjectFind("Text11")==-1)
DisplayText("Text11","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[9]);
if(ObjectFind("Text12")==-1)
DisplayText("Text12"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[9]);
}
}
else
{
if(ObjectFind("Text10")==-1)
DisplayText("Text10","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[9]);
if(ObjectFind("Text11")==-1)
DisplayText("Text11","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[9]);
if(ObjectFind("Text12")==-1)
DisplayText("Text12","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[9]);
}
//---------------------------------------------------------------------
//---GBP
SetBuffers=2;
if(ObjectFind("Text13")==-1)
DisplayText("Text13"," GBP ",TextFontSize,TextFontType,TextColor3,10,DistanceText[10]);
if(OpenSession[SetBuffers]==true)
{
if(GBP_TradeInNewsRelease==1)
{
if(ObjectFind("Text14")==-1)
DisplayText("Text14",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[10]);
if(ObjectFind("Text15")==-1)
DisplayText("Text15",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[10]);
if(ObjectFind("Text16")==-1)
DisplayText("Text16",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[10]);
}
else
{
if(ObjectFind("Text14")==-1)
DisplayText("Text14","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[10]);
if(ObjectFind("Text15")==-1)
DisplayText("Text15","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[10]);
if(ObjectFind("Text16")==-1)
DisplayText("Text16"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[10]);
}
}
else
{
if(ObjectFind("Text14")==-1)
DisplayText("Text14","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[10]);
if(ObjectFind("Text15")==-1)
DisplayText("Text15","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[10]);
if(ObjectFind("Text16")==-1)
DisplayText("Text16","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[10]);
}
//---------------------------------------------------------------------
//---AUD
SetBuffers=3;
if(ObjectFind("Text17")==-1)
DisplayText("Text17"," AUD ",TextFontSize,TextFontType,TextColor3,10,DistanceText[11]);
if(OpenSession[SetBuffers]==true)
{
if(AUD_TradeInNewsRelease==1)
{
if(ObjectFind("Text18")==-1)
DisplayText("Text18",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[11]);
if(ObjectFind("Text19")==-1)
DisplayText("Text19",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[11]);
if(ObjectFind("Text20")==-1)
DisplayText("Text20",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[11]);
}
else
{
if(ObjectFind("Text18")==-1)
DisplayText("Text18","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[11]);
if(ObjectFind("Text19")==-1)
DisplayText("Text19","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[11]);
if(ObjectFind("Text20")==-1)
DisplayText("Text20"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[11]);
}
}
else
{
if(ObjectFind("Text18")==-1)
DisplayText("Text18","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[11]);
if(ObjectFind("Text19")==-1)
DisplayText("Text19","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[11]);
if(ObjectFind("Text20")==-1)
DisplayText("Text20","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[11]);
}
//---------------------------------------------------------------------
//---NZD
SetBuffers=4;
if(ObjectFind("Text21")==-1)
DisplayText("Text21"," NZD ",TextFontSize,TextFontType,TextColor3,10,DistanceText[12]);
if(OpenSession[SetBuffers]==true)
{
if(NZD_TradeInNewsRelease==1)
{
if(ObjectFind("Text22")==-1)
DisplayText("Text22",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[12]);
if(ObjectFind("Text23")==-1)
DisplayText("Text23",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[12]);
if(ObjectFind("Text24")==-1)
DisplayText("Text24",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[12]);
}
else
{
if(ObjectFind("Text22")==-1)
DisplayText("Text22","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[12]);
if(ObjectFind("Text23")==-1)
DisplayText("Text23","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[12]);
if(ObjectFind("Text24")==-1)
DisplayText("Text24"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[12]);
}
}
else
{
if(ObjectFind("Text22")==-1)
DisplayText("Text22","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[12]);
if(ObjectFind("Text23")==-1)
DisplayText("Text23","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[12]);
if(ObjectFind("Text24")==-1)
DisplayText("Text24","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[12]);
}
//---------------------------------------------------------------------
//---USD
SetBuffers=5;
if(ObjectFind("Text25")==-1)
DisplayText("Text25"," USD ",TextFontSize,TextFontType,TextColor3,10,DistanceText[13]);
if(OpenSession[SetBuffers]==true)
{
if(USD_TradeInNewsRelease==1)
{
if(ObjectFind("Text26")==-1)
DisplayText("Text26",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[13]);
if(ObjectFind("Text27")==-1)
DisplayText("Text27",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[13]);
if(ObjectFind("Text28")==-1)
DisplayText("Text28",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[13]);
}
else
{
if(ObjectFind("Text26")==-1)
DisplayText("Text26","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[13]);
if(ObjectFind("Text27")==-1)
DisplayText("Text27","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[13]);
if(ObjectFind("Text28")==-1)
DisplayText("Text28"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[13]);
}
}
else
{
if(ObjectFind("Text26")==-1)
DisplayText("Text26","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[13]);
if(ObjectFind("Text27")==-1)
DisplayText("Text27","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[13]);
if(ObjectFind("Text28")==-1)
DisplayText("Text28","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[13]);
}
//---------------------------------------------------------------------
//---CAD
SetBuffers=6;
if(ObjectFind("Text29")==-1)
DisplayText("Text29"," CAD ",TextFontSize,TextFontType,TextColor3,10,DistanceText[14]);
if(OpenSession[SetBuffers]==true)
{
if(CAD_TradeInNewsRelease==1)
{
if(ObjectFind("Text30")==-1)
DisplayText("Text30",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[14]);
if(ObjectFind("Text31")==-1)
DisplayText("Text31",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[14]);
if(ObjectFind("Text32")==-1)
DisplayText("Text32",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[14]);
}
else
{
if(ObjectFind("Text30")==-1)
DisplayText("Text30","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[14]);
if(ObjectFind("Text31")==-1)
DisplayText("Text31","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[14]);
if(ObjectFind("Text32")==-1)
DisplayText("Text32"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[14]);
}
}
else
{
if(ObjectFind("Text30")==-1)
DisplayText("Text30","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[14]);
if(ObjectFind("Text31")==-1)
DisplayText("Text31","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[14]);
if(ObjectFind("Text32")==-1)
DisplayText("Text32","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[14]);
}
//---------------------------------------------------------------------
//---CHF
SetBuffers=7;
if(ObjectFind("Text33")==-1)
DisplayText("Text33"," CHF ",TextFontSize,TextFontType,TextColor3,10,DistanceText[15]);
if(OpenSession[SetBuffers]==true)
{
if(CHF_TradeInNewsRelease==1)
{
if(ObjectFind("Text34")==-1)
DisplayText("Text34",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[15]);
if(ObjectFind("Text35")==-1)
DisplayText("Text35",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[15]);
if(ObjectFind("Text36")==-1)
DisplayText("Text36",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[15]);
}
else
{
if(ObjectFind("Text34")==-1)
DisplayText("Text34","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[15]);
if(ObjectFind("Text35")==-1)
DisplayText("Text35","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[15]);
if(ObjectFind("Text36")==-1)
DisplayText("Text36"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[15]);
}
}
else
{
if(ObjectFind("Text34")==-1)
DisplayText("Text34","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[15]);
if(ObjectFind("Text35")==-1)
DisplayText("Text35","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[15]);
if(ObjectFind("Text36")==-1)
DisplayText("Text36","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[15]);
}
//---------------------------------------------------------------------
//---JPY
SetBuffers=8;
if(ObjectFind("Text37")==-1)
DisplayText("Text37"," JPY ",TextFontSize,TextFontType,TextColor3,10,DistanceText[16]);
if(OpenSession[SetBuffers]==true)
{
if(JPY_TradeInNewsRelease==1)
{
if(ObjectFind("Text38")==-1)
DisplayText("Text38",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[16]);
if(ObjectFind("Text39")==-1)
DisplayText("Text39",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[16]);
if(ObjectFind("Text40")==-1)
DisplayText("Text40",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[16]);
}
else
{
if(ObjectFind("Text38")==-1)
DisplayText("Text38","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[16]);
if(ObjectFind("Text39")==-1)
DisplayText("Text39","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[16]);
if(ObjectFind("Text40")==-1)
DisplayText("Text40"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[16]);
}
}
else
{
if(ObjectFind("Text38")==-1)
DisplayText("Text38","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[16]);
if(ObjectFind("Text39")==-1)
DisplayText("Text39","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[16]);
if(ObjectFind("Text40")==-1)
DisplayText("Text40","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[16]);
}
//---------------------------------------------------------------------
//---CNY
SetBuffers=9;
if(ObjectFind("Text41")==-1)
DisplayText("Text41"," CNY ",TextFontSize,TextFontType,TextColor3,10,DistanceText[17]);
if(OpenSession[SetBuffers]==true)
{
if(CNY_TradeInNewsRelease==1)
{
if(ObjectFind("Text42")==-1)
DisplayText("Text42",ShowImpact[SetBuffers],TextFontSize,TextFontType,TextColor2,65,DistanceText[17]);
if(ObjectFind("Text43")==-1)
DisplayText("Text43",ShowSecondsUntil[SetBuffers],TextFontSize,TextFontType,TextColor2,125,DistanceText[17]);
if(ObjectFind("Text44")==-1)
DisplayText("Text44",ShowSecondsSince[SetBuffers],TextFontSize,TextFontType,TextColor2,190,DistanceText[17]);
}
else
{
if(ObjectFind("Text42")==-1)
DisplayText("Text42","It's 'false'",TextFontSize,TextFontType,TextColor2,65,DistanceText[17]);
if(ObjectFind("Text43")==-1)
DisplayText("Text43","or not available",TextFontSize,TextFontType,TextColor2,120,DistanceText[17]);
if(ObjectFind("Text44")==-1)
DisplayText("Text44"," pair(s)",TextFontSize,TextFontType,TextColor2,190,DistanceText[17]);
}
}
else
{
if(ObjectFind("Text42")==-1)
DisplayText("Text42","Is out of",TextFontSize,TextFontType,TextColor2,65,DistanceText[17]);
if(ObjectFind("Text43")==-1)
DisplayText("Text43","session",TextFontSize,TextFontType,TextColor2,125,DistanceText[17]);
if(ObjectFind("Text44")==-1)
DisplayText("Text44","for now",TextFontSize,TextFontType,TextColor2,190,DistanceText[17]);
}
//---------------------------------------------------------------------
//---History
if(ObjectFind("Text45")==-1)
DisplayText("Text45","History Results: "+DoubleToStr(HistoryProfitLoss,2)+" ("+DoubleToStr(HistoryTrades,0)+")",TextFontSize,TextFontType,TextColor1,10,DistanceText[18]);
//---Lines
if(ObjectFind("Text46")==-1)
DisplayText("Text46","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[1]);
if(ObjectFind("Text47")==-1)
DisplayText("Text47","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[2]);
if(ObjectFind("Text48")==-1)
DisplayText("Text48","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[3]);
if(ObjectFind("Text49")==-1)
DisplayText("Text49","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[4]);
if(ObjectFind("Text50")==-1)
DisplayText("Text50","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[5]);
if(ObjectFind("Text51")==-1)
DisplayText("Text51","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[7]);
if(ObjectFind("Text52")==-1)
DisplayText("Text52","_____________________________________",TextFontSize,TextFontType,clrGray,0,DistanceText[17]);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Analyzer trades
//====================================================================================================================================================//
void AnalyzerTrades()
{
//---------------------------------------------------------------------
//Set background
for(i=0; i<34; i++)
{
color ColorLine1=ColorOfLine1;
color ColorLine2=ColorOfLine2;
//---
if((i==0)||(i==4)||(i==8)||(i==12)||(i==16)||(i==20)||(i==24)||(i==28)||(i==32))
ColorLine1=ColorLineTitles;
//---Background1
if(ObjectFind("BackgroundLine1"+IntegerToString(i))==-1)
ChartBackground("BackgroundLine1"+IntegerToString(i),ColorLine1,EMPTY_VALUE,TRUE,265,2+(i*12*2),320,14);
//---Background2
if(ObjectFind("BackgroundLine2"+IntegerToString(i))==-1)
ChartBackground("BackgroundLine2"+IntegerToString(i),ColorLine2,EMPTY_VALUE,TRUE,265,14+(i*12*2),320,14);
}
//---------------------------------------------------------------------
//Set currency titles
string CurrencyInfo[10]= {"","EUR","GBP","AUD","NZD","USD","CAD","CHF","JPY","CNY"};
//---
for(i=1; i<10; i++)
{
if(ObjectFind("Str"+IntegerToString(i))==-1)
DisplayText("Str"+IntegerToString(i),"RESULTS FOR CURRENCY "+CurrencyInfo[i],SizeFontsOfInfo,"Arial Black",ColorOfTitle,265,(12*8*(i-1)));
//---
ObjectDelete("Res"+IntegerToString(i));
if(ObjectFind("Res"+IntegerToString(i))==-1)
DisplayText("Res"+IntegerToString(i),"("+DoubleToStr(ResultsCurrencies[i],2)+")",SizeFontsOfInfo,"Arial Black",ColorOfTitle,525,(12*8*(i-1)));
}
//---------------------------------------------------------------------
//Set informations pairs'
for(i=1; i<60; i++)
{
int SetPosition=i;
if(SetPosition>=8)
SetPosition+=1;
if(SetPosition>=16)
SetPosition+=1;
if(SetPosition>=24)
SetPosition+=1;
if(SetPosition>=32)
SetPosition+=1;
if(SetPosition>=40)
SetPosition+=1;
if(SetPosition>=48)
SetPosition+=1;
if(SetPosition>=56)
SetPosition+=1;
if(SetPosition>=64)
SetPosition+=1;
//---
if(ObjectFind("Comm1"+IntegerToString(i))==-1)
DisplayText("Comm1"+IntegerToString(i),"Pair: "+Pair[i],SizeFontsOfInfo,"Arial",ColorOfInfo,265,(12*SetPosition));
//---
if(ObjectFind("Comm2"+IntegerToString(i))==-1)
DisplayText("Comm2"+IntegerToString(i),"Orders: ",SizeFontsOfInfo,"Arial",ColorOfInfo,375,(12*SetPosition));
//---
if(ObjectFind("Comm3"+IntegerToString(i))==-1)
DisplayText("Comm3"+IntegerToString(i),"Profit/Loss: ",SizeFontsOfInfo,"Arial",ColorOfInfo,455,(12*SetPosition));
//---
ObjectDelete("Comm4"+IntegerToString(i));
if(ObjectFind("Comm4"+IntegerToString(i))==-1)
DisplayText("Comm4"+IntegerToString(i),IntegerToString(TotalHistoryOrders[i]),SizeFontsOfInfo,"Arial",ColorOfInfo,422,(12*SetPosition));
//---
ObjectDelete("Comm5"+IntegerToString(i));
if(ObjectFind("Comm5"+IntegerToString(i))==-1)
DisplayText("Comm5"+IntegerToString(i),DoubleToStr(TotalHistoryProfit[i],2),SizeFontsOfInfo,"Arial",ColorOfInfo,525,(12*SetPosition));
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Background for comments
//====================================================================================================================================================//
void ChartBackground(string StringName,color ImageColor,int TypeBorder,bool InBackGround,int Xposition,int Yposition,int Xsize,int Ysize)
{
//---------------------------------------------------------------------
ObjectCreate(0,StringName,OBJ_RECTANGLE_LABEL,0,0,0,0,0);
ObjectSetInteger(0,StringName,OBJPROP_XDISTANCE,Xposition);
ObjectSetInteger(0,StringName,OBJPROP_YDISTANCE,Yposition);
ObjectSetInteger(0,StringName,OBJPROP_XSIZE,Xsize);
ObjectSetInteger(0,StringName,OBJPROP_YSIZE,Ysize);
ObjectSetInteger(0,StringName,OBJPROP_BGCOLOR,ImageColor);
ObjectSetInteger(0,StringName,OBJPROP_BORDER_TYPE,TypeBorder);
ObjectSetInteger(0,StringName,OBJPROP_BORDER_COLOR,clrBlack);
ObjectSetInteger(0,StringName,OBJPROP_BACK,InBackGround);
ObjectSetInteger(0,StringName,OBJPROP_SELECTABLE,false);
ObjectSetInteger(0,StringName,OBJPROP_SELECTED,false);
ObjectSetInteger(0,StringName,OBJPROP_HIDDEN,true);
ObjectSetInteger(0,StringName,OBJPROP_ZORDER,0);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Orders signals
//====================================================================================================================================================//
void GetSignal()
{
//---------------------------------------------------------------------
//Reset values
SetBuffers=0;
CheckOrdersBaseNews=false;
TimeToTrade_EUR=false;
TimeToTrade_GBP=false;
TimeToTrade_AUD=false;
TimeToTrade_NZD=false;
TimeToTrade_USD=false;
TimeToTrade_CAD=false;
TimeToTrade_CHF=false;
TimeToTrade_JPY=false;
TimeToTrade_CNY=false;
//---------------------------------------------------------------------
//Trade immediately from buttons
if((EUR_TradeInNewsRelease==2)&&(Open_EUR==true))
TimeToTrade_EUR=true;
if((GBP_TradeInNewsRelease==2)&&(Open_GBP==true))
TimeToTrade_GBP=true;
if((AUD_TradeInNewsRelease==2)&&(Open_AUD==true))
TimeToTrade_AUD=true;
if((NZD_TradeInNewsRelease==2)&&(Open_NZD==true))
TimeToTrade_NZD=true;
if((USD_TradeInNewsRelease==2)&&(Open_USD==true))
TimeToTrade_USD=true;
if((CAD_TradeInNewsRelease==2)&&(Open_CAD==true))
TimeToTrade_CAD=true;
if((CHF_TradeInNewsRelease==2)&&(Open_CHF==true))
TimeToTrade_CHF=true;
if((JPY_TradeInNewsRelease==2)&&(Open_JPY==true))
TimeToTrade_JPY=true;
if((CNY_TradeInNewsRelease==2)&&(Open_CNY==true))
TimeToTrade_CNY=true;
//---------------------------------------------------------------------
//Call ReadNews() to make file
if((((Minute()!=iPrevMinute)||(LoopTimes<2))&&(ModeReadNews==1))||(ModeReadNews==0)||(StartOperations==false))
{
if(LoopTimes<2)
{
LoopTimes++;
ReadNews(0,"XXX");
}
//---------------------------------------------------------------------
//Start check
if(FileIsOk==true)
{
CheckOrdersBaseNews=true;
//---------------------------------------------------------------------
if(EUR_TradeInNewsRelease==1)
{
SetBuffers=1;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(EUR_TimeStartSession)==StringToTime(EUR_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(EUR_TimeStartSession)<StringToTime(EUR_TimeEndSession))&&((CurrentTime>=StringToTime(EUR_TimeStartSession))&&(CurrentTime<StringToTime(EUR_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(EUR_TimeStartSession)>StringToTime(EUR_TimeEndSession))&&((CurrentTime>=StringToTime(EUR_TimeStartSession))||(CurrentTime<StringToTime(EUR_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"EUR");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_EUR=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_EUR=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_EUR=ExtBufferImpact[SetBuffers][0];
ImpactToNews_EUR=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_EUR>=ImpactToTrade)&&(SecondsToNews_EUR<=SecondsBeforeNewsStart))||((ImpactSinceNews_EUR>=ImpactToTrade)&&(SecondsSinceNews_EUR<=SecondsAfterNewsStop)))
TimeToTrade_EUR=true;
if((SecondsToNews_EUR==0)||(SecondsSinceNews_EUR==0))
TimeToTrade_EUR=true;
if((TimeToTrade_EUR==true)&&(ImpactToNews_EUR>=ImpactToTrade)&&(SecondsToNews_EUR<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(GBP_TradeInNewsRelease==1)
{
SetBuffers=2;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(GBP_TimeStartSession)==StringToTime(GBP_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(GBP_TimeStartSession)<StringToTime(GBP_TimeEndSession))&&((CurrentTime>=StringToTime(GBP_TimeStartSession))&&(CurrentTime<StringToTime(GBP_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(GBP_TimeStartSession)>StringToTime(GBP_TimeEndSession))&&((CurrentTime>=StringToTime(GBP_TimeStartSession))||(CurrentTime<StringToTime(GBP_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"GBP");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_GBP=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_GBP=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_GBP=ExtBufferImpact[SetBuffers][0];
ImpactToNews_GBP=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_GBP>=ImpactToTrade)&&(SecondsToNews_GBP<=SecondsBeforeNewsStart))||((ImpactSinceNews_GBP>=ImpactToTrade)&&(SecondsSinceNews_GBP<=SecondsAfterNewsStop)))
TimeToTrade_GBP=true;
if((SecondsToNews_GBP==0)||(SecondsSinceNews_GBP==0))
TimeToTrade_GBP=true;
if((TimeToTrade_GBP==true)&&(ImpactToNews_GBP>=ImpactToTrade)&&(SecondsToNews_GBP<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(AUD_TradeInNewsRelease==1)
{
SetBuffers=3;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(AUD_TimeStartSession)==StringToTime(AUD_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(AUD_TimeStartSession)<StringToTime(AUD_TimeEndSession))&&((CurrentTime>=StringToTime(AUD_TimeStartSession))&&(CurrentTime<StringToTime(AUD_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(AUD_TimeStartSession)>StringToTime(AUD_TimeEndSession))&&((CurrentTime>=StringToTime(AUD_TimeStartSession))||(CurrentTime<StringToTime(AUD_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"AUD");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_AUD=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_AUD=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_AUD=ExtBufferImpact[SetBuffers][0];
ImpactToNews_AUD=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_AUD>=ImpactToTrade)&&(SecondsToNews_AUD<=SecondsBeforeNewsStart))||((ImpactSinceNews_AUD>=ImpactToTrade)&&(SecondsSinceNews_AUD<=SecondsAfterNewsStop)))
TimeToTrade_AUD=true;
if((SecondsToNews_AUD==0)||(SecondsSinceNews_AUD==0))
TimeToTrade_AUD=true;
if((TimeToTrade_AUD==true)&&(ImpactToNews_AUD>=ImpactToTrade)&&(SecondsToNews_AUD<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(NZD_TradeInNewsRelease==1)
{
SetBuffers=4;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(NZD_TimeStartSession)==StringToTime(NZD_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(NZD_TimeStartSession)<StringToTime(NZD_TimeEndSession))&&((CurrentTime>=StringToTime(NZD_TimeStartSession))&&(CurrentTime<StringToTime(NZD_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(NZD_TimeStartSession)>StringToTime(NZD_TimeEndSession))&&((CurrentTime>=StringToTime(NZD_TimeStartSession))||(CurrentTime<StringToTime(NZD_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"NZD");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_NZD=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_NZD=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_NZD=ExtBufferImpact[SetBuffers][0];
ImpactToNews_NZD=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_NZD>=ImpactToTrade)&&(SecondsToNews_NZD<=SecondsBeforeNewsStart))||((ImpactSinceNews_NZD>=ImpactToTrade)&&(SecondsSinceNews_NZD<=SecondsAfterNewsStop)))
TimeToTrade_NZD=true;
if((SecondsToNews_NZD==0)||(SecondsSinceNews_NZD==0))
TimeToTrade_NZD=true;
if((TimeToTrade_NZD==true)&&(ImpactToNews_NZD>=ImpactToTrade)&&(SecondsToNews_NZD<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(USD_TradeInNewsRelease==1)
{
SetBuffers=5;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(USD_TimeStartSession)==StringToTime(USD_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(USD_TimeStartSession)<StringToTime(USD_TimeEndSession))&&((CurrentTime>=StringToTime(USD_TimeStartSession))&&(CurrentTime<StringToTime(USD_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(USD_TimeStartSession)>StringToTime(USD_TimeEndSession))&&((CurrentTime>=StringToTime(USD_TimeStartSession))||(CurrentTime<StringToTime(USD_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"USD");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_USD=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_USD=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_USD=ExtBufferImpact[SetBuffers][0];
ImpactToNews_USD=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_USD>=ImpactToTrade)&&(SecondsToNews_USD<=SecondsBeforeNewsStart))||((ImpactSinceNews_USD>=ImpactToTrade)&&(SecondsSinceNews_USD<=SecondsAfterNewsStop)))
TimeToTrade_USD=true;
if((SecondsToNews_USD==0)||(SecondsSinceNews_USD==0))
TimeToTrade_USD=true;
if((TimeToTrade_USD==true)&&(ImpactToNews_USD>=ImpactToTrade)&&(SecondsToNews_USD<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(CAD_TradeInNewsRelease==1)
{
SetBuffers=6;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(CAD_TimeStartSession)==StringToTime(CAD_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(CAD_TimeStartSession)<StringToTime(CAD_TimeEndSession))&&((CurrentTime>=StringToTime(CAD_TimeStartSession))&&(CurrentTime<StringToTime(CAD_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(CAD_TimeStartSession)>StringToTime(CAD_TimeEndSession))&&((CurrentTime>=StringToTime(CAD_TimeStartSession))||(CurrentTime<StringToTime(CAD_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"CAD");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_CAD=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_CAD=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_CAD=ExtBufferImpact[SetBuffers][0];
ImpactToNews_CAD=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_CAD>=ImpactToTrade)&&(SecondsToNews_CAD<=SecondsBeforeNewsStart))||((ImpactSinceNews_CAD>=ImpactToTrade)&&(SecondsSinceNews_CAD<=SecondsAfterNewsStop)))
TimeToTrade_CAD=true;
if((SecondsToNews_CAD==0)||(SecondsSinceNews_CAD==0))
TimeToTrade_CAD=true;
if((TimeToTrade_CAD==true)&&(ImpactToNews_CAD>=ImpactToTrade)&&(SecondsToNews_CAD<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(CHF_TradeInNewsRelease==1)
{
SetBuffers=7;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(CHF_TimeStartSession)==StringToTime(CHF_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(CHF_TimeStartSession)<StringToTime(CHF_TimeEndSession))&&((CurrentTime>=StringToTime(CHF_TimeStartSession))&&(CurrentTime<StringToTime(CHF_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(CHF_TimeStartSession)>StringToTime(CHF_TimeEndSession))&&((CurrentTime>=StringToTime(CHF_TimeStartSession))||(CurrentTime<StringToTime(CHF_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"CHF");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_CHF=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_CHF=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_CHF=ExtBufferImpact[SetBuffers][0];
ImpactToNews_CHF=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_CHF>=ImpactToTrade)&&(SecondsToNews_CHF<=SecondsBeforeNewsStart))||((ImpactSinceNews_CHF>=ImpactToTrade)&&(SecondsSinceNews_CHF<=SecondsAfterNewsStop)))
TimeToTrade_CHF=true;
if((SecondsToNews_CHF==0)||(SecondsSinceNews_CHF==0))
TimeToTrade_CHF=true;
if((TimeToTrade_CHF==true)&&(ImpactToNews_CHF>=ImpactToTrade)&&(SecondsToNews_CHF<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(JPY_TradeInNewsRelease==1)
{
SetBuffers=8;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(JPY_TimeStartSession)==StringToTime(JPY_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(JPY_TimeStartSession)<StringToTime(JPY_TimeEndSession))&&((CurrentTime>=StringToTime(JPY_TimeStartSession))&&(CurrentTime<StringToTime(JPY_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(JPY_TimeStartSession)>StringToTime(JPY_TimeEndSession))&&((CurrentTime>=StringToTime(JPY_TimeStartSession))||(CurrentTime<StringToTime(JPY_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"JPY");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_JPY=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_JPY=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_JPY=ExtBufferImpact[SetBuffers][0];
ImpactToNews_JPY=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_JPY>=ImpactToTrade)&&(SecondsToNews_JPY<=SecondsBeforeNewsStart))||((ImpactSinceNews_JPY>=ImpactToTrade)&&(SecondsSinceNews_JPY<=SecondsAfterNewsStop)))
TimeToTrade_JPY=true;
if((SecondsToNews_JPY==0)||(SecondsSinceNews_JPY==0))
TimeToTrade_JPY=true;
if((TimeToTrade_JPY==true)&&(ImpactToNews_JPY>=ImpactToTrade)&&(SecondsToNews_JPY<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
if(CNY_TradeInNewsRelease==1)
{
SetBuffers=9;
OpenSession[SetBuffers]=false;
//---
if(StringToTime(CNY_TimeStartSession)==StringToTime(CNY_TimeEndSession))
OpenSession[SetBuffers]=true;
if((StringToTime(CNY_TimeStartSession)<StringToTime(CNY_TimeEndSession))&&((CurrentTime>=StringToTime(CNY_TimeStartSession))&&(CurrentTime<StringToTime(CNY_TimeEndSession))))
OpenSession[SetBuffers]=true;
if((StringToTime(CNY_TimeStartSession)>StringToTime(CNY_TimeEndSession))&&((CurrentTime>=StringToTime(CNY_TimeStartSession))||(CurrentTime<StringToTime(CNY_TimeEndSession))))
OpenSession[SetBuffers]=true;
//---
if(OpenSession[SetBuffers]==true)
{
ReadNews(SetBuffers,"CNY");
SessionBeforeEvent[SetBuffers]=false;
SecondsSinceNews_CNY=ExtBufferSeconds[SetBuffers][0];
SecondsToNews_CNY=ExtBufferSeconds[SetBuffers][1];
ImpactSinceNews_CNY=ExtBufferImpact[SetBuffers][0];
ImpactToNews_CNY=ExtBufferImpact[SetBuffers][1];
//---
if(((ImpactToNews_CNY>=ImpactToTrade)&&(SecondsToNews_CNY<=SecondsBeforeNewsStart))||((ImpactSinceNews_CNY>=ImpactToTrade)&&(SecondsSinceNews_CNY<=SecondsAfterNewsStop)))
TimeToTrade_CNY=true;
if((SecondsToNews_CNY==0)||(SecondsSinceNews_CNY==0))
TimeToTrade_CNY=true;
if((TimeToTrade_CNY==true)&&(ImpactToNews_CNY>=ImpactToTrade)&&(SecondsToNews_CNY<=SecondsBeforeNewsStart))
SessionBeforeEvent[SetBuffers]=true;
}
}
//---------------------------------------------------------------------
}
iPrevMinute=Minute();
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Read file
//====================================================================================================================================================//
void ReadNews(int CountrySelect,string CountryCheck)
{
//---------------------------------------------------------------------
string Cookie=NULL,Headers;
char Post[],Result[];
int res;
string ImpactLastNews="";
datetime NewsTime;
int NextEvent;
int NewsIDx=0;
ulong SizeOfFile=0;
ulong SizeOfData=0;
string MyEvent;
int TimeOut=5000;
bool SkipeEvent;
bool ReportAllForEUR=false;
bool ReportAllForGBP=false;
bool ReportAllForAUD=false;
bool ReportAllForNZD=false;
bool ReportAllForUSD=false;
bool ReportAllForCAD=false;
bool ReportAllForCHF=false;
bool ReportAllForJPY=false;
bool ReportAllForCNY=false;
bool IncludeLow=false;
bool IncludeMedium=false;
bool IncludeHigh=false;
//---------------------------------------------------------------------
//Set report country
if(CountrySelect==1)
ReportAllForEUR=true;
if(CountrySelect==2)
ReportAllForGBP=true;
if(CountrySelect==3)
ReportAllForAUD=true;
if(CountrySelect==4)
ReportAllForNZD=true;
if(CountrySelect==5)
ReportAllForUSD=true;
if(CountrySelect==6)
ReportAllForCAD=true;
if(CountrySelect==7)
ReportAllForCHF=true;
if(CountrySelect==8)
ReportAllForJPY=true;
if(CountrySelect==9)
ReportAllForCNY=true;
//---------------------------------------------------------------------
//Set report impact
if(ImpactToTrade==0)
{
IncludeLow=true;
IncludeMedium=true;
IncludeHigh=true;
}
if(ImpactToTrade==1)
{
IncludeMedium=true;
IncludeHigh=true;
}
if(ImpactToTrade==2)
{
IncludeHigh=true;
}
//---------------------------------------------------------------------
//Read file
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_READ);
SizeOfFile=FileReadInteger(xmlHandle,INT_VALUE);
//---------------------------------------------------------------------
//Close file
if(xmlHandle>=0)
{
FileClose(xmlHandle);
NeedToGetFile=false;
}
else
NeedToGetFile=true;
//---------------------------------------------------------------------
//Make file
if((SizeOfFile==0)||(NeedToGetFile)||(((GlobalVariableCheck("LastUpdateTime: ")==false)||((TimeCurrent()-GlobalVariableGet("LastUpdateTime: "))>14400))&&(!IsTesting())&&(!IsVisualMode())&&(!IsOptimization())))
{
//---------------------------------------------------------------------
//Get file
ResetLastError();
res=WebRequest("GET",ReadNewsURL,Cookie,NULL,TimeOut,Post,0,Result,Headers);
PrintFormat("Getting file from: "+ReadNewsURL);
//---Checking errors
if(res==-1)
{
Print("Error in WebRequest. Error code: ",GetLastError());
//---Perhaps the URL is not listed, display a message about the necessity to add the address
MessageBox("Add the address '"+ReadNewsURL+"' in the list of allowed URLs on tab 'Expert Advisors'","Error code: ",MB_ICONINFORMATION);
FileIsOk=false;
Sleep(60000);
return;
}
else
{
//---Load successfully
PrintFormat("The file has been successfully loaded. File size =%d bytes.",ArraySize(Result));
//---Save the data to a file
FileDelete(xmlFileName);
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_WRITE);
//---------------------------------------------------------------------
//Open file
if(xmlHandle<0)
{
FileIsOk=false;
return;
}
//---Checking errors
if(xmlHandle!=INVALID_HANDLE)
{
//---Save the contents of the Result[] array to a file
FileWriteArray(xmlHandle,Result,0,ArraySize(Result));
FileClose(xmlHandle);
}
else
{
Print("Error in file open. Error code: ",GetLastError());
FileIsOk=false;
return;
}
}
//---------------------------------------------------------------------
FileWriteString(xmlHandle,sData,StringLen(sData));
FileClose(xmlHandle);
//---------------------------------------------------------------------
//Open the XML file
xmlHandle=FileOpen(xmlFileName,FILE_BIN|FILE_READ);
if(xmlHandle<0)
{
Print("Can\'t open xml file: ",xmlFileName,". Error code: ",GetLastError());
return;
}
//---
sData=FileReadString(xmlHandle,INT_VALUE);
bool pnt=FileSeek(xmlHandle,0,0);
SizeOfFile=FileSize(xmlHandle);
SizeOfData=StringLen(sData);
if(SizeOfData<SizeOfFile)
sData=sData+FileReadString(xmlHandle,(int)SizeOfFile);
if(xmlHandle>0)
FileClose(xmlHandle);
//---------------------------------------------------------------------
//Check if get hole file
EndWeek=StringFind(sData,"</weeklyevents>",0);
if(EndWeek<=0)
{
//Alert("Web page download was not complete!");
Print("Web page download was not complete! Error code: ",GetLastError());
FileIsOk=false;
return;
}
else
{
Print("Last update time: ",TimeCurrent());
GlobalVariableSet("LastUpdateTime: ",TimeCurrent());
}
}
//---------------------------------------------------------------------
//Check event file
FileIsOk=true;
//---------------------------------------------------------------------
//Init the buffer array to zero just in case
ArrayInitialize(ExtMapBuffer0,0);
tmpMins=10080;//(a hole week)
BoEvent=0;
//---------------------------------------------------------------------
//Get events
while(true)
{
BoEvent=StringFind(sData,"<event>",BoEvent);
if(BoEvent==-1)
break;
//---
BoEvent+=7;
NextEvent=StringFind(sData,"</event>",BoEvent);
if(NextEvent==-1)
break;
//---
MyEvent=StringSubstr(sData,BoEvent,NextEvent-BoEvent);
BoEvent=NextEvent;
//---
BeginWeek=0;
SkipeEvent=false;
//---
for(i=0; i<7; i++)
{
mainData[NewsIDx][i]="";
NextEvent=StringFind(MyEvent,sTags[i],BeginWeek);
//---------------------------------------------------------------------
//Within this event,if tag not found, then it must be missing; skip it
if(NextEvent==-1)
continue;
else
{
//---------------------------------------------------------------------
//We must have found the sTag okay...
BeginWeek=NextEvent+StringLen(sTags[i]);//Advance past the start tag
EndWeek=StringFind(MyEvent,eTags[i],BeginWeek);//Find start of end tag
//---------------------------------------------------------------------
//Get data between start and end tag
if((EndWeek>BeginWeek)&&(EndWeek!=-1))
{
mainData[NewsIDx][i]=StringSubstr(MyEvent,BeginWeek,EndWeek-BeginWeek);
}
}
}
//---------------------------------------------------------------------
//Set skip switch
if((CountryCheck!=mainData[NewsIDx][COUNTRY]) &&
((!ReportAllForEUR)||(mainData[NewsIDx][COUNTRY]!="EUR"))&&
((!ReportAllForGBP)||(mainData[NewsIDx][COUNTRY]!="GBP"))&&
((!ReportAllForAUD)||(mainData[NewsIDx][COUNTRY]!="AUD"))&&
((!ReportAllForNZD)||(mainData[NewsIDx][COUNTRY]!="NZD"))&&
((!ReportAllForUSD)||(mainData[NewsIDx][COUNTRY]!="USD"))&&
((!ReportAllForCAD)||(mainData[NewsIDx][COUNTRY]!="CAD"))&&
((!ReportAllForCHF)||(mainData[NewsIDx][COUNTRY]!="CHF"))&&
((!ReportAllForJPY)||(mainData[NewsIDx][COUNTRY]!="JPY"))&&
((!ReportAllForCNY)||(mainData[NewsIDx][COUNTRY]!="CNY")))
SkipeEvent=true;
//---------------------------------------------------------------------
if((!IncludeLow)&&(mainData[NewsIDx][IMPACT]=="Low"))
SkipeEvent=true;
if((!IncludeMedium)&&(mainData[NewsIDx][IMPACT]=="Medium"))
SkipeEvent=true;
if((!IncludeHigh)&&(mainData[NewsIDx][IMPACT]=="High"))
SkipeEvent=true;
if((mainData[NewsIDx][IMPACT]=="Holiday")||(mainData[NewsIDx][IMPACT]=="holiday"))
SkipeEvent=true;
if((mainData[NewsIDx][TIME]=="All Day")||(mainData[NewsIDx][TIME]=="Tentative")||(mainData[NewsIDx][TIME]==""))
SkipeEvent=true;
if((!IncludeSpeaks)&&((StringFind(mainData[NewsIDx][TITLE],"speaks")!=-1)||(StringFind(mainData[NewsIDx][TITLE],"Speaks")!=-1)))
SkipeEvent=true;
//---------------------------------------------------------------------
//Get unskip
if(!SkipeEvent)
{
//Get impact
ImpactLastNews=mainData[NewsIDx][IMPACT];
//First, convert the announcement time to seconds (in GMT)
NewsTime=StrToTime(MakeDateTime(mainData[NewsIDx][DATE],mainData[NewsIDx][TIME]));
//Now calculate the Seconds until this announcement (may be negative)
minsTillNews=NewsTime-CurrentTime;
if((minsTillNews<0)||(MathAbs(tmpMins)>minsTillNews))
tmpMins=minsTillNews;
ExtMapBuffer0[CountrySelect][NewsIDx]=(int)minsTillNews;
NewsIDx++;
}
}
//---------------------------------------------------------------------
//Reset buffers
ExtBufferSeconds[CountrySelect][0]=-9999;
ExtBufferSeconds[CountrySelect][1]=9999;
ExtBufferImpact[CountrySelect][0]=-1;
ExtBufferImpact[CountrySelect][1]=-1;
//---------------------------------------------------------------------
//Set buffers
for(i=0; i<NewsIDx; i++)
{
//---------------------------------------------------------------------
//Seconds UNTIL
if((ExtMapBuffer0[CountrySelect][i]>=0)&&(mainData[i][COUNTRY]==CountryCheck))
{
if(ExtBufferSeconds[CountrySelect][1]==9999)
{
ExtBufferSeconds[CountrySelect][1]=ExtMapBuffer0[CountrySelect][i];
ExtBufferImpact[CountrySelect][1]=ImpactToNumber(mainData[i][IMPACT]);
}
}
//---------------------------------------------------------------------
//Seconds SINCE
if((ExtMapBuffer0[CountrySelect][i]<=0)&&(mainData[i][COUNTRY]==CountryCheck))
{
//if(ExtBufferSeconds[CountrySelect][0]==-9999)
//{
ExtBufferSeconds[CountrySelect][0]=MathAbs(ExtMapBuffer0[CountrySelect][i]);
ExtBufferImpact[CountrySelect][0]=ImpactToNumber(mainData[i][IMPACT]);
//}
}
}
//---------------------------------------------------------------------
//Close file
if(LogHandle>0)
{
FileClose(LogHandle);
LogHandle=-1;
}
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Convert impact
//====================================================================================================================================================//
int ImpactToNumber(string Impact)
{
//---------------------------------------------------------------------
if(Impact=="Low")
return(0);
if(Impact=="Medium")
return(1);
if(Impact=="High")
return(2);
else
return(-1);
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//Convert time
//====================================================================================================================================================//
string MakeDateTime(string StrDate,string StrTime)
{
//---------------------------------------------------------------------
int Dash_1=StringFind(StrDate,"-");
int Dash_2=StringFind(StrDate,"-",Dash_1+1);
string StrMonth=StringSubstr(StrDate,0,2);
string StrDay=StringSubstr(StrDate,3,2);
string StrYear=StringSubstr(StrDate,6,4);
int nTimeColonPos=StringFind(StrTime,":");
string StrHour=StringSubstr(StrTime,0,nTimeColonPos);
string StrMinute=StringSubstr(StrTime,nTimeColonPos+1,2);
string StrAM_PM=StringSubstr(StrTime,StringLen(StrTime)-2);
string StrHourPad="";
int Hour24=StrToInteger(StrHour);
//---------------------------------------------------------------------
if(((StrAM_PM=="pm")||(StrAM_PM=="PM"))&&(Hour24!=12))
Hour24+=12;
//---
if(((StrAM_PM=="am")||(StrAM_PM=="AM"))&&(Hour24==12))
Hour24=0;
//---
if(Hour24<10)
StrHourPad="0";
//---
return(StringConcatenate(StrYear,".",StrMonth,".",StrDay," ",StrHourPad,Hour24,":",StrMinute));
//---------------------------------------------------------------------
}
//====================================================================================================================================================//
//End code
//====================================================================================================================================================//
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---