Complete Rejection Bars ...
This commit is contained in:
@@ -566,6 +566,170 @@ class XCBarAnalyser : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check a Bar is Momentum Bar or not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION member ...
|
||||||
|
* @param extend: Integer ...
|
||||||
|
* @param bodyPercent: Double ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsMomentumBar(
|
||||||
|
XOHCL &bar,
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int extend = 1,
|
||||||
|
double bodyPercent = 70 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (extend < 0)
|
||||||
|
{
|
||||||
|
extend = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (bodyPercent < 50)
|
||||||
|
{
|
||||||
|
bodyPercent = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (extend > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = IsExtended(
|
||||||
|
bar,
|
||||||
|
extend //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double body = bar.GetBody();
|
||||||
|
double rp = GetBarRangePercent(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = body >= rp * bodyPercent;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir =
|
||||||
|
bar.IsBullish()
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check a Bar is Rejection Bar or not ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
* @param dir: ENUM_X_DIRECTION member ...
|
||||||
|
* @param extend: Integer ...
|
||||||
|
* @param bodyPercent: Double ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsRejectionBar(
|
||||||
|
XOHCL &bar,
|
||||||
|
ENUM_X_DIRECTION &dir,
|
||||||
|
int extend = 1,
|
||||||
|
double shadowPercent = 60 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (extend < 0)
|
||||||
|
{
|
||||||
|
extend = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (shadowPercent < 50)
|
||||||
|
{
|
||||||
|
shadowPercent = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
dir = X_DIRECTION_NONE;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (extend > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = IsExtended(
|
||||||
|
bar,
|
||||||
|
extend //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
double body = bar.GetBody();
|
||||||
|
double range = bar.GetRange();
|
||||||
|
double shadows = bar.GetShadows();
|
||||||
|
double lowShadow = bar.GetLowShadow();
|
||||||
|
double highShadow = bar.GetHighShadow();
|
||||||
|
double rp = GetBarRangePercent(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = shadows >= rp * shadowPercent;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
dir =
|
||||||
|
lowShadow > highShadow
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
protected:
|
protected:
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -121,9 +121,7 @@ class XCBaseObject : public CChartObject
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
class XCBarArrowObject : public XCBaseObject
|
||||||
// Swing ...
|
|
||||||
class XCSwingObject : public XCBaseObject
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
public:
|
public:
|
||||||
@@ -133,16 +131,19 @@ class XCSwingObject : public XCBaseObject
|
|||||||
* Creator ...
|
* Creator ...
|
||||||
*
|
*
|
||||||
* @param chart_id: Long, Specified Chart ID ...
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param name: String, Specified Object ID ...
|
||||||
* @param window: Integer, Specified Chart Window ID ...
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
* @param swing: XCSwing instance ...
|
* @param swing: XCSwing instance ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
bool CreateBySwing(
|
bool CreateByBar(
|
||||||
long chart_id,
|
long chart_id,
|
||||||
|
string name,
|
||||||
int window,
|
int window,
|
||||||
int arrow,
|
int arrow,
|
||||||
XCSwing &swing //
|
XOHCL &bar,
|
||||||
|
ENUM_X_PRICE priceType //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -151,7 +152,7 @@ class XCSwingObject : public XCBaseObject
|
|||||||
//
|
//
|
||||||
result =
|
result =
|
||||||
//
|
//
|
||||||
swing.IsValid()
|
bar.IsValid()
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -159,22 +160,9 @@ class XCSwingObject : public XCBaseObject
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
string name = swing.GetTag();
|
|
||||||
|
|
||||||
//
|
|
||||||
XOHCL bar;
|
|
||||||
result = swing.FillBar(bar);
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
datetime time = bar.time;
|
datetime time = bar.time;
|
||||||
double price = swing.IsSwingHigh()
|
double price = bar.GetPrice(priceType);
|
||||||
? bar.high
|
|
||||||
: bar.low;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
result = mArrow.Create(
|
result = mArrow.Create(
|
||||||
@@ -240,6 +228,87 @@ class XCSwingObject : public XCBaseObject
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Swing ...
|
||||||
|
class XCSwingObject : public XCBarArrowObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param swing: XCSwing instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBySwing(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCSwing &swing,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
swing.IsValid()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string name = swing.GetTag();
|
||||||
|
if (IsValid(prefix))
|
||||||
|
{
|
||||||
|
name = prefix + "_" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
result = swing.FillBar(bar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_PRICE price = swing.IsSwingHigh()
|
||||||
|
? X_PRICE_HIGH
|
||||||
|
: X_PRICE_LOW;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByBar(
|
||||||
|
chart_id,
|
||||||
|
name,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
bar,
|
||||||
|
price //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
ObjName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Swing High ...
|
// Swing High ...
|
||||||
class XCSwingHighObject : public XCSwingObject
|
class XCSwingHighObject : public XCSwingObject
|
||||||
@@ -253,7 +322,9 @@ class XCSwingHighObject : public XCSwingObject
|
|||||||
*
|
*
|
||||||
* @param chart_id: Long, Specified Chart ID ...
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
* @param window: Integer, Specified Chart Window ID ...
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
* @param swing: XCSwing instance ...
|
* @param swing: XCSwing instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -261,7 +332,8 @@ class XCSwingHighObject : public XCSwingObject
|
|||||||
long chart_id,
|
long chart_id,
|
||||||
int window,
|
int window,
|
||||||
int arrow,
|
int arrow,
|
||||||
XCSwing &swing //
|
XCSwing &swing,
|
||||||
|
string prefix = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -280,7 +352,8 @@ class XCSwingHighObject : public XCSwingObject
|
|||||||
chart_id,
|
chart_id,
|
||||||
window,
|
window,
|
||||||
arrow,
|
arrow,
|
||||||
swing //
|
swing,
|
||||||
|
prefix //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -313,7 +386,9 @@ class XCSwingLowObject : public XCSwingObject
|
|||||||
*
|
*
|
||||||
* @param chart_id: Long, Specified Chart ID ...
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
* @param window: Integer, Specified Chart Window ID ...
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
* @param swing: XCSwing instance ...
|
* @param swing: XCSwing instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -321,7 +396,8 @@ class XCSwingLowObject : public XCSwingObject
|
|||||||
long chart_id,
|
long chart_id,
|
||||||
int window,
|
int window,
|
||||||
int arrow,
|
int arrow,
|
||||||
XCSwing &swing //
|
XCSwing &swing,
|
||||||
|
string prefix = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -340,7 +416,8 @@ class XCSwingLowObject : public XCSwingObject
|
|||||||
chart_id,
|
chart_id,
|
||||||
window,
|
window,
|
||||||
arrow,
|
arrow,
|
||||||
swing //
|
swing,
|
||||||
|
prefix //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -360,6 +437,424 @@ class XCSwingLowObject : public XCSwingObject
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum ...
|
||||||
|
class XCMomentumObject : public XCBarArrowObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param momentumBar: XCMomentumBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateByMomentum(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCMomentumBar &momentumBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
momentumBar.IsValid()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string name = momentumBar.GetTag();
|
||||||
|
if (IsValid(prefix))
|
||||||
|
{
|
||||||
|
name = prefix + "_" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
result = momentumBar.FillBar(bar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_PRICE price = momentumBar.IsBullish()
|
||||||
|
? X_PRICE_LOW
|
||||||
|
: X_PRICE_HIGH;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByBar(
|
||||||
|
chart_id,
|
||||||
|
name,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
bar,
|
||||||
|
price //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
ObjName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Momentum Bar ...
|
||||||
|
class XCBullishMomentumObject : public XCMomentumObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
|
* @param momentumBar: XCMomentumBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Create(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCMomentumBar &momentumBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = momentumBar.IsValid() &&
|
||||||
|
momentumBar.IsBullish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByMomentum(
|
||||||
|
chart_id,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
momentumBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Object Type ...
|
||||||
|
*
|
||||||
|
* @return ( ENUM_XCHARTOBJECTS )
|
||||||
|
*/
|
||||||
|
virtual ENUM_XCHARTOBJECTS Type()
|
||||||
|
{
|
||||||
|
return X_BULLISH_MOMENTUM_BAR_OBJ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Momentum Bar ...
|
||||||
|
class XCBearishMomentumObject : public XCMomentumObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
|
* @param momentumBar: XCMomentumBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Create(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCMomentumBar &momentumBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = momentumBar.IsValid() &&
|
||||||
|
momentumBar.IsBearish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByMomentum(
|
||||||
|
chart_id,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
momentumBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Object Type ...
|
||||||
|
*
|
||||||
|
* @return ( ENUM_XCHARTOBJECTS )
|
||||||
|
*/
|
||||||
|
virtual ENUM_XCHARTOBJECTS Type()
|
||||||
|
{
|
||||||
|
return X_BEARISH_MOMENTUM_BAR_OBJ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejection ...
|
||||||
|
class XCRejectionObject : public XCBarArrowObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param rejectionBar: XCRejectionBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateByRejection(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCRejectionBar &rejectionBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
rejectionBar.IsValid()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string name = rejectionBar.GetTag();
|
||||||
|
if (IsValid(prefix))
|
||||||
|
{
|
||||||
|
name = prefix + "_" + name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
result = rejectionBar.FillBar(bar);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
ENUM_X_PRICE price = rejectionBar.IsBullish()
|
||||||
|
? X_PRICE_LOW
|
||||||
|
: X_PRICE_HIGH;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByBar(
|
||||||
|
chart_id,
|
||||||
|
name,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
bar,
|
||||||
|
price //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
ObjName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Rejection Bar ...
|
||||||
|
class XCBullishRejectionObject : public XCRejectionObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
|
* @param rejectionBar: XCRejectionBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Create(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCRejectionBar &rejectionBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = rejectionBar.IsValid() &&
|
||||||
|
rejectionBar.IsBullish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByRejection(
|
||||||
|
chart_id,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
rejectionBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Object Type ...
|
||||||
|
*
|
||||||
|
* @return ( ENUM_XCHARTOBJECTS )
|
||||||
|
*/
|
||||||
|
virtual ENUM_XCHARTOBJECTS Type()
|
||||||
|
{
|
||||||
|
return X_BULLISH_REJECTION_BAR_OBJ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Rejection Bar ...
|
||||||
|
class XCBearishRejectionObject : public XCRejectionObject
|
||||||
|
{
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creator ...
|
||||||
|
*
|
||||||
|
* @param chart_id: Long, Specified Chart ID ...
|
||||||
|
* @param window: Integer, Specified Chart Window ID ...
|
||||||
|
* @param arrow: Integer, Specified Arrow Code ...
|
||||||
|
* @param rejectionBar: XCRejectionBar instance ...
|
||||||
|
* @param prefix: String ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Create(
|
||||||
|
long chart_id,
|
||||||
|
int window,
|
||||||
|
int arrow,
|
||||||
|
XCRejectionBar &rejectionBar,
|
||||||
|
string prefix = NULL //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = rejectionBar.IsValid() &&
|
||||||
|
rejectionBar.IsBearish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = CreateByRejection(
|
||||||
|
chart_id,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
rejectionBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Object Type ...
|
||||||
|
*
|
||||||
|
* @return ( ENUM_XCHARTOBJECTS )
|
||||||
|
*/
|
||||||
|
virtual ENUM_XCHARTOBJECTS Type()
|
||||||
|
{
|
||||||
|
return X_BEARISH_REJECTION_BAR_OBJ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// XCZoneObject ...
|
// XCZoneObject ...
|
||||||
class XCZoneObject : public XCBaseObject
|
class XCZoneObject : public XCBaseObject
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Apply Default Configurations ...
|
// Apply Default Configurations ...
|
||||||
ApplyDefaultConfig();
|
Default();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -203,6 +203,120 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
mSwingRange = value;
|
mSwingRange = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Momentum Bars must Extends Range ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int MomentumBarExtendRange()
|
||||||
|
{
|
||||||
|
return mMomentumBarExtendRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Momentum Bars must Extends Range ...
|
||||||
|
*
|
||||||
|
* @param value: Integer ...
|
||||||
|
*/
|
||||||
|
void MomentumBarExtendRange(int value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mMomentumBarExtendRange = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Momentum Bars Body Percent ...
|
||||||
|
*
|
||||||
|
* @return ( double )
|
||||||
|
*/
|
||||||
|
double MomentumBarBodyPercent()
|
||||||
|
{
|
||||||
|
return mMomentumBarBodyPercent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Momentum Bars Body Percent ...
|
||||||
|
*
|
||||||
|
* @param value: Double ...
|
||||||
|
*/
|
||||||
|
void MomentumBarBodyPercent(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 50)
|
||||||
|
{
|
||||||
|
value = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mMomentumBarBodyPercent = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejection Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Rejection Bars must Extends Range ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int RejectionBarExtendRange()
|
||||||
|
{
|
||||||
|
return mRejectionBarExtendRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Rejection Bars must Extends Range ...
|
||||||
|
*
|
||||||
|
* @param value: Integer ...
|
||||||
|
*/
|
||||||
|
void RejectionBarExtendRange(int value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 0)
|
||||||
|
{
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mRejectionBarExtendRange = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Rejection Bars Shadow Percent ...
|
||||||
|
*
|
||||||
|
* @return ( double )
|
||||||
|
*/
|
||||||
|
double RejectionBarShadowPercent()
|
||||||
|
{
|
||||||
|
return mRejectionBarShadowPercent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Rejection Bars Shadow Percent ...
|
||||||
|
*
|
||||||
|
* @param value: Double ...
|
||||||
|
*/
|
||||||
|
void RejectionBarShadowPercent(double value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (value < 50)
|
||||||
|
{
|
||||||
|
value = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mRejectionBarShadowPercent = value;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Actions ...
|
// Actions ...
|
||||||
|
|
||||||
@@ -274,7 +388,7 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// POI Detecting ...
|
// POI Detecting ...
|
||||||
bool isDetect = false;
|
bool isDetected = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Swings ...
|
// Swings ...
|
||||||
@@ -292,8 +406,8 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Swing High ...
|
// Swing High ...
|
||||||
isDetect = DetectSwingHigh(swingBar);
|
isDetected = DetectSwingHigh(swingBar);
|
||||||
if (isDetect)
|
if (isDetected)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
ENUM_XPOI_EVENTS event = X_SWING_HIGH_DETECTED;
|
ENUM_XPOI_EVENTS event = X_SWING_HIGH_DETECTED;
|
||||||
@@ -320,8 +434,8 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Swing Low ...
|
// Swing Low ...
|
||||||
isDetect = DetectSwingLow(swingBar);
|
isDetected = DetectSwingLow(swingBar);
|
||||||
if (isDetect)
|
if (isDetected)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
ENUM_XPOI_EVENTS event = X_SWING_LOW_DETECTED;
|
ENUM_XPOI_EVENTS event = X_SWING_LOW_DETECTED;
|
||||||
@@ -348,6 +462,118 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Momentum Bars ...
|
||||||
|
isDetected = DetectBullishMomentumBar(cBar);
|
||||||
|
if (isDetected)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_XPOI_EVENTS event = X_BULLISH_MOMENTUM_BAR_DETECTED;
|
||||||
|
XCMomentumBar *param;
|
||||||
|
bool hasItem = GetLastItem(
|
||||||
|
param,
|
||||||
|
mBullishMomentumBars //
|
||||||
|
);
|
||||||
|
if (hasItem)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
NotifyEventListeners(
|
||||||
|
event,
|
||||||
|
param //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
event,
|
||||||
|
state //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Momentum Bars ...
|
||||||
|
isDetected = DetectBearishMomentumBar(cBar);
|
||||||
|
if (isDetected)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_XPOI_EVENTS event = X_BEARISH_MOMENTUM_BAR_DETECTED;
|
||||||
|
XCMomentumBar *param;
|
||||||
|
bool hasItem = GetLastItem(
|
||||||
|
param,
|
||||||
|
mBearishMomentumBars //
|
||||||
|
);
|
||||||
|
if (hasItem)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
NotifyEventListeners(
|
||||||
|
event,
|
||||||
|
param //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
event,
|
||||||
|
state //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Rejection Bars ...
|
||||||
|
isDetected = DetectBullishRejectionBar(cBar);
|
||||||
|
if (isDetected)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_XPOI_EVENTS event = X_BULLISH_REJECTION_BAR_DETECTED;
|
||||||
|
XCRejectionBar *param;
|
||||||
|
bool hasItem = GetLastItem(
|
||||||
|
param,
|
||||||
|
mBullishRejectionBars //
|
||||||
|
);
|
||||||
|
if (hasItem)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
NotifyEventListeners(
|
||||||
|
event,
|
||||||
|
param //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
event,
|
||||||
|
state //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Rejection Bars ...
|
||||||
|
isDetected = DetectBearishRejectionBar(cBar);
|
||||||
|
if (isDetected)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_XPOI_EVENTS event = X_BEARISH_REJECTION_BAR_DETECTED;
|
||||||
|
XCRejectionBar *param;
|
||||||
|
bool hasItem = GetLastItem(
|
||||||
|
param,
|
||||||
|
mBearishRejectionBars //
|
||||||
|
);
|
||||||
|
if (hasItem)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
NotifyEventListeners(
|
||||||
|
event,
|
||||||
|
param //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
event,
|
||||||
|
state //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
CleanupUnusedPOIs();
|
CleanupUnusedPOIs();
|
||||||
|
|
||||||
@@ -424,6 +650,14 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
//
|
//
|
||||||
Clean(mSwingHighs);
|
Clean(mSwingHighs);
|
||||||
Clean(mSwingLows);
|
Clean(mSwingLows);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(mBullishMomentumBars);
|
||||||
|
Clean(mBearishMomentumBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(mBullishRejectionBars);
|
||||||
|
Clean(mBearishRejectionBars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -447,7 +681,7 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
/**
|
/**
|
||||||
* Apply Default Configurations ...
|
* Apply Default Configurations ...
|
||||||
*/
|
*/
|
||||||
virtual void ApplyDefaultConfig()
|
virtual void Default()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Common ...
|
// Common ...
|
||||||
@@ -460,6 +694,12 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
SwingRange(2);
|
SwingRange(2);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
MomentumBarExtendRange(2);
|
||||||
|
MomentumBarBodyPercent(70);
|
||||||
|
|
||||||
|
//
|
||||||
|
RejectionBarExtendRange(0);
|
||||||
|
RejectionBarShadowPercent(55);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -516,6 +756,14 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
int swingLowsCount = 0;
|
int swingLowsCount = 0;
|
||||||
int swingHighsCount = 0;
|
int swingHighsCount = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
int bullishMomentumBarsCount = 0;
|
||||||
|
int bearishMomentumBarsCount = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
int bullishRejectionBarsCount = 0;
|
||||||
|
int bearishRejectionBarsCount = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canContinue = true;
|
bool canContinue = true;
|
||||||
|
|
||||||
@@ -538,6 +786,38 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
ArrayReverse(mSwingLows);
|
ArrayReverse(mSwingLows);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Momentum Bars ...
|
||||||
|
bullishMomentumBarsCount = DetectRequiredBullishMomentumBars(barIndex);
|
||||||
|
if (bullishMomentumBarsCount == requiredPOIs)
|
||||||
|
{
|
||||||
|
ArrayReverse(mBullishMomentumBars);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Momentum Bars ...
|
||||||
|
bearishMomentumBarsCount = DetectRequiredBearishMomentumBars(barIndex);
|
||||||
|
if (bearishMomentumBarsCount == requiredPOIs)
|
||||||
|
{
|
||||||
|
ArrayReverse(mBearishMomentumBars);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish Rejection Bars ...
|
||||||
|
bullishRejectionBarsCount = DetectRequiredBullishRejectionBars(barIndex);
|
||||||
|
if (bullishRejectionBarsCount == requiredPOIs)
|
||||||
|
{
|
||||||
|
ArrayReverse(mBullishRejectionBars);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish Rejection Bars ...
|
||||||
|
bearishRejectionBarsCount = DetectRequiredBearishRejectionBars(barIndex);
|
||||||
|
if (bearishRejectionBarsCount == requiredPOIs)
|
||||||
|
{
|
||||||
|
ArrayReverse(mBearishRejectionBars);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
canContinue =
|
canContinue =
|
||||||
//
|
//
|
||||||
@@ -549,6 +829,26 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
// Swing Lows ...
|
// Swing Lows ...
|
||||||
swingLowsCount < requiredPOIs
|
swingLowsCount < requiredPOIs
|
||||||
//
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
// Bullish Momentum Bars ...
|
||||||
|
bullishMomentumBarsCount < requiredPOIs
|
||||||
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
// Bearish Momentum Bars ...
|
||||||
|
bearishMomentumBarsCount < requiredPOIs
|
||||||
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
// Bullish Rejection Bars ...
|
||||||
|
bullishRejectionBarsCount < requiredPOIs
|
||||||
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
// Bearish Rejection Bars ...
|
||||||
|
bearishRejectionBarsCount < requiredPOIs
|
||||||
|
//
|
||||||
;
|
;
|
||||||
if (canContinue)
|
if (canContinue)
|
||||||
{
|
{
|
||||||
@@ -1010,15 +1310,15 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
XCSwingHighObject *iObj;
|
// XCSwingHighObject *iObj;
|
||||||
bool isCreated = mDrawer.CreateSwingHigh(
|
// bool isCreated = mDrawer.CreateSwingHigh(
|
||||||
swing,
|
// swing,
|
||||||
iObj //
|
// iObj //
|
||||||
);
|
// );
|
||||||
if (isCreated)
|
// if (isCreated)
|
||||||
{
|
// {
|
||||||
AddObjectIfNotExists(iObj);
|
// AddObjectIfNotExists(iObj);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1153,16 +1453,16 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
mSwingHighs //
|
mSwingHighs //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
// //
|
||||||
XCSwingLowObject *iObj;
|
// XCSwingLowObject *iObj;
|
||||||
bool isCreated = mDrawer.CreateSwingLow(
|
// bool isCreated = mDrawer.CreateSwingLow(
|
||||||
swing,
|
// swing,
|
||||||
iObj //
|
// iObj //
|
||||||
);
|
// );
|
||||||
if (isCreated)
|
// if (isCreated)
|
||||||
{
|
// {
|
||||||
AddObjectIfNotExists(iObj);
|
// AddObjectIfNotExists(iObj);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1240,9 +1540,537 @@ class XCPOIDetector : public XCBaseAlert
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Momentum Bars ...
|
// Momentum Bars ...
|
||||||
|
int mMomentumBarExtendRange; // Momentum Bars must Extends Range ...
|
||||||
|
double mMomentumBarBodyPercent; // Momentum Bars Body Percent ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
XCMomentumBar *mBullishMomentumBars[]; // Holds Founded Bullish Momentum Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Bullish Momentum Bar ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool DetectBullishMomentumBar(XOHCL &bar)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int extendRange = MomentumBarExtendRange();
|
||||||
|
double bodyPercent = MomentumBarBodyPercent();
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
|
result = mBarAnalyser.IsMomentumBar(
|
||||||
|
bar,
|
||||||
|
dir,
|
||||||
|
extendRange,
|
||||||
|
bodyPercent //
|
||||||
|
);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
dir == X_DIRECTION_BULLISH;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCMomentumBar *momentumBar;
|
||||||
|
momentumBar = new XCMomentumBar();
|
||||||
|
result = momentumBar.Init(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
momentumBar,
|
||||||
|
mBullishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCBullishMomentumObject *iObj;
|
||||||
|
// bool isCreated = mDrawer.CreateBullishMomentumBar(
|
||||||
|
// momentumBar,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Required Bullish Momentum Bars ...
|
||||||
|
*
|
||||||
|
* @param barIndex: Integer Start bar index ...
|
||||||
|
* 0 is Default ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int DetectRequiredBullishMomentumBars(int barIndex = 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (barIndex < 0)
|
||||||
|
{
|
||||||
|
barIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int required = MaxNumberOfRequiredPOIs();
|
||||||
|
if (required <= 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(mBullishMomentumBars);
|
||||||
|
if (count >= required)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = count;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
bool isInited = bar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DetectBullishMomentumBar(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(mBullishMomentumBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
XCMomentumBar *mBearishMomentumBars[]; // Holds Founded Bearish Momentum Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Bearish Momentum Bar ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool DetectBearishMomentumBar(XOHCL &bar)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int extendRange = MomentumBarExtendRange();
|
||||||
|
double bodyPercent = MomentumBarBodyPercent();
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
|
result = mBarAnalyser.IsMomentumBar(
|
||||||
|
bar,
|
||||||
|
dir,
|
||||||
|
extendRange,
|
||||||
|
bodyPercent //
|
||||||
|
);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
dir == X_DIRECTION_BEARISH;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCMomentumBar *momentumBar;
|
||||||
|
momentumBar = new XCMomentumBar();
|
||||||
|
result = momentumBar.Init(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
momentumBar,
|
||||||
|
mBearishMomentumBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCBearishMomentumObject *iObj;
|
||||||
|
// bool isCreated = mDrawer.CreateBearishMomentumBar(
|
||||||
|
// momentumBar,
|
||||||
|
// iObj //
|
||||||
|
// );
|
||||||
|
// if (isCreated)
|
||||||
|
// {
|
||||||
|
// AddObjectIfNotExists(iObj);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Required Bearish Momentum Bars ...
|
||||||
|
*
|
||||||
|
* @param barIndex: Integer Start bar index ...
|
||||||
|
* 0 is Default ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int DetectRequiredBearishMomentumBars(int barIndex = 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (barIndex < 0)
|
||||||
|
{
|
||||||
|
barIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int required = MaxNumberOfRequiredPOIs();
|
||||||
|
if (required <= 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(mBearishMomentumBars);
|
||||||
|
if (count >= required)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = count;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
bool isInited = bar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DetectBearishMomentumBar(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(mBearishMomentumBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Rejection Bars ...
|
// Rejection Bars ...
|
||||||
|
int mRejectionBarExtendRange; // Rejection Bars must Extends Range ...
|
||||||
|
double mRejectionBarShadowPercent; // Rejection Bars Shadow Percent ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bullish ...
|
||||||
|
XCRejectionBar *mBullishRejectionBars[]; // Holds Founded Bullish Rejection Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Bullish Rejection Bar ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool DetectBullishRejectionBar(XOHCL &bar)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int extendRange = RejectionBarExtendRange();
|
||||||
|
double shadowPercent = RejectionBarShadowPercent();
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
|
result = mBarAnalyser.IsRejectionBar(
|
||||||
|
bar,
|
||||||
|
dir,
|
||||||
|
extendRange,
|
||||||
|
shadowPercent //
|
||||||
|
);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
dir == X_DIRECTION_BULLISH;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCRejectionBar *rejectionBar;
|
||||||
|
rejectionBar = new XCRejectionBar();
|
||||||
|
result = rejectionBar.Init(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
rejectionBar,
|
||||||
|
mBullishRejectionBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBullishRejectionObject *iObj;
|
||||||
|
bool isCreated = mDrawer.CreateBullishRejectionBar(
|
||||||
|
rejectionBar,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (isCreated)
|
||||||
|
{
|
||||||
|
AddObjectIfNotExists(iObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Required Bullish Rejection Bars ...
|
||||||
|
*
|
||||||
|
* @param barIndex: Integer Start bar index ...
|
||||||
|
* 0 is Default ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int DetectRequiredBullishRejectionBars(int barIndex = 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (barIndex < 0)
|
||||||
|
{
|
||||||
|
barIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int required = MaxNumberOfRequiredPOIs();
|
||||||
|
if (required <= 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(mBullishRejectionBars);
|
||||||
|
if (count >= required)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = count;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
bool isInited = bar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DetectBullishRejectionBar(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(mBullishRejectionBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bearish ...
|
||||||
|
XCRejectionBar *mBearishRejectionBars[]; // Holds Founded Bearish Rejection Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Bearish Rejection Bar ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool DetectBearishRejectionBar(XOHCL &bar)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
bar.Index() > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int extendRange = RejectionBarExtendRange();
|
||||||
|
double shadowPercent = RejectionBarShadowPercent();
|
||||||
|
ENUM_X_DIRECTION dir;
|
||||||
|
result = mBarAnalyser.IsRejectionBar(
|
||||||
|
bar,
|
||||||
|
dir,
|
||||||
|
extendRange,
|
||||||
|
shadowPercent //
|
||||||
|
);
|
||||||
|
result =
|
||||||
|
result &&
|
||||||
|
dir == X_DIRECTION_BEARISH;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCRejectionBar *rejectionBar;
|
||||||
|
rejectionBar = new XCRejectionBar();
|
||||||
|
result = rejectionBar.Init(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
rejectionBar,
|
||||||
|
mBearishRejectionBars //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
XCBearishRejectionObject *iObj;
|
||||||
|
bool isCreated = mDrawer.CreateBearishRejectionBar(
|
||||||
|
rejectionBar,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (isCreated)
|
||||||
|
{
|
||||||
|
AddObjectIfNotExists(iObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect Required Bearish Rejection Bars ...
|
||||||
|
*
|
||||||
|
* @param barIndex: Integer Start bar index ...
|
||||||
|
* 0 is Default ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int DetectRequiredBearishRejectionBars(int barIndex = 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (barIndex < 0)
|
||||||
|
{
|
||||||
|
barIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int required = MaxNumberOfRequiredPOIs();
|
||||||
|
if (required <= 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(mBearishRejectionBars);
|
||||||
|
if (count >= required)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = count;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL bar;
|
||||||
|
bool isInited = bar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
barIndex //
|
||||||
|
);
|
||||||
|
if (!isInited)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DetectBearishRejectionBar(bar);
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(mBearishRejectionBars);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Support Zone(s) ...
|
// Support Zone(s) ...
|
||||||
|
|||||||
@@ -1278,7 +1278,8 @@ class XCPOIDrawer : public XCBase
|
|||||||
/**
|
/**
|
||||||
* Create Swing High Object ...
|
* Create Swing High Object ...
|
||||||
*
|
*
|
||||||
* @param swing: XOHCL instance ...
|
* @param swing: XCSwing instance ...
|
||||||
|
* @param object: XCSwingHighObject pointer ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -1303,6 +1304,7 @@ class XCPOIDrawer : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
long chartID = ChartIdentification();
|
long chartID = ChartIdentification();
|
||||||
int window = SubWindowIdentification();
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
@@ -1317,7 +1319,8 @@ class XCPOIDrawer : public XCBase
|
|||||||
chartID,
|
chartID,
|
||||||
window,
|
window,
|
||||||
arrow,
|
arrow,
|
||||||
swing //
|
swing,
|
||||||
|
prefix //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1338,7 +1341,8 @@ class XCPOIDrawer : public XCBase
|
|||||||
/**
|
/**
|
||||||
* Create Swing Low Object ...
|
* Create Swing Low Object ...
|
||||||
*
|
*
|
||||||
* @param swing: XOHCL instance ...
|
* @param swing: XCSwing instance ...
|
||||||
|
* @param object: XCSwingLowObject pointer ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -1363,6 +1367,7 @@ class XCPOIDrawer : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
long chartID = ChartIdentification();
|
long chartID = ChartIdentification();
|
||||||
int window = SubWindowIdentification();
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
@@ -1377,7 +1382,8 @@ class XCPOIDrawer : public XCBase
|
|||||||
chartID,
|
chartID,
|
||||||
window,
|
window,
|
||||||
arrow,
|
arrow,
|
||||||
swing //
|
swing,
|
||||||
|
prefix //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1395,6 +1401,264 @@ class XCPOIDrawer : public XCBase
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Momentum Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Bullish Momentum Bar Object ...
|
||||||
|
*
|
||||||
|
* @param momentumBar: XCMomentumBar instance ...
|
||||||
|
* @param object: XCBullishMomentumObject pointer ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBullishMomentumBar(
|
||||||
|
XCMomentumBar &momentumBar,
|
||||||
|
XCBullishMomentumObject *&object //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
object = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
momentumBar.IsValid() &&
|
||||||
|
momentumBar.IsBullish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
|
long chartID = ChartIdentification();
|
||||||
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
|
//
|
||||||
|
int arrow = BullishMomentumBarArrow();
|
||||||
|
int width = BullishMomentumBarWidth();
|
||||||
|
color crl = BullishMomentumBarColor();
|
||||||
|
|
||||||
|
//
|
||||||
|
object = new XCBullishMomentumObject();
|
||||||
|
result = object.Create(
|
||||||
|
chartID,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
momentumBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
object.ArrowColor(crl);
|
||||||
|
object.ArrowWidth(width);
|
||||||
|
object.ArrowAnchor(ANCHOR_TOP);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Bearish Momentum Bar Object ...
|
||||||
|
*
|
||||||
|
* @param momentumBar: XCMomentumBar instance ...
|
||||||
|
* @param object: XCBearishMomentumObject pointer ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBearishMomentumBar(
|
||||||
|
XCMomentumBar &momentumBar,
|
||||||
|
XCBearishMomentumObject *&object //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
object = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
momentumBar.IsValid() &&
|
||||||
|
momentumBar.IsBearish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
|
long chartID = ChartIdentification();
|
||||||
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
|
//
|
||||||
|
int arrow = BearishMomentumBarArrow();
|
||||||
|
int width = BearishMomentumBarWidth();
|
||||||
|
color crl = BearishMomentumBarColor();
|
||||||
|
|
||||||
|
//
|
||||||
|
object = new XCBearishMomentumObject();
|
||||||
|
result = object.Create(
|
||||||
|
chartID,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
momentumBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
object.ArrowColor(crl);
|
||||||
|
object.ArrowWidth(width);
|
||||||
|
object.ArrowAnchor(ANCHOR_BOTTOM);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Rejection Bars ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Bullish Rejection Bar Object ...
|
||||||
|
*
|
||||||
|
* @param momentumBar: XCRejectionBar instance ...
|
||||||
|
* @param object: XCBullishRejectionObject pointer ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBullishRejectionBar(
|
||||||
|
XCRejectionBar &rejectionBar,
|
||||||
|
XCBullishRejectionObject *&object //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
object = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
rejectionBar.IsValid() &&
|
||||||
|
rejectionBar.IsBullish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
|
long chartID = ChartIdentification();
|
||||||
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
|
//
|
||||||
|
int arrow = BullishRejectionBarArrow();
|
||||||
|
int width = BullishRejectionBarWidth();
|
||||||
|
color crl = BullishRejectionBarColor();
|
||||||
|
|
||||||
|
//
|
||||||
|
object = new XCBullishRejectionObject();
|
||||||
|
result = object.Create(
|
||||||
|
chartID,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
rejectionBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
object.ArrowColor(crl);
|
||||||
|
object.ArrowWidth(width);
|
||||||
|
object.ArrowAnchor(ANCHOR_TOP);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Bearish Rejection Bar Object ...
|
||||||
|
*
|
||||||
|
* @param rejectionBar: XCRejectionBar instance ...
|
||||||
|
* @param object: XCBearishRejectionObject pointer ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CreateBearishRejectionBar(
|
||||||
|
XCRejectionBar &rejectionBar,
|
||||||
|
XCBearishRejectionObject *&object //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
object = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
rejectionBar.IsValid() &&
|
||||||
|
rejectionBar.IsBearish();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string prefix = Prefix();
|
||||||
|
long chartID = ChartIdentification();
|
||||||
|
int window = SubWindowIdentification();
|
||||||
|
|
||||||
|
//
|
||||||
|
int arrow = BearishRejectionBarArrow();
|
||||||
|
int width = BearishRejectionBarWidth();
|
||||||
|
color crl = BearishRejectionBarColor();
|
||||||
|
|
||||||
|
//
|
||||||
|
object = new XCBearishRejectionObject();
|
||||||
|
result = object.Create(
|
||||||
|
chartID,
|
||||||
|
window,
|
||||||
|
arrow,
|
||||||
|
rejectionBar,
|
||||||
|
prefix //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
object.ArrowColor(crl);
|
||||||
|
object.ArrowWidth(width);
|
||||||
|
object.ArrowAnchor(ANCHOR_BOTTOM);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
protected:
|
protected:
|
||||||
//
|
//
|
||||||
@@ -1411,34 +1675,34 @@ class XCPOIDrawer : public XCBase
|
|||||||
SubWindowIdentification(0);
|
SubWindowIdentification(0);
|
||||||
|
|
||||||
//
|
//
|
||||||
SwingLowWidth(2);
|
SwingLowWidth(3);
|
||||||
SwingLowArrow(108);
|
SwingLowArrow(108);
|
||||||
SwingLowColor(clrAqua);
|
SwingLowColor(clrAqua);
|
||||||
|
|
||||||
//
|
//
|
||||||
SwingHighWidth(2);
|
SwingHighWidth(3);
|
||||||
SwingHighArrow(108);
|
SwingHighArrow(108);
|
||||||
SwingHighColor(clrMagenta);
|
SwingHighColor(clrMagenta);
|
||||||
|
|
||||||
//
|
//
|
||||||
BullishMomentumBarWidth(1);
|
BullishMomentumBarWidth(3);
|
||||||
BullishMomentumBarArrow(225);
|
BullishMomentumBarArrow(225);
|
||||||
BullishMomentumBarColor(clrLime);
|
BullishMomentumBarColor(clrAqua);
|
||||||
|
|
||||||
//
|
//
|
||||||
BearishMomentumBarWidth(1);
|
BearishMomentumBarWidth(3);
|
||||||
BearishMomentumBarArrow(226);
|
BearishMomentumBarArrow(226);
|
||||||
BearishMomentumBarColor(clrRed);
|
BearishMomentumBarColor(clrMagenta);
|
||||||
|
|
||||||
//
|
//
|
||||||
BullishRejectionBarWidth(1);
|
BullishRejectionBarWidth(3);
|
||||||
BullishRejectionBarArrow(217);
|
BullishRejectionBarArrow(217);
|
||||||
BullishRejectionBarColor(clrLime);
|
BullishRejectionBarColor(clrAqua);
|
||||||
|
|
||||||
//
|
//
|
||||||
BearishRejectionBarWidth(1);
|
BearishRejectionBarWidth(3);
|
||||||
BearishRejectionBarArrow(218);
|
BearishRejectionBarArrow(218);
|
||||||
BearishRejectionBarColor(clrRed);
|
BearishRejectionBarColor(clrMagenta);
|
||||||
|
|
||||||
//
|
//
|
||||||
SupportZoneFill(true);
|
SupportZoneFill(true);
|
||||||
|
|||||||
@@ -75,18 +75,20 @@ enum ENUM_XPOI_EVENTS
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Trading Days ...
|
// Trading Days ...
|
||||||
X_TRADE_DAY_FIRST_BAR, // Trading Day Start ...
|
X_TRADE_DAY_FIRST_BAR, // Trading Day First Bar ...
|
||||||
X_TRADE_DAY_LAST_BAR, // Trading Day End ...
|
X_TRADE_DAY_LAST_BAR, // Trading Day Last Bar ...
|
||||||
//
|
//
|
||||||
// Session ...
|
// Session ...
|
||||||
X_SESSION_FIRST_BAR, // Session First Bar ...
|
X_SESSION_FIRST_BAR, // Session First Bar ...
|
||||||
X_SESSION_LAST_BAR, // Session Last Bar ...
|
X_SESSION_LAST_BAR, // Session Last Bar ...
|
||||||
//
|
//
|
||||||
// Momentum Bar ...
|
// Momentum Bar ...
|
||||||
X_MOMENTUM_BAR_DETECTED, // Momentum Bar ...
|
X_BULLISH_MOMENTUM_BAR_DETECTED,
|
||||||
|
X_BEARISH_MOMENTUM_BAR_DETECTED,
|
||||||
//
|
//
|
||||||
// Rejection Bar ...
|
// Rejection Bar ...
|
||||||
X_REJECTION_BAR_DETECTED, // Rejection Bar ...
|
X_BULLISH_REJECTION_BAR_DETECTED,
|
||||||
|
X_BEARISH_REJECTION_BAR_DETECTED,
|
||||||
//
|
//
|
||||||
// Swings ...
|
// Swings ...
|
||||||
X_SWING_HIGH_DETECTED,
|
X_SWING_HIGH_DETECTED,
|
||||||
@@ -643,6 +645,35 @@ class XCBarZone : public XCZone
|
|||||||
//
|
//
|
||||||
// Getter(s) / Setter(s) ...
|
// Getter(s) / Setter(s) ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill Bar as XOHCL struct ...
|
||||||
|
*
|
||||||
|
* @param bar: XOHCL instance ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool FillBar(
|
||||||
|
XOHCL &bar //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bar = mBar;
|
||||||
|
result = mBar.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Overrides ...
|
// Overrides ...
|
||||||
|
|
||||||
@@ -1045,7 +1076,7 @@ class XCSwing : public XCBasePOI
|
|||||||
// Getter(s) / Setter(s) ...
|
// Getter(s) / Setter(s) ...
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill Swing Bar as XOHCLstruct ...
|
* Fill Bar as XOHCL struct ...
|
||||||
*
|
*
|
||||||
* @param bar: XOHCL instance ...
|
* @param bar: XOHCL instance ...
|
||||||
*
|
*
|
||||||
@@ -1872,7 +1903,7 @@ class XCRejectionBar : public XCBarZone
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Momentum Bar ...
|
// Momentum Bar ...
|
||||||
class XMomentumBar : public XCBarZone
|
class XCMomentumBar : public XCBarZone
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
public:
|
public:
|
||||||
@@ -1880,13 +1911,13 @@ class XMomentumBar : public XCBarZone
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
void XMomentumBar()
|
void XCMomentumBar()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Deconstructor ...
|
// Deconstructor ...
|
||||||
void ~XMomentumBar()
|
void ~XCMomentumBar()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2491,13 +2522,23 @@ string ToString(ENUM_XPOI_EVENTS value)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
//
|
||||||
case X_MOMENTUM_BAR_DETECTED:
|
case X_BULLISH_MOMENTUM_BAR_DETECTED:
|
||||||
result = "Momentum Bar Detected";
|
result = "Bullish Momentum Bar Detected";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
//
|
||||||
case X_REJECTION_BAR_DETECTED:
|
case X_BEARISH_MOMENTUM_BAR_DETECTED:
|
||||||
result = "Rejection Bar Detected";
|
result = "Bearish Momentum Bar Detected";
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_BULLISH_REJECTION_BAR_DETECTED:
|
||||||
|
result = "Bullish Rejection Bar Detected";
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case X_BEARISH_REJECTION_BAR_DETECTED:
|
||||||
|
result = "Bearish Rejection Bar Detected";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user