Complete Position Drawer and Well Test it ...
This commit is contained in:
@@ -564,6 +564,12 @@ class XCBackTesterEA : public XCBase
|
|||||||
const string comment //
|
const string comment //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
eaPositionDrawer.HandleOnPositionModified(
|
||||||
|
ticket,
|
||||||
|
profit,
|
||||||
|
comment //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -523,7 +523,7 @@ bool XUpdatePosition(
|
|||||||
// Global Chart Objects ...
|
// Global Chart Objects ...
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base Chart Object ...
|
* Base Chart Object ...
|
||||||
**/
|
**/
|
||||||
class XCBaseObject : public CChartObject
|
class XCBaseObject : public CChartObject
|
||||||
{
|
{
|
||||||
@@ -1151,7 +1151,7 @@ class XCSignalObject : public XCBaseObject
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XRR Object ...
|
* XRR Object ...
|
||||||
**/
|
**/
|
||||||
class XCRRObject : public XCSignalObject
|
class XCRRObject : public XCSignalObject
|
||||||
{
|
{
|
||||||
@@ -2115,28 +2115,20 @@ class XCPositionObject : public XCBaseObject
|
|||||||
void ApplyStyle()
|
void ApplyStyle()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
// Validate ...
|
||||||
bool has = HasPosition();
|
bool has = HasPosition();
|
||||||
if (!has)
|
if (!has)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Risk Style ...
|
|
||||||
mRiskBoxObj.BoxColor(riskStyle.clr);
|
|
||||||
mRiskBoxObj.BoxFill(riskStyle.fill);
|
|
||||||
mRiskBoxObj.BoxStyle(riskStyle.style);
|
|
||||||
mRiskBoxObj.BoxWidth(riskStyle.width);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Reward Style ...
|
|
||||||
mRewardBoxObj.BoxColor(rewardStyle.clr);
|
|
||||||
mRewardBoxObj.BoxFill(rewardStyle.fill);
|
|
||||||
mRewardBoxObj.BoxStyle(rewardStyle.style);
|
|
||||||
mRewardBoxObj.BoxWidth(rewardStyle.width);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Position in Profit ...
|
// Check Position in Profit ...
|
||||||
|
bool isLong = IsLong(mPosition.type);
|
||||||
|
bool isRiskFreed =
|
||||||
|
isLong
|
||||||
|
? mPosition.sl > mPosition.entry
|
||||||
|
: mPosition.sl < mPosition.entry;
|
||||||
bool isInProfit = mPosition.profit > 0;
|
bool isInProfit = mPosition.profit > 0;
|
||||||
XPOIStyle _priceStyle;
|
XPOIStyle _priceStyle;
|
||||||
if (isInProfit)
|
if (isInProfit)
|
||||||
@@ -2157,6 +2149,28 @@ class XCPositionObject : public XCBaseObject
|
|||||||
_priceStyle.fill = true;
|
_priceStyle.fill = true;
|
||||||
_priceStyle.style = priceStyle;
|
_priceStyle.style = priceStyle;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Change Risk Style if Risk Freed Position ...
|
||||||
|
if (isRiskFreed) {
|
||||||
|
//
|
||||||
|
riskStyle.fill = true;
|
||||||
|
riskStyle.clr = rewardStyle.clr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Risk Style ...
|
||||||
|
mRiskBoxObj.BoxColor(riskStyle.clr);
|
||||||
|
mRiskBoxObj.BoxFill(riskStyle.fill);
|
||||||
|
mRiskBoxObj.BoxStyle(riskStyle.style);
|
||||||
|
mRiskBoxObj.BoxWidth(riskStyle.width);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reward Style ...
|
||||||
|
mRewardBoxObj.BoxColor(rewardStyle.clr);
|
||||||
|
mRewardBoxObj.BoxFill(rewardStyle.fill);
|
||||||
|
mRewardBoxObj.BoxStyle(rewardStyle.style);
|
||||||
|
mRewardBoxObj.BoxWidth(rewardStyle.width);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Price Style ..
|
// Price Style ..
|
||||||
mPriceBoxObj.BoxColor(_priceStyle.clr);
|
mPriceBoxObj.BoxColor(_priceStyle.clr);
|
||||||
@@ -2323,6 +2337,10 @@ class XCPositionObject : public XCBaseObject
|
|||||||
|
|
||||||
//
|
//
|
||||||
bool isInProfit = mPosition.profit > 0;
|
bool isInProfit = mPosition.profit > 0;
|
||||||
|
bool isRiskFreed =
|
||||||
|
isLong
|
||||||
|
? mPosition.sl > mPosition.entry
|
||||||
|
: mPosition.sl < mPosition.entry;
|
||||||
ENUM_X_DIRECTION iPriceDir = isInProfit
|
ENUM_X_DIRECTION iPriceDir = isInProfit
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
@@ -2342,17 +2360,27 @@ class XCPositionObject : public XCBaseObject
|
|||||||
mRiskBox.at = iAt;
|
mRiskBox.at = iAt;
|
||||||
mRiskBox.lower =
|
mRiskBox.lower =
|
||||||
isLong
|
isLong
|
||||||
|
? isRiskFreed
|
||||||
|
? iEntry
|
||||||
|
: iSL
|
||||||
|
: isRiskFreed
|
||||||
? iSL
|
? iSL
|
||||||
: iEntry;
|
: iEntry;
|
||||||
mRiskBox.upper =
|
mRiskBox.upper =
|
||||||
isLong
|
isLong
|
||||||
|
? isRiskFreed
|
||||||
|
? iSL
|
||||||
|
: iEntry
|
||||||
|
: isRiskFreed
|
||||||
? iEntry
|
? iEntry
|
||||||
: iSL;
|
: iSL;
|
||||||
mRiskBox.from = iFrom;
|
mRiskBox.from = iFrom;
|
||||||
mRiskBox.symbol = iSymbol;
|
mRiskBox.symbol = iSymbol;
|
||||||
mRiskBox.period = iPeriod;
|
mRiskBox.period = iPeriod;
|
||||||
mRiskBox.type = iRiskName;
|
mRiskBox.type = iRiskName;
|
||||||
mRiskBox.dir = X_DIRECTION_BEARISH;
|
mRiskBox.dir = isRiskFreed
|
||||||
|
? X_DIRECTION_BEARISH
|
||||||
|
: X_DIRECTION_BULLISH;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reward Box ...
|
// Reward Box ...
|
||||||
@@ -2379,10 +2407,14 @@ class XCPositionObject : public XCBaseObject
|
|||||||
mPriceBox.lower =
|
mPriceBox.lower =
|
||||||
isLong
|
isLong
|
||||||
? isInProfit
|
? isInProfit
|
||||||
? iEntry
|
? isRiskFreed
|
||||||
|
? iSL
|
||||||
|
: iEntry
|
||||||
: iPrice
|
: iPrice
|
||||||
: isInProfit
|
: isInProfit
|
||||||
? iPrice
|
? isRiskFreed
|
||||||
|
? iSL
|
||||||
|
: iPrice
|
||||||
: iEntry;
|
: iEntry;
|
||||||
mPriceBox.upper =
|
mPriceBox.upper =
|
||||||
isLong
|
isLong
|
||||||
|
|||||||
@@ -126,8 +126,8 @@ class XCPositionDrawer : public XCBase
|
|||||||
//
|
//
|
||||||
// Price Style ...
|
// Price Style ...
|
||||||
priceStyle = STYLE_SOLID;
|
priceStyle = STYLE_SOLID;
|
||||||
inProfitColor = ApplyAlpha(clrAqua, 100);
|
inProfitColor = clrAqua; // ApplyAlpha(clrAqua, 100);
|
||||||
inDrawdownColor = ApplyAlpha(clrMagenta, 100);
|
inDrawdownColor = clrMagenta; // ApplyAlpha(clrMagenta, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -320,6 +320,7 @@ class XCPositionDrawer : public XCBase
|
|||||||
*/
|
*/
|
||||||
void HandleStopLossTriggered(const XDeal &deal)
|
void HandleStopLossTriggered(const XDeal &deal)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
Finalize(deal.positionId);
|
Finalize(deal.positionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -349,6 +350,53 @@ class XCPositionDrawer : public XCBase
|
|||||||
Finalize(ticket);
|
Finalize(ticket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle Position Modified Event ...
|
||||||
|
*
|
||||||
|
* @param ticket: ulong, triggered Positions ticket ...
|
||||||
|
* @param profit: double, Position Profit ...
|
||||||
|
* @param comment: string, Comment ...
|
||||||
|
*/
|
||||||
|
void HandleOnPositionModified(
|
||||||
|
const ulong ticket,
|
||||||
|
const double profit,
|
||||||
|
const string comment //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Position Index ...
|
||||||
|
int index = FindIndex(ticket);
|
||||||
|
bool has = IsValidIndex(index);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Get Position of Objects ...
|
||||||
|
XPosition _position;
|
||||||
|
has = ((XCPositionObject *)positionObjects.At(index)).GetPosition(_position);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Get Position of Trader Instance ...
|
||||||
|
has = trader.GetPosition(
|
||||||
|
ticket,
|
||||||
|
_position //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Update Position ...
|
||||||
|
((XCPositionObject *)positionObjects.At(index)).Update(_position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup Resources ...
|
||||||
|
_position.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Protected ...
|
// Protected ...
|
||||||
protected:
|
protected:
|
||||||
@@ -371,9 +419,9 @@ class XCPositionDrawer : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCPositionObject *iObj = positionObjects.At(index);
|
// XCPositionObject *iObj = positionObjects.At(index);
|
||||||
positionObjects.Delete(index);
|
// positionObjects.Delete(index);
|
||||||
finalizedObjects.Add(iObj);
|
// finalizedObjects.Add(iObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user