last ..
This commit is contained in:
@@ -480,10 +480,12 @@ class XCXCATBEAExpert : public XCBase
|
||||
|
||||
//
|
||||
// Make Available all Requirement Buffers of XCATB indicator ...
|
||||
iSignallerInputs.catbInputs.showPV = true;
|
||||
iSignallerInputs.catbInputs.showKI = true;
|
||||
iSignallerInputs.catbInputs.showATRBand = true;
|
||||
iSignallerInputs.catbInputs.showPVGolden = true;
|
||||
iSignallerInputs.catbInputs.showPV = false;
|
||||
iSignallerInputs.catbInputs.showKI = false;
|
||||
iSignallerInputs.catbInputs.showSar = false;
|
||||
iSignallerInputs.catbInputs.showTrend = false;
|
||||
iSignallerInputs.catbInputs.showATRBand = false;
|
||||
iSignallerInputs.catbInputs.showPVGolden = false;
|
||||
|
||||
//
|
||||
// Signalling Configurations ...
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
// Definitions ...
|
||||
|
||||
//
|
||||
// Configure Signalelrs ...
|
||||
struct XCATBEASignallingConfigs
|
||||
{
|
||||
//
|
||||
@@ -374,6 +375,10 @@ class XCXCATBEASignaller : XCBase
|
||||
barIndex //
|
||||
);
|
||||
|
||||
//
|
||||
// Check Helper Last Changes ...
|
||||
helper.Check(barIndex);
|
||||
|
||||
//
|
||||
// Draw POI(s) ...
|
||||
if (allowDraws)
|
||||
@@ -676,8 +681,7 @@ class XCXCATBEASignaller : XCBase
|
||||
|
||||
//
|
||||
// Validate Vale ...
|
||||
bool isValid = cVale.upper < cTriggerBlock.trigger.lower &&
|
||||
cVale.upper < cInsideTriggerBlock.trigger.lower;
|
||||
bool isValid = cVale.upper < cBar.low;
|
||||
if (isValid)
|
||||
{
|
||||
break;
|
||||
@@ -698,7 +702,11 @@ class XCXCATBEASignaller : XCBase
|
||||
//
|
||||
// Detect Signalling Zone ...
|
||||
result = DetectSignalZone(
|
||||
cPeak,
|
||||
cVale,
|
||||
helper,
|
||||
drawer,
|
||||
detector,
|
||||
barAnalyser,
|
||||
mConditions.conditions,
|
||||
mConditions.pivotZone,
|
||||
@@ -1879,8 +1887,18 @@ class XCXCATBEASignaller : XCBase
|
||||
|
||||
//
|
||||
// Configure ...
|
||||
|
||||
//
|
||||
detector.detectPeakPivots = true;
|
||||
detector.detectValePivots = true;
|
||||
|
||||
//
|
||||
detector.detectMTBullishPivots = true;
|
||||
detector.detectMTBearishPivots = true;
|
||||
|
||||
//
|
||||
detector.detectOBBullishPivots = true;
|
||||
detector.detectOBBearishPivots = true;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1926,4 +1944,6 @@ class XCXCATBEASignaller : XCBase
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
};
|
||||
|
||||
//
|
||||
File diff suppressed because it is too large
Load Diff
@@ -84,6 +84,10 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
// Drawers ...
|
||||
bool drawPeakPivots;
|
||||
bool drawValePivots;
|
||||
bool drawMTBullishPivots;
|
||||
bool drawMTBearishPivots;
|
||||
bool drawOBBullishPivots;
|
||||
bool drawOBBearishPivots;
|
||||
|
||||
//
|
||||
// Styling ...
|
||||
@@ -96,6 +100,14 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
XCATBPivotStyle peakPivotStyle;
|
||||
XCATBPivotStyle valePivotStyle;
|
||||
|
||||
//
|
||||
XCATBPivotStyle mtBullishPivotStyle;
|
||||
XCATBPivotStyle mtBearishPivotStyle;
|
||||
|
||||
//
|
||||
XCATBPivotStyle obBullishPivotStyle;
|
||||
XCATBPivotStyle obBearishPivotStyle;
|
||||
|
||||
//
|
||||
// Constructors ...
|
||||
XCXCATBEAPOIDrawer(
|
||||
@@ -138,6 +150,10 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
// Drawing ...
|
||||
drawPeakPivots = false;
|
||||
drawValePivots = false;
|
||||
drawMTBullishPivots = false;
|
||||
drawMTBearishPivots = false;
|
||||
drawOBBullishPivots = false;
|
||||
drawOBBearishPivots = false;
|
||||
|
||||
//
|
||||
// Styling ...
|
||||
@@ -161,6 +177,16 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
// PV ...
|
||||
peakPivotStyle = defaultBearishStyle;
|
||||
valePivotStyle = defaultBullishStyle;
|
||||
|
||||
//
|
||||
// MT ...
|
||||
mtBullishPivotStyle = defaultBearishStyle;
|
||||
mtBearishPivotStyle = defaultBullishStyle;
|
||||
|
||||
//
|
||||
// OB ...
|
||||
obBullishPivotStyle = defaultBearishStyle;
|
||||
obBearishPivotStyle = defaultBullishStyle;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -170,6 +196,16 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
// PV ...
|
||||
DrawPeakPivots(to);
|
||||
DrawValePivots(to);
|
||||
|
||||
//
|
||||
// MT ...
|
||||
DrawMTBullishPivots(to);
|
||||
DrawMTBearishPivots(to);
|
||||
|
||||
//
|
||||
// OB ...
|
||||
DrawOBBullishPivots(to);
|
||||
DrawOBBearishPivots(to);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -226,7 +262,7 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
switch (iType)
|
||||
{
|
||||
//
|
||||
case XCA_PEAK:
|
||||
case XCATB_PEAK:
|
||||
//
|
||||
DrawPeakPivot(
|
||||
box,
|
||||
@@ -235,13 +271,49 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
break;
|
||||
|
||||
//
|
||||
case XCA_VALE:
|
||||
case XCATB_VALE:
|
||||
//
|
||||
DrawValePivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATB_BULLISH_MT:
|
||||
//
|
||||
DrawMTBullishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATB_BEARISH_MT:
|
||||
//
|
||||
DrawMTBearishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATB_BULLISH_OB:
|
||||
//
|
||||
DrawOBBullishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATB_BEARISH_OB:
|
||||
//
|
||||
DrawOBBearishPivot(
|
||||
box,
|
||||
to //
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
@@ -370,12 +442,20 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
// Cleanup Styles ...
|
||||
peakPivotStyle.Clean();
|
||||
valePivotStyle.Clean();
|
||||
mtBullishPivotStyle.Clean();
|
||||
mtBearishPivotStyle.Clean();
|
||||
obBullishPivotStyle.Clean();
|
||||
obBearishPivotStyle.Clean();
|
||||
|
||||
//
|
||||
// Cleanup Pivot Objects Holder ...
|
||||
mObjects.Clear();
|
||||
mPeakPivotObjects.Clear();
|
||||
mValePivotObjects.Clear();
|
||||
mMTBullishPivotObjects.Clear();
|
||||
mMTBearishPivotObjects.Clear();
|
||||
mOBBullishPivotObjects.Clear();
|
||||
mOBBearishPivotObjects.Clear();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -451,6 +531,146 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void DrawMTBullishPivots(datetime to = NULL)
|
||||
{
|
||||
//
|
||||
bool has = drawMTBullishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = detector.HasMTBullishPivots();
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = detector.CountMTBullishPivots();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = detector.mtBullishPivots[i];
|
||||
|
||||
//
|
||||
DrawMTBullishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void DrawMTBearishPivots(datetime to = NULL)
|
||||
{
|
||||
//
|
||||
bool has = drawMTBearishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = detector.HasMTBearishPivots();
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = detector.CountMTBearishPivots();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = detector.mtBearishPivots[i];
|
||||
|
||||
//
|
||||
DrawMTBearishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void DrawOBBullishPivots(datetime to = NULL)
|
||||
{
|
||||
//
|
||||
bool has = drawOBBullishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = detector.HasOBBullishPivots();
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = detector.CountOBBullishPivots();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = detector.obBullishPivots[i];
|
||||
|
||||
//
|
||||
DrawOBBullishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
void DrawOBBearishPivots(datetime to = NULL)
|
||||
{
|
||||
//
|
||||
bool has = drawOBBearishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = detector.HasOBBearishPivots();
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = detector.CountOBBearishPivots();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XBoxZone iBox = detector.obBearishPivots[i];
|
||||
|
||||
//
|
||||
DrawOBBearishPivot(
|
||||
iBox,
|
||||
to //
|
||||
);
|
||||
|
||||
//
|
||||
iBox.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// One Item Drawers ...
|
||||
|
||||
@@ -469,8 +689,8 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCA_PEAK) &&
|
||||
item.dir == GetDirection(XCA_PEAK);
|
||||
item.type == GetBoxType(XCATB_PEAK) &&
|
||||
item.dir == GetDirection(XCATB_PEAK);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
@@ -522,8 +742,8 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCA_VALE) &&
|
||||
item.dir == GetDirection(XCA_VALE);
|
||||
item.type == GetBoxType(XCATB_VALE) &&
|
||||
item.dir == GetDirection(XCATB_VALE);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
@@ -560,6 +780,218 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
ZeroMemory(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
void DrawMTBullishPivot(
|
||||
XBoxZone &item,
|
||||
datetime to = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool has = drawMTBullishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCATB_BULLISH_MT) &&
|
||||
item.dir == GetDirection(XCATB_BULLISH_MT);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
bool canUpdateTo = IsValid(to);
|
||||
if (canUpdateTo)
|
||||
{
|
||||
item.to = to;
|
||||
}
|
||||
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
has = drawer.DrawBox(
|
||||
item,
|
||||
iObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
// Style Object ...
|
||||
ApplyPivotStyle(
|
||||
iObj,
|
||||
mtBullishPivotStyle //
|
||||
);
|
||||
|
||||
//
|
||||
// Store Object ...
|
||||
mMTBullishPivotObjects.Add(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
void DrawMTBearishPivot(
|
||||
XBoxZone &item,
|
||||
datetime to = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool has = drawMTBearishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCATB_BEARISH_MT) &&
|
||||
item.dir == GetDirection(XCATB_BEARISH_MT);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
bool canUpdateTo = IsValid(to);
|
||||
if (canUpdateTo)
|
||||
{
|
||||
item.to = to;
|
||||
}
|
||||
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
has = drawer.DrawBox(
|
||||
item,
|
||||
iObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
// Style Object ...
|
||||
ApplyPivotStyle(
|
||||
iObj,
|
||||
mtBearishPivotStyle //
|
||||
);
|
||||
|
||||
//
|
||||
// Store Object ...
|
||||
mMTBearishPivotObjects.Add(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
void DrawOBBullishPivot(
|
||||
XBoxZone &item,
|
||||
datetime to = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool has = drawOBBullishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCATB_BULLISH_OB) &&
|
||||
item.dir == GetDirection(XCATB_BULLISH_OB);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
bool canUpdateTo = IsValid(to);
|
||||
if (canUpdateTo)
|
||||
{
|
||||
item.to = to;
|
||||
}
|
||||
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
has = drawer.DrawBox(
|
||||
item,
|
||||
iObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
// Style Object ...
|
||||
ApplyPivotStyle(
|
||||
iObj,
|
||||
obBullishPivotStyle //
|
||||
);
|
||||
|
||||
//
|
||||
// Store Object ...
|
||||
mOBBullishPivotObjects.Add(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
void DrawOBBearishPivot(
|
||||
XBoxZone &item,
|
||||
datetime to = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool has = drawOBBearishPivots;
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
has = item.IsValid() &&
|
||||
item.type == GetBoxType(XCATB_BEARISH_OB) &&
|
||||
item.dir == GetDirection(XCATB_BEARISH_OB);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
bool canUpdateTo = IsValid(to);
|
||||
if (canUpdateTo)
|
||||
{
|
||||
item.to = to;
|
||||
}
|
||||
|
||||
//
|
||||
XCBoxObject *iObj;
|
||||
has = drawer.DrawBox(
|
||||
item,
|
||||
iObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
// Style Object ...
|
||||
ApplyPivotStyle(
|
||||
iObj,
|
||||
obBearishPivotStyle //
|
||||
);
|
||||
|
||||
//
|
||||
// Store Object ...
|
||||
mOBBearishPivotObjects.Add(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
ZeroMemory(iObj);
|
||||
}
|
||||
|
||||
//
|
||||
// Protected ...
|
||||
protected:
|
||||
@@ -590,7 +1022,7 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
//
|
||||
// Props ...
|
||||
XCXCATBEAPOIDetector *detector;
|
||||
|
||||
|
||||
//
|
||||
CArrayObj mObjects;
|
||||
|
||||
@@ -598,6 +1030,14 @@ class XCXCATBEAPOIDrawer : public XCBase
|
||||
CArrayObj mPeakPivotObjects;
|
||||
CArrayObj mValePivotObjects;
|
||||
|
||||
//
|
||||
CArrayObj mMTBullishPivotObjects;
|
||||
CArrayObj mMTBearishPivotObjects;
|
||||
|
||||
//
|
||||
CArrayObj mOBBullishPivotObjects;
|
||||
CArrayObj mOBBearishPivotObjects;
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
@@ -78,6 +78,860 @@ string ToString(ENUM_XCATBEA_TRADE_FINALIZATION value)
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Position Selecting ...
|
||||
enum ENUM_XCATBEA_POSITION_SELECT_TYPES
|
||||
{
|
||||
XCATBEA_POSITION_SELECT_NONE = 0, // None
|
||||
XCATBEA_POSITION_SELECT_ALL = 1, // All
|
||||
XCATBEA_POSITION_SELECT_IN_PROFITS = 2, // In Profit Positions
|
||||
XCATBEA_POSITION_SELECT_IN_DRAWDOWNS = 3, // In Drawdown Positions
|
||||
XCATBEA_POSITION_SELECT_OLDEST = 4, // Oldest Position
|
||||
XCATBEA_POSITION_SELECT_YOUNGEST = 5, // Youngest Position
|
||||
XCATBEA_POSITION_SELECT_IN_PROFITS_OLDEST = 6, // In Profit Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_IN_PROFITS_YOUNGEST = 7, // In Profit Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_IN_PROFITS_MIN = 8, // Minimum Profitable Position
|
||||
XCATBEA_POSITION_SELECT_IN_PROFITS_MAX = 9, // Maximum Profitable Position
|
||||
XCATBEA_POSITION_SELECT_IN_DRAWDOWN_OLDEST = 10, // In Drawdown Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_IN_DRAWDOWN_YOUNGEST = 11, // In Drawdown Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_IN_DRAWDOWN_MIN = 12, // Minimum in Drawdown Position
|
||||
XCATBEA_POSITION_SELECT_IN_DRAWDOWN_MAX = 13, // Maximum in Drawdown Position
|
||||
XCATBEA_POSITION_SELECT_SAMES = 14, // Same Type Positions
|
||||
XCATBEA_POSITION_SELECT_SAMES_OLDEST = 15, // Same Type Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_SAMES_YOUNGEST = 16, // Same Type Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS = 17, // Opposit Type Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_OLDEST = 18, // Opposit Type Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_YOUNGEST = 19, // Opposit Type Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_PROFITS = 20, // Same Type In Profit Positions
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_OLDEST = 21, // Same Type In Profit Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_YOUNGEST = 22, // Same Type In Profit Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_MIN = 23, // Minimum Profitable of Same Type Positions
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_MAX = 24, // Maximum Profitable of Same Type Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS = 25, // Opposit Type In Profit Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_OLDEST = 26, // Opposit Type In Profit Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_YOUNGEST = 27, // Opposit Type In Profit Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_MIN = 28, // Minimum Profitable of Opposit Type Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_MAX = 29, // Maximum Profitable of Opposit Type Positions
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWNS = 30, // Same Type In Deawdown Positions
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_OLDEST = 31, // Same Type In Deawdown Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_YOUNGEST = 32, // Same Type In Deawdown Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_MIN = 33, // Minimum In Drawdown of Same Type Positions
|
||||
XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_MAX = 34, // Maximum In Drawdown of Same Type Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWNS = 35, // Opposit Type In Deawdown Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_OLDEST = 36, // Opposit Type In Deawdown Positions Oldest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_YOUNGEST = 37, // Opposit Type In Deawdown Positions Youngest one
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_MIN = 38, // Minimum In Drawdown of Opposit Type Positions
|
||||
XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_MAX = 39, // Maximum In Drawdown of Opposit Type Positions
|
||||
};
|
||||
|
||||
//
|
||||
bool IsValid(ENUM_XCATBEA_POSITION_SELECT_TYPES value)
|
||||
{
|
||||
return value != XCATBEA_POSITION_SELECT_NONE;
|
||||
}
|
||||
|
||||
//
|
||||
string ToString(ENUM_XCATBEA_POSITION_SELECT_TYPES value)
|
||||
{
|
||||
return EnumToString(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Select Specified Position's Related Position(s)
|
||||
* for Protecting ...
|
||||
*
|
||||
* @param selecteds: XPosition instance reference Collection, for Holding Selected Positions ...
|
||||
* @param positions: XPosition instance reference Collection, All available source Positions ...
|
||||
* @param forType: ENUM_X_POSITION_TYPES member, Spcified Position Type to Select for it ...
|
||||
* @param selectType: ENUM_XCATBEA_POSITION_SELECT_TYPES member, Specified Positions Selecting Senario ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool SelectPosition(
|
||||
XPosition &selecteds[],
|
||||
XPosition &positions[],
|
||||
ENUM_X_POSITION_TYPES forType,
|
||||
ENUM_XCATBEA_POSITION_SELECT_TYPES selectType //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Normalize Args ...
|
||||
Clean(selecteds);
|
||||
|
||||
//
|
||||
// Validate Args ...
|
||||
result =
|
||||
IsValid(forType) &&
|
||||
HasChild(positions) &&
|
||||
IsValid(selectType);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Extract Separate Type of Positions ...
|
||||
|
||||
//
|
||||
int idx = -1;
|
||||
bool has = false;
|
||||
XPosition iPosition;
|
||||
|
||||
//
|
||||
bool isLong = IsLong(forType);
|
||||
bool isShort = IsShort(forType);
|
||||
int count = ArraySize(positions);
|
||||
|
||||
//
|
||||
XPosition samePositions[];
|
||||
XPosition oppositPositions[];
|
||||
XPosition inProfitPositions[];
|
||||
XPosition inDrawdownPositions[];
|
||||
XPosition sameInProfitPositions[];
|
||||
XPosition sameInDrawdownPositions[];
|
||||
XPosition oppositInProfitPositions[];
|
||||
XPosition oppositInDrawdownPositions[];
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
// Select Indexed Position ...
|
||||
iPosition = positions[i];
|
||||
|
||||
//
|
||||
bool isIPosLong = IsLong(iPosition.type);
|
||||
bool isIPosShort = IsShort(iPosition.type);
|
||||
|
||||
//
|
||||
// Select if Same Type ...
|
||||
bool isSame =
|
||||
(isLong && isIPosLong) ||
|
||||
(isShort && isIPosShort);
|
||||
if (isSame)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
samePositions //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Select if Opposit Type ...
|
||||
bool isOpposit =
|
||||
(isLong && isIPosShort) ||
|
||||
(isShort && isIPosLong);
|
||||
if (isOpposit)
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
oppositPositions //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
iPosition.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Filling Other Requirement Collections ...
|
||||
|
||||
//
|
||||
ExtractInProfitPositions(
|
||||
positions,
|
||||
inProfitPositions //
|
||||
);
|
||||
|
||||
//
|
||||
ExtractInProfitPositions(
|
||||
samePositions,
|
||||
sameInProfitPositions //
|
||||
);
|
||||
|
||||
//
|
||||
ExtractInProfitPositions(
|
||||
oppositPositions,
|
||||
oppositInProfitPositions //
|
||||
);
|
||||
|
||||
//
|
||||
ExtractInDrawdownPositions(
|
||||
positions,
|
||||
inDrawdownPositions //
|
||||
);
|
||||
|
||||
//
|
||||
ExtractInDrawdownPositions(
|
||||
samePositions,
|
||||
sameInDrawdownPositions //
|
||||
);
|
||||
|
||||
//
|
||||
ExtractInDrawdownPositions(
|
||||
oppositPositions,
|
||||
oppositInDrawdownPositions //
|
||||
);
|
||||
|
||||
//
|
||||
// Implement Selection Senario ...
|
||||
switch (selectType)
|
||||
{
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_ALL:
|
||||
//
|
||||
Copy(
|
||||
positions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_PROFITS:
|
||||
//
|
||||
Copy(
|
||||
inProfitPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_DRAWDOWNS:
|
||||
//
|
||||
Copy(
|
||||
inDrawdownPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
positions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
positions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_PROFITS_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
inProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_PROFITS_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
inProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_PROFITS_MIN:
|
||||
//
|
||||
idx = FindMinProfitIndex(inProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = inProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_PROFITS_MAX:
|
||||
//
|
||||
idx = FindMaxProfitIndex(inProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = inProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_DRAWDOWN_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
inDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_DRAWDOWN_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
inDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_DRAWDOWN_MIN:
|
||||
//
|
||||
idx = FindMinDrawdownIndex(inDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = inDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_IN_DRAWDOWN_MAX:
|
||||
//
|
||||
idx = FindMaxDrawdownIndex(inDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = inDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAMES:
|
||||
//
|
||||
Copy(
|
||||
samePositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAMES_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
samePositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAMES_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
samePositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS:
|
||||
//
|
||||
Copy(
|
||||
oppositPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
oppositPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
oppositPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_PROFITS:
|
||||
//
|
||||
Copy(
|
||||
sameInProfitPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
sameInProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
sameInProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_MIN:
|
||||
//
|
||||
idx = FindMinProfitIndex(sameInProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = sameInProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_PROFITS_MAX:
|
||||
//
|
||||
idx = FindMaxProfitIndex(sameInProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = sameInProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS:
|
||||
//
|
||||
Copy(
|
||||
oppositInProfitPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
oppositInProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
oppositInProfitPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_MIN:
|
||||
//
|
||||
idx = FindMinProfitIndex(oppositInProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = oppositInProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSIT_IN_PROFITS_MAX:
|
||||
//
|
||||
idx = FindMaxProfitIndex(oppositInProfitPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = oppositInProfitPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWNS:
|
||||
//
|
||||
Copy(
|
||||
sameInDrawdownPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
sameInDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
sameInDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_MIN:
|
||||
//
|
||||
idx = FindMinDrawdownIndex(sameInDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = sameInDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_SAME_IN_DRAWDOWN_MAX:
|
||||
//
|
||||
idx = FindMaxDrawdownIndex(sameInDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = sameInDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWNS:
|
||||
//
|
||||
Copy(
|
||||
oppositInDrawdownPositions,
|
||||
selecteds //
|
||||
);
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_OLDEST:
|
||||
//
|
||||
GetOldest(
|
||||
iPosition,
|
||||
oppositInDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_YOUNGEST:
|
||||
//
|
||||
GetYoungest(
|
||||
iPosition,
|
||||
oppositInDrawdownPositions //
|
||||
);
|
||||
if (iPosition.IsValid())
|
||||
{
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_MIN:
|
||||
//
|
||||
idx = FindMinDrawdownIndex(oppositInDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = oppositInDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
case XCATBEA_POSITION_SELECT_OPPOSITS_IN_DRAWDOWN_MAX:
|
||||
//
|
||||
idx = FindMaxDrawdownIndex(oppositInDrawdownPositions);
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
//
|
||||
iPosition = oppositInDrawdownPositions[idx];
|
||||
|
||||
//
|
||||
AddRef(
|
||||
iPosition,
|
||||
selecteds //
|
||||
);
|
||||
}
|
||||
iPosition.Clean();
|
||||
break;
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Result ...
|
||||
result = HasChild(selecteds);
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
Clean(selecteds);
|
||||
}
|
||||
|
||||
//
|
||||
Clean(samePositions);
|
||||
Clean(oppositPositions);
|
||||
Clean(inProfitPositions);
|
||||
Clean(inDrawdownPositions);
|
||||
Clean(sameInProfitPositions);
|
||||
Clean(sameInDrawdownPositions);
|
||||
Clean(oppositInProfitPositions);
|
||||
Clean(oppositInDrawdownPositions);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
struct XCATBEASymbolInfo
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user