1825 lines
39 KiB
Plaintext
1825 lines
39 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// 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;
|
|
}
|