/////////////////////////////////////////////////////// // // SaherElm IT Center XBEEA MQL5 Expert Advisor // ------------------------------------------------- // Name: XBEEA // Description: an Exper Advisor which used RSI and MA // to Analyse Market ... // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // //////////////////////////////////////////////////////x // // Global Properties ... #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://saherelm.ir" #property version "1.00" #property description "SaherElm XBEEA" #property strict // // TODO: // -[] Create Some Trendial Conditions Variables ... // -[] Comment them ... // -[] Open 2 Position for each Signal ... // -[] Close 2nd Position by Stop Trailing ... // -[] implement Long conditions ... // -[] add also Provider to Signals for Sepcied them ... // -[] Implement Same Senario by Other Time Frames ... // #define ShortName "XBEEA" // #include "../Libraries/x-saherelm.log.lib.mq5" #include "../Libraries/x-saherelm.draw.lib.mq5" #include "../Libraries/x-saherelm.common.lib.mq5" #include "../Classes/x-saherelm.xtrade.class.mq5" // // Inputs ... long xBEEAMagicNumber = 78692110; // Magic Number int xBEEASlippage = 10; // Slippgae // double xBEEAVolume = 0.05; // Volume Per Trade // ENUM_TIMEFRAMES xBEEASCPeriod = PERIOD_H4; ENUM_TIMEFRAMES xBEEAMCPeriod = PERIOD_H12; ENUM_TIMEFRAMES xBEEALCPeriod = PERIOD_D1; ENUM_TIMEFRAMES xBEEAHCPeriod = PERIOD_W1; // bool xBEEADrawAsBox = false; // Draw Candles As Box ... // bool xBEEAUpdate = true; // Update Candles based On Time ... // bool xBEEADrawLabels = false; // Draw Line Labels ... // bool xBEEADrawCandle0 = false; // Draw 0 Time Candles ... bool xBEEADrawCandle1 = true; // Draw 1 Time Candles ... // bool xBEEADrawBody = true; // Show Candle Bodies ... bool xBEEADrawShadows = true; // Show Candle Shadows ... // // Candles ... bool xBEEADrawCurrent = false; // Draw Current Candle ... bool xBEEADrawSC = false; // Draw Short Candle ... bool xBEEADrawMC = false; // Draw Medium Candle ... bool mDrawLC = false; // Draw Long Candle ... bool mDrawHC = true; // Draw Hind Candle ... // // MidLines ... bool mDraw0MidLine = false; bool mDraw1MidLine = false; bool xBEEADrawSC0MidLine = false; bool xBEEADrawSC1MidLine = false; bool xBEEADrawMC0MidLine = false; bool xBEEADrawMC1MidLine = false; bool xBEEADrawLC0MidLine = false; bool xBEEADrawLC1MidLine = false; bool xBEEADrawHC0MidLine = true; bool xBEEADrawHC1MidLine = true; // // Vars ... string xBEEASymbol; ENUM_TIMEFRAMES xBEEAPeriod; // int maxBuys = 1; int maxSells = 1; int buyCount = 0; int sellCount = 0; // XOHCL candle0; datetime candle0Time; datetime nextCandle0Time; string c0TagPrefix = "CC0"; XOHCLDrawSpecification candle0Style; bool isCandle0Bullish; bool isCandle0Bearish; // XOHCL candle1; datetime candle1Time; datetime nextCandle1Time; string c1TagPrefix = "CC1"; XOHCLDrawSpecification candle1Style; bool isCandle1Bullish; bool isCandle1Bearish; // XOHCL scCandle0; datetime scCandle0Time; datetime nextSCCandle0Time; string sc0TagPrefix = "SC0"; XOHCLDrawSpecification scCandle0Style; bool isSCCandle0Bullish; bool isSCCandle0Bearish; // XOHCL scCandle1; datetime scCandle1Time; datetime nextSCCandle1Time; string sc1TagPrefix = "SC1"; XOHCLDrawSpecification scCandle1Style; bool isSCCandle1Bullish; bool isSCCandle1Bearish; // XOHCL mcCandle0; datetime mcCandle0Time; datetime nextMCCandle0Time; string mc0TagPrefix = "MC0"; XOHCLDrawSpecification mcCandle0Style; bool isMCCandle0Bullish; bool isMCCandle0Bearish; // XOHCL mcCandle1; datetime mcCandle1Time; datetime nextMCCandle1Time; string mc1TagPrefix = "MC1"; XOHCLDrawSpecification mcCandle1Style; bool isMCCandle1Bullish; bool isMCCandle1Bearish; // XOHCL lcCandle0; datetime lcCandle0Time; datetime nextLCCandle0Time; string lc0TagPrefix = "L0"; XOHCLDrawSpecification lcCandle0Style; bool isLCCandle0Bullish; bool isLCCandle0Bearish; // XOHCL lcCandle1; datetime lcCandle1Time; datetime nextLCCandle1Time; string lc1TagPrefix = "L1"; XOHCLDrawSpecification lcCandle1Style; bool isLCCandle1Bullish; bool isLCCandle1Bearish; // XOHCL hcCandle0; datetime hcCandle0Time; datetime nextHCCandle0Time; string hc0TagPrefix = "H0"; XOHCLDrawSpecification hcCandle0Style; bool isHCCandle0Bullish; bool isHCCandle0Bearish; // XOHCL hcCandle1; datetime hcCandle1Time; datetime nextHCCandle1Time; string hc1TagPrefix = "H1"; XOHCLDrawSpecification hcCandle1Style; bool isHCCandle1Bullish; bool isHCCandle1Bearish; // // // // bool canBuy = false; bool canSell = false; // datetime buyTime = 0; datetime sellTime = 0; // datetime lastBuyTime = 0; datetime lastSellTime = 0; // XSignal xSamepleEAExecutedSignals[]; // bool isHCSignal = false; bool hcWaitsOnNextSession = false; // double _tp = 0; double _sl = 0; double _r2r = 2; double _entry = 0; ENUM_POSITION_TYPE _type = NULL; // MqlTick xBEEATick; XSCTrade *xBEEATrader; // // Event Handlers ... // // Initialization ... int OnInit() { // if (xBEEASymbol == NULL || StringLen(xBEEASymbol) <= 0) { xBEEASymbol = _Symbol; } // if (xBEEAPeriod == NULL) { xBEEAPeriod = _Period; } // // Validate Inputs ... if (!XBEEAValidateInputs()) { return INIT_PARAMETERS_INCORRECT; } // logTag = ShortName; drawPrefix = ShortName; // XBEEAConfigureCandleStyles(); // // Initialize XTrader ... xBEEATrader = new XSCTrade( xBEEASlippage, xBEEAMagicNumber); // // Init Succeed ... return INIT_SUCCEEDED; } // // DeInitialization ... void OnDeinit(const int reason) { // // REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function // REASON_REMOVE 1 Program removed from a chart // REASON_RECOMPILE 2 Program recompiled // REASON_CHARTCHANGE 3 A symbol or a chart period is changed // REASON_CHARTCLOSE 4 Chart closed // REASON_PARAMETERS 5 Inputs changed by a user // REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings // REASON_TEMPLATE 7 Another chart template applied // REASON_INITFAILED 8 The OnInit() handler returned a non-zero value // REASON_CLOSE 9 Terminal closed // // De Initialize XBEEA Providers ... delete xBEEATrader; } // // On Tick Handler ... void OnTick() { // if (!IsNewCandle( xBEEASymbol, xBEEAPeriod)) { return; } // // Reading Tick ... if (!SymbolInfoTick(xBEEASymbol, xBEEATick)) { return; } // // Counting Currently Open Positions ... buyCount = xBEEATrader.CountPositions(xBEEASymbol, POSITION_TYPE_BUY); sellCount = xBEEATrader.CountPositions(xBEEASymbol, POSITION_TYPE_SELL); // XBEEACalculateTick(); // // TODO: Complete One Position in Each Section ... // // Do Buy Trade ... bool canDoBuyTrade = canBuy && (maxBuys <= 0 || (maxBuys > 0 && buyCount < maxBuys)); if (canDoBuyTrade) { // XSignal signal = CreateSignal( xBEEASymbol, xBEEAPeriod, _type, X_ORDER_MODE_MARKET, _entry, xBEEAVolume, _tp, _sl); // string comment = "XBEEA,Lo"; // bool canExecute = // (isHCSignal && !hcWaitsOnNextSession) // ; // bool isExecuted = !canExecute ? false : xBEEATrader .ExecuteSignal( signal, comment); if (isExecuted) { // Add( signal, xSamepleEAExecutedSignals); // buyTime = TimeCurrent(); // if (isHCSignal) { // isHCSignal = false; hcWaitsOnNextSession = true; } // // TODO: Log ... string message = "Do Buy Trade ..."; } } // // Do Sell Trade ... bool canDoSellTrade = canSell && (maxSells <= 0 || (maxSells > 0 && sellCount < maxSells)); if (canDoSellTrade) { // XSignal signal = CreateSignal( xBEEASymbol, xBEEAPeriod, _type, X_ORDER_MODE_MARKET, _entry, xBEEAVolume, _tp, _sl); // string comment = "XBEEA,Sh"; // bool canExecute = // (isHCSignal && !hcWaitsOnNextSession) // ; // bool isExecuted = !canExecute ? false : xBEEATrader .ExecuteSignal( signal, comment); if (isExecuted) { // Add( signal, xSamepleEAExecutedSignals); // sellTime = TimeCurrent(); // if (isHCSignal) { // isHCSignal = false; hcWaitsOnNextSession = true; } // // TODO: Log ... string message = "Do Sell Trade ..."; } } // // Reset Conditions ... lastBuyTime = buyTime; lastSellTime = sellTime; // buyTime = 0; sellTime = 0; // canBuy = false; canSell = false; // _sl = 0; _tp = 0; _entry = 0; _type = NULL; // XBEEAProvideInfo(); } // // Custom Functions ... // // Validate Variables nd Inputs ... bool XBEEAValidateInputs() { // bool result = false; // result = // xBEEASlippage > 0 && xBEEAMagicNumber > 0 // ; // return result; } // void PrepareCandleStyle( XOHCLDrawSpecification &source, int width = 1, color clr = CLR_NONE, ENUM_LINE_STYLE style = STYLE_SOLID, bool ray = false, bool fill = false, bool back = false // ) { // source.Default(); // source.Width(width); // if (clr != CLR_NONE) { source.Color(clr); } // source.Style(style); source.RayRight(ray); source.Fill(fill); source.Back(back); } // // Configure Default Styles for Candle Drawing ... void XBEEAConfigureCandleStyles() { // PrepareCandleStyle( candle0Style, 1, CLR_NONE, STYLE_DOT, false, false, true // ); candle0Style.SetLabelPrefix(c0TagPrefix); // PrepareCandleStyle( candle1Style, 1, CLR_NONE, STYLE_DOT, false, false, true // ); candle1Style.SetLabelPrefix(c1TagPrefix); // PrepareCandleStyle( scCandle0Style, 1, CLR_NONE, STYLE_DASH, false, false, true // ); scCandle0Style.SetLabelPrefix(sc0TagPrefix); // PrepareCandleStyle( scCandle1Style, 1, CLR_NONE, STYLE_DASH, false, false, true // ); scCandle1Style.SetLabelPrefix(sc1TagPrefix); // PrepareCandleStyle( mcCandle0Style, 1, CLR_NONE, STYLE_DASHDOT, false, false, true // ); mcCandle0Style.SetLabelPrefix(mc0TagPrefix); // PrepareCandleStyle( mcCandle1Style, 1, CLR_NONE, STYLE_DASHDOT, false, false, true // ); mcCandle1Style.SetLabelPrefix(mc1TagPrefix); // PrepareCandleStyle( lcCandle0Style, 1, CLR_NONE, STYLE_DASHDOTDOT, false, false, true // ); lcCandle0Style.SetLabelPrefix(lc0TagPrefix); // PrepareCandleStyle( lcCandle1Style, 1, CLR_NONE, STYLE_DASHDOTDOT, false, false, true // ); lcCandle1Style.SetLabelPrefix(lc1TagPrefix); // PrepareCandleStyle( hcCandle0Style, 1, CLR_NONE, STYLE_DOT, false, false, true // ); hcCandle0Style.highStyle.clr = clrLightSkyBlue; hcCandle0Style.openStyle.clr = clrDarkOliveGreen; hcCandle0Style.closeStyle.clr = clrCoral; hcCandle0Style.lowStyle.clr = clrPink; hcCandle0Style.SetLabelPrefix(hc0TagPrefix); // PrepareCandleStyle( hcCandle1Style, 2, CLR_NONE, STYLE_DOT, false, false, true // ); hcCandle1Style.SetLabelPrefix(hc1TagPrefix); // if (!xBEEADrawLabels) { // candle0Style.Label(""); candle1Style.Label(""); // scCandle0Style.Label(""); scCandle1Style.Label(""); // mcCandle0Style.Label(""); mcCandle1Style.Label(""); // lcCandle0Style.Label(""); lcCandle1Style.Label(""); // hcCandle0Style.Label(""); hcCandle1Style.Label(""); } } // void XBEEACalculateTick() { // // Calculate Candles ... // XBEEACalculateCandles(); // XBEEACheckGuards(); // XBEEACheckConditions(); // // Drawing Candles ... XBEEADrawCandles(); // XBEEACheckForSignals(); } // // Here we Chack all Guards ... void XBEEACheckGuards() { // // Implement All Guards here ... } // void XBEEACalculateCandles() { // // SC ... scCandle0 = GetCandle( xBEEASymbol, xBEEASCPeriod, 0 // Current Candle ); scCandle1 = GetCandle( xBEEASymbol, xBEEASCPeriod, 1 // Before Candle ); // scCandle0Time = GetCandleTime( xBEEASymbol, xBEEASCPeriod, 0); scCandle1Time = GetCandleTime( xBEEASymbol, xBEEASCPeriod, 1); // // MC ... mcCandle0 = GetCandle( xBEEASymbol, xBEEAMCPeriod, 0 // Current Candle ); mcCandle1 = GetCandle( xBEEASymbol, xBEEAMCPeriod, 1 // Before Candle ); // mcCandle0Time = GetCandleTime( xBEEASymbol, xBEEAMCPeriod, 0); mcCandle1Time = GetCandleTime( xBEEASymbol, xBEEAMCPeriod, 1); // // LC ... lcCandle0 = GetCandle( xBEEASymbol, xBEEALCPeriod, 0 // Current Candle ); lcCandle1 = GetCandle( xBEEASymbol, xBEEALCPeriod, 1 // Before Candle ); // lcCandle0Time = GetCandleTime( xBEEASymbol, xBEEALCPeriod, 0); lcCandle1Time = GetCandleTime( xBEEASymbol, xBEEALCPeriod, 1); // // HC ... hcCandle0 = GetCandle( xBEEASymbol, xBEEAHCPeriod, 0 // Current Candle ); hcCandle1 = GetCandle( xBEEASymbol, xBEEAHCPeriod, 1 // Before Candle ); // hcCandle0Time = GetCandleTime( xBEEASymbol, xBEEAHCPeriod, 0); hcCandle1Time = GetCandleTime( xBEEASymbol, xBEEAHCPeriod, 1); // // Now Reading Current Candle ... candle0 = GetCandle( xBEEASymbol, xBEEAPeriod, 0 // Current Candle ); candle1 = GetCandle( xBEEASymbol, xBEEAPeriod, 1 // Before Candle ); // candle0Time = GetCandleTime( xBEEASymbol, xBEEAPeriod, 0); candle1Time = GetCandleTime( xBEEASymbol, xBEEAPeriod, 1); // // Find Candle Start Time ... // // current .. nextCandle0Time = candle0Time + PeriodSeconds(xBEEAPeriod); nextCandle1Time = candle1Time + PeriodSeconds(xBEEAPeriod); // // SC .. nextSCCandle0Time = scCandle0Time + PeriodSeconds(xBEEASCPeriod); nextSCCandle1Time = scCandle1Time + PeriodSeconds(xBEEASCPeriod); // // MC .. nextMCCandle0Time = mcCandle0Time + PeriodSeconds(xBEEAMCPeriod); nextMCCandle1Time = mcCandle1Time + PeriodSeconds(xBEEAMCPeriod); // // LC .. nextLCCandle0Time = lcCandle0Time + PeriodSeconds(xBEEALCPeriod); nextLCCandle1Time = lcCandle1Time + PeriodSeconds(xBEEALCPeriod); // // HC .. nextHCCandle0Time = hcCandle0Time + PeriodSeconds(xBEEAHCPeriod); nextHCCandle1Time = hcCandle1Time + PeriodSeconds(xBEEAHCPeriod); // isCandle0Bullish = IsBullishCandle(candle0); isCandle0Bearish = IsBearishCandle(candle0); isCandle1Bullish = IsBullishCandle(candle1); isCandle1Bearish = IsBearishCandle(candle1); // isSCCandle0Bullish = IsBullishCandle(scCandle0); isSCCandle0Bearish = IsBearishCandle(scCandle0); isSCCandle1Bullish = IsBullishCandle(scCandle1); isSCCandle1Bearish = IsBearishCandle(scCandle1); // isMCCandle0Bullish = IsBullishCandle(mcCandle0); isMCCandle0Bearish = IsBearishCandle(mcCandle0); isMCCandle1Bullish = IsBullishCandle(mcCandle1); isMCCandle1Bearish = IsBearishCandle(mcCandle1); // isLCCandle0Bullish = IsBullishCandle(lcCandle0); isLCCandle0Bearish = IsBearishCandle(lcCandle0); isLCCandle1Bullish = IsBullishCandle(lcCandle1); isLCCandle1Bearish = IsBearishCandle(lcCandle1); // isHCCandle0Bullish = IsBullishCandle(hcCandle0); isHCCandle0Bearish = IsBearishCandle(hcCandle0); isHCCandle1Bullish = IsBullishCandle(hcCandle1); isHCCandle1Bearish = IsBearishCandle(hcCandle1); } // void XBEEACheckConditions() { // // Here we Check all Conditions states ... // for Enable or Disable conditions ... // // HC based Signalling ... // // double point5 = PointToPrice( xBEEASymbol, 5 // ); // double hcCandle0Mid = (hcCandle0.open + hcCandle0.close) / 2; double hcCandle1Mid = (hcCandle1.open + hcCandle1.close) / 2; // double hcCandle1DownPrice = MathMin(hcCandle1.open, hcCandle1.close); // bool hcHasBreakeout = hcCandle0Mid >= hcCandle1DownPrice + point5; if (hcHasBreakeout && hcWaitsOnNextSession) { hcWaitsOnNextSession = false; } } // void XBEEACheckForSignals() { // // Parse Conditions ... // double point5 = PointToPrice( xBEEASymbol, 5 // ); // // HC Base ... // // double hcCandle0Mid = (hcCandle0.open + hcCandle0.close) / 2; double hcCandle1Mid = (hcCandle1.open + hcCandle1.close) / 2; // double hcCandle1UpPrice = MathMax(hcCandle1.open, hcCandle1.close); double hcCandle1DownPrice = MathMin(hcCandle1.open, hcCandle1.close); // bool hcHasShortSignal = hcCandle0Mid < hcCandle1DownPrice - point5; if (hcHasShortSignal) { // _type = POSITION_TYPE_SELL; _entry = GetEntry( xBEEASymbol, _type); // // Set TP and SL ... // _sl = hcCandle1Mid; // double risk = MathAbs(_entry - _sl); double reward = risk * _r2r; // _tp = _entry - reward; // canSell = true; isHCSignal = true; // // This id for Preventing Other Sections ... return; } // bool hcHasLongSignal = hcCandle0Mid > hcCandle1UpPrice + point5; if (hcHasLongSignal) { // _type = POSITION_TYPE_BUY; _entry = GetEntry( xBEEASymbol, _type); // // Set TP and SL ... // _sl = hcCandle1Mid; // double risk = MathAbs(_entry - _sl); double reward = risk * _r2r; // _tp = _entry + reward; // canBuy = true; isHCSignal = true; // // This id for Preventing Other Sections ... return; } } // // DRAW Functions ... void XBEEADrawCandles() { // int subWindow = 0; long chartId = ChartID(); // // Configure Styles for Draw Shadows and Bodies of Candles // based On Configurations ... // candle0Style.openStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; candle0Style.closeStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; // candle1Style.openStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; candle1Style.closeStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; // scCandle0Style.openStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; scCandle0Style.closeStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; // scCandle1Style.openStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; scCandle1Style.closeStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; // mcCandle0Style.openStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; mcCandle0Style.closeStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; // mcCandle1Style.openStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; mcCandle1Style.closeStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; // lcCandle0Style.openStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; lcCandle0Style.closeStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; // lcCandle1Style.openStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; lcCandle1Style.closeStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; // hcCandle0Style.openStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; hcCandle0Style.closeStyle.draw = xBEEADrawCandle0 && xBEEADrawBody; // hcCandle1Style.openStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; hcCandle1Style.closeStyle.draw = xBEEADrawCandle1 && xBEEADrawBody; // candle0Style.highStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; candle0Style.lowStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; // candle1Style.highStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; candle1Style.lowStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; // scCandle0Style.highStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; scCandle0Style.lowStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; // scCandle1Style.highStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; scCandle1Style.lowStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; // mcCandle0Style.highStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; mcCandle0Style.lowStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; // mcCandle1Style.highStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; mcCandle1Style.lowStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; // lcCandle0Style.highStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; lcCandle0Style.lowStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; // lcCandle1Style.highStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; lcCandle1Style.lowStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; // hcCandle0Style.highStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; hcCandle0Style.lowStyle.draw = xBEEADrawCandle0 && xBEEADrawShadows; // hcCandle1Style.highStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; hcCandle1Style.lowStyle.draw = xBEEADrawCandle1 && xBEEADrawShadows; // // Default Mid Line Specs ... XDrawSpecifications specs; specs.width = 2; specs.rayRight = false; specs.clr = clrYellow; specs.style = STYLE_DOT; // if (xBEEADrawCurrent) { // if (!xBEEADrawAsBox) { // if (xBEEADrawCandle0) { // DrawCandleAsLine( chartId, subWindow, candle0, candle0Time, candle0Style, c0TagPrefix, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // if (xBEEADrawCandle1) { // DrawCandleAsLine( chartId, subWindow, candle1, candle1Time, candle1Style, c1TagPrefix, xBEEAUpdate // ); } } } else { // if (xBEEADrawCandle0) { // DrawCandleAsBox( chartId, subWindow, candle0, candle0Time, candle0Style, c0TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsBox( chartId, subWindow, candle1, candle1Time, candle1Style, c1TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } } } // if (xBEEADrawSC) { // if (!xBEEADrawAsBox) { // if (xBEEADrawCandle0) { // DrawCandleAsLine( chartId, subWindow, scCandle0, scCandle0Time, scCandle0Style, sc0TagPrefix, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsLine( chartId, subWindow, scCandle1, scCandle1Time, scCandle1Style, sc1TagPrefix, xBEEAUpdate // ); } } else { // if (xBEEADrawCandle0) { // DrawCandleAsBox( chartId, subWindow, scCandle0, scCandle0Time, scCandle0Style, sc0TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsBox( chartId, subWindow, scCandle1, scCandle1Time, scCandle1Style, sc1TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } } } // if (xBEEADrawMC) { // if (!xBEEADrawAsBox) { // if (xBEEADrawCandle0) { // DrawCandleAsLine( chartId, subWindow, mcCandle0, mcCandle0Time, mcCandle0Style, mc0TagPrefix, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsLine( chartId, subWindow, mcCandle1, mcCandle1Time, mcCandle1Style, mc1TagPrefix, xBEEAUpdate // ); } } else { // if (xBEEADrawCandle0) { // DrawCandleAsBox( chartId, subWindow, mcCandle0, mcCandle0Time, mcCandle0Style, mc0TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsBox( chartId, subWindow, mcCandle1, mcCandle1Time, mcCandle1Style, mc1TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } } } // if (mDrawLC) { // if (!xBEEADrawAsBox) { // if (xBEEADrawCandle0) { // DrawCandleAsLine( chartId, subWindow, lcCandle0, lcCandle0Time, lcCandle0Style, lc0TagPrefix, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsLine( chartId, subWindow, lcCandle1, lcCandle1Time, lcCandle1Style, lc1TagPrefix, xBEEAUpdate // ); } } else { // if (xBEEADrawCandle0) { // DrawCandleAsBox( chartId, subWindow, lcCandle0, lcCandle0Time, lcCandle0Style, lc0TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsBox( chartId, subWindow, lcCandle1, lcCandle1Time, lcCandle1Style, lc1TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } } } // if (mDrawHC) { // if (!xBEEADrawAsBox) { // if (xBEEADrawCandle0) { // DrawCandleAsLine( chartId, subWindow, hcCandle0, hcCandle0Time, hcCandle0Style, hc0TagPrefix, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsLine( chartId, subWindow, hcCandle1, hcCandle1Time, hcCandle1Style, hc1TagPrefix, xBEEAUpdate // ); } } else { // if (xBEEADrawCandle0) { // DrawCandleAsBox( chartId, subWindow, hcCandle0, hcCandle0Time, hcCandle0Style, hc0TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } // if (xBEEADrawCandle1) { // DrawCandleAsBox( chartId, subWindow, hcCandle1, hcCandle1Time, hcCandle1Style, hc1TagPrefix, xBEEADrawBody, xBEEADrawShadows, xBEEAUpdate // ); } } } // // Draw MidLines ... // string candel0MidLineTag = GenerateCandleMidLineTag( candle0, c0TagPrefix // ); string candel1MidLineTag = GenerateCandleMidLineTag( candle1, c1TagPrefix // ); string scCandel0MidLineTag = GenerateCandleMidLineTag( scCandle0, sc0TagPrefix // ); string scCandel1MidLineTag = GenerateCandleMidLineTag( scCandle1, sc1TagPrefix // ); string mcCandel0MidLineTag = GenerateCandleMidLineTag( mcCandle0, mc0TagPrefix // ); string mcCandel1MidLineTag = GenerateCandleMidLineTag( mcCandle1, mc1TagPrefix // ); string lcCandel0MidLineTag = GenerateCandleMidLineTag( lcCandle0, lc0TagPrefix // ); string lcCandel1MidLineTag = GenerateCandleMidLineTag( lcCandle1, lc1TagPrefix // ); string hcCandel0MidLineTag = GenerateCandleMidLineTag( hcCandle0, hc0TagPrefix // ); string hcCandel1MidLineTag = GenerateCandleMidLineTag( hcCandle1, hc1TagPrefix // ); // // Current ... // // Candle 0 ... specs.style = STYLE_DOT; specs.clr = clrTurquoise; DrawCandleMidLine( candle0, candle0Time, specs, candel0MidLineTag, c0TagPrefix, mDraw0MidLine // ); // // Candle 1 ... specs.width = 2; specs.style = STYLE_SOLID; DrawCandleMidLine( candle1, candle1Time, specs, candel1MidLineTag, c1TagPrefix, mDraw1MidLine // ); // // Short ... // // Candle 0 ... specs.width = 1; specs.style = STYLE_DOT; specs.clr = clrSpringGreen; DrawCandleMidLine( scCandle0, scCandle0Time, specs, scCandel0MidLineTag, sc0TagPrefix, xBEEADrawSC0MidLine // ); // // Candle 1 ... specs.width = 2; specs.style = STYLE_SOLID; DrawCandleMidLine( scCandle1, scCandle1Time, specs, scCandel1MidLineTag, sc1TagPrefix, xBEEADrawSC1MidLine // ); // // Medium ... // // Candle 0 ... specs.width = 1; specs.clr = clrCornflowerBlue; specs.style = STYLE_DOT; DrawCandleMidLine( mcCandle0, mcCandle0Time, specs, mcCandel0MidLineTag, mc0TagPrefix, xBEEADrawMC0MidLine // ); // // Candle 1 ... specs.width = 2; specs.style = STYLE_SOLID; DrawCandleMidLine( mcCandle1, mcCandle1Time, specs, mcCandel1MidLineTag, mc1TagPrefix, xBEEADrawMC1MidLine // ); // // Long ... // // Candle 0 ... specs.width = 1; specs.style = STYLE_DOT; specs.clr = clrYellow; DrawCandleMidLine( lcCandle0, lcCandle0Time, specs, lcCandel0MidLineTag, lc0TagPrefix, xBEEADrawLC0MidLine // ); // // Candle 1 ... specs.width = 2; specs.style = STYLE_SOLID; DrawCandleMidLine( lcCandle1, lcCandle1Time, specs, lcCandel1MidLineTag, lc1TagPrefix, xBEEADrawLC1MidLine // ); // // Hind ... // // Candle 0 ... specs.clr = clrDarkOrange; specs.width = 1; specs.style = STYLE_DOT; DrawCandleMidLine( hcCandle0, hcCandle0Time, specs, hcCandel0MidLineTag, hc0TagPrefix, xBEEADrawHC0MidLine // ); // // Candle 1 ... specs.width = 2; specs.style = STYLE_SOLID; DrawCandleMidLine( hcCandle1, hcCandle1Time, specs, hcCandel1MidLineTag, hc1TagPrefix, xBEEADrawHC1MidLine // ); } // // Generate States and Comment to User ... void XBEEAProvideInfo() { // string periodMsg = // "SC: " + ToString(xBEEASCPeriod) + "\n" + "MC: " + ToString(xBEEAMCPeriod) + "\n" + "LC: " + ToString(xBEEALCPeriod) + "\n" + "HC: " + ToString(xBEEAHCPeriod) // ; // string buySellMsg = // (buyTime > 0 && buyTime != NULL ? "Last Buy: " + ToString(buyTime) + "\n" : "") + (sellTime > 0 && sellTime != NULL ? "Last Sell: " + ToString(sellTime) + "\n" : "") // ; // string hcStateMsg = "HC waits for reversal Conditions: " + ToString(hcWaitsOnNextSession); // string hcCandlestickMsg = "HC Candle 1: " + (isHCCandle1Bullish ? "Bullish" : isHCCandle1Bearish ? "Bearish" : "Neutural" // ); // string lcCandlestickMsg = "LC Candle 1: " + (isLCCandle1Bullish ? "Bullish" : isLCCandle1Bearish ? "Bearish" : "Neutural" // ); // string mcCandlestickMsg = "MC Candle 1: " + (isMCCandle1Bullish ? "Bullish" : isMCCandle1Bearish ? "Bearish" : "Neutural" // ); // string candlestickMsg = // lcCandlestickMsg + "\n" + hcCandlestickMsg // ; // string comment = ""; // comment += // periodMsg + "\n" + buySellMsg + "\n" + hcStateMsg + "\n" + candlestickMsg // ; // Comment(comment); } // void DrawCandleMidLine( XOHCL &c, // Candle ... const datetime time, // Candle Time ... XDrawSpecifications &specs, // Draw Specifications ... string tag = "", // Tag ... string label = "", // Label ... bool draw = false // Draw MidLine ... ) { // if (!draw) { return; } // long chartId = ChartID(); int subWindow = 0; // double value = (c.open + c.close) / 2; // datetime cTime = TimeCurrent(); // string lblTag = tag + "_lbl"; if (xBEEADrawLabels) { DrawText( chartId, lblTag, subWindow, cTime, value, label, "Arial", 20, specs.clr, 90, ANCHOR_LEFT_UPPER, specs.back, specs.selection, specs.hidden, specs.zOrder // ); } // // Draw ... DrawTrendLine( chartId, tag, subWindow, time, value, cTime, value, specs.clr, specs.style, specs.width, specs.back, specs.selection, specs.rayRight, specs.hidden, specs.zOrder // ); } // string GenerateCandleMidLineTag( XOHCL &c, // Candle ... string tag = "" // Tag ... ) { // double value = (c.open + c.close) / 2; // string result = tag + "_" + "|MID|"; // return result; }