This commit is contained in:
2025-02-09 02:18:25 +03:30
parent 59770cbe99
commit 8799d7713d
3 changed files with 274 additions and 259 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ input string eaCloseAllTradesAt = ""; // Enable Close All Trades on Signals on T
// //
// Risk Management ... // Risk Management ...
input group "Risk Management"; input group "Risk Management";
input double eaR2R = 2; // Signallers Risk to Reward Ratio input double eaR2R = 4; // Signallers Risk to Reward Ratio
input double eaVolume = 0; // Static Volume input double eaVolume = 0; // Static Volume
input double eaStaticBalance = 1000; // Static Balance input double eaStaticBalance = 1000; // Static Balance
input double eaBalancePerTrade = 10; // Balance Used in Each Trade input double eaBalancePerTrade = 10; // Balance Used in Each Trade
@@ -1665,6 +1665,7 @@ struct X121SMCStrategyXSupDemOBSSignalConditions
X121SMCStrategyXSupDemOBSSignalConditions mX121SMCXSupDemOBSConditions; X121SMCStrategyXSupDemOBSSignalConditions mX121SMCXSupDemOBSConditions;
X121SMCStrategyXSupDemOBSSignalConditions mX121SMCXSupDemOBSConditionsCollection[]; X121SMCStrategyXSupDemOBSSignalConditions mX121SMCXSupDemOBSConditionsCollection[];
CArrayObj mX121SMCXSupDemOBSObjects; CArrayObj mX121SMCXSupDemOBSObjects;
CArrayObj mX121SMCXSupDemOBSWorkingZoneObjects;
// //
// Extension Functions ... // Extension Functions ...
@@ -2296,6 +2297,14 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
return result; return result;
} }
//
// Re Draw Working Zone ...
RemoveX121SMCXSupDemOBSWorkingZoneDraws();
DrawX121SMCXSupDemOBSWorkingZone(
conditions,
visionCycleHelper.mPOIDrawer //
);
// //
// 3- Checking Price Inside Valid Quarters Based on Trend ... // 3- Checking Price Inside Valid Quarters Based on Trend ...
@@ -2803,12 +2812,6 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
// Now We Have to Wait for Price Inside Box ... // Now We Have to Wait for Price Inside Box ...
//
DrawX121SMCXSupDemOBSConditions(
conditions,
visionCycleHelper.mPOIDrawer //
);
// //
XCFVG *insideFVG = NULL; XCFVG *insideFVG = NULL;
XCOrderBlock *insideOB = NULL; XCOrderBlock *insideOB = NULL;
@@ -3140,6 +3143,10 @@ bool DetectX121SMCXSupDemOBSSignalSetup(
// //
RemoveX121SMCXSupDemOBSDraws(); RemoveX121SMCXSupDemOBSDraws();
DrawX121SMCXSupDemOBSConditions(
conditions,
visionCycleHelper.mPOIDrawer //
);
// //
return result; return result;
@@ -3800,255 +3807,6 @@ void DrawX121SMCXSupDemOBSConditions(
// //
bool isCreated = false; bool isCreated = false;
//
bool hasVisionHighestSupplyZone = conditions.HasVisionHighestSupplyZone();
if (hasVisionHighestSupplyZone)
{
//
XCSupplyZoneObject *ivhSupObj;
isCreated = drawer.CreateSupplyZone(
conditions.visionHighestSupplyZone,
ivhSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSObjects.Add(ivhSupObj);
}
}
//
bool hasConsolidationHighestSupplyZone = conditions.HasConsolidationHighestSupplyZone();
if (hasConsolidationHighestSupplyZone)
{
//
XCSupplyZoneObject *ichSupObj;
isCreated = drawer.CreateSupplyZone(
conditions.consolidationHighestSupplyZone,
ichSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSObjects.Add(ichSupObj);
}
}
//
bool hasVisionLowestDemandZone = conditions.HasVisionLowestDemandZone();
if (hasVisionLowestDemandZone)
{
//
XCDemandZoneObject *ivlSupObj;
isCreated = drawer.CreateDemandZone(
conditions.visionLowestDemandZone,
ivlSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSObjects.Add(ivlSupObj);
}
}
//
bool hasConsolidationLowestDemandZone = conditions.HasConsolidationLowestDemandZone();
if (hasConsolidationLowestDemandZone)
{
//
XCDemandZoneObject *iclSupObj;
isCreated = drawer.CreateDemandZone(
conditions.consolidationLowestDemandZone,
iclSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSObjects.Add(iclSupObj);
}
}
//
bool hasWorkingZone = conditions.workingZone.IsValid();
if (hasWorkingZone)
{
//
string zonePrefix = "X121_WZ_" + conditions.workingZone.symbol + "_" + ToString(conditions.workingZone.period);
string fromStr = ToFormatString(conditions.workingZone.from);
string fromMD5 = ToMD5(fromStr);
//
string upperName = zonePrefix + "_Upper_" + fromMD5;
string lowerName = zonePrefix + "_Lower_" + fromMD5;
string zoneUpperName = zonePrefix + "_ZoneUpper_" + fromMD5;
string zoneLowerName = zonePrefix + "_ZoneLower_" + fromMD5;
//
string q1Name = zonePrefix + "_Q1_" + fromMD5;
string q2Name = zonePrefix + "_Q2_" + fromMD5;
string q3Name = zonePrefix + "_Q3_" + fromMD5;
//
ulong chartID = drawer.ChartIdentification();
int subWindow = drawer.SubWindowIdentification();
//
bool isCreated = false;
//
// Lower ...
CChartObjectHLine *lowerHLine;
lowerHLine = new CChartObjectHLine();
isCreated = lowerHLine.Create(
chartID,
lowerName,
subWindow,
conditions.workingZone.lower //
);
if (isCreated)
{
//
lowerHLine.Color(clrLime);
mX121SMCXSupDemOBSObjects.Add(lowerHLine);
}
//
CChartObjectHLine *upperHLine;
upperHLine = new CChartObjectHLine();
isCreated = upperHLine.Create(
chartID,
upperName,
subWindow,
conditions.workingZone.upper //
);
if (isCreated)
{
//
upperHLine.Color(clrLime);
mX121SMCXSupDemOBSObjects.Add(upperHLine);
}
//
CChartObjectHLine *zoneLowerHLine;
zoneLowerHLine = new CChartObjectHLine();
isCreated = zoneLowerHLine.Create(
chartID,
zoneLowerName,
subWindow,
conditions.workingZone.zoneLower //
);
if (isCreated)
{
//
zoneLowerHLine.Color(clrRed);
mX121SMCXSupDemOBSObjects.Add(zoneLowerHLine);
}
//
CChartObjectHLine *zoneUpperHLine;
zoneUpperHLine = new CChartObjectHLine();
isCreated = zoneUpperHLine.Create(
chartID,
zoneUpperName,
subWindow,
conditions.workingZone.zoneUpper //
);
if (isCreated)
{
//
zoneUpperHLine.Color(clrRed);
mX121SMCXSupDemOBSObjects.Add(zoneUpperHLine);
}
//
CChartObjectHLine *quarter1HLine;
quarter1HLine = new CChartObjectHLine();
isCreated = quarter1HLine.Create(
chartID,
q1Name,
subWindow,
conditions.workingZone.quarter1 //
);
if (isCreated)
{
//
quarter1HLine.Color(clrYellow);
mX121SMCXSupDemOBSObjects.Add(quarter1HLine);
}
//
CChartObjectHLine *quarter2HLine;
quarter2HLine = new CChartObjectHLine();
isCreated = quarter2HLine.Create(
chartID,
q2Name,
subWindow,
conditions.workingZone.quarter2 //
);
if (isCreated)
{
//
quarter2HLine.Color(clrYellow);
mX121SMCXSupDemOBSObjects.Add(quarter2HLine);
}
//
CChartObjectHLine *quarter3HLine;
quarter3HLine = new CChartObjectHLine();
isCreated = quarter3HLine.Create(
chartID,
q3Name,
subWindow,
conditions.workingZone.quarter3 //
);
if (isCreated)
{
//
quarter3HLine.Color(clrYellow);
mX121SMCXSupDemOBSObjects.Add(quarter3HLine);
}
// //
// XCTicksZone *tZone;
// tZone = new XCTicksZone();
// //
// XOHCL fromBar;
// bool isInitedFrom = fromBar.Init(
// conditions.workingZone.symbol,
// conditions.workingZone.period,
// conditions.workingZone.from //
// );
// //
// XOHCL toBar;
// bool isInitedTo = toBar.Init(
// conditions.workingZone.symbol,
// conditions.workingZone.period,
// 1 //
// );
// //
// if (isInitedTo &&
// isInitedFrom)
// {
// //
// bool isZoneInited = tZone.Init(
// fromBar,
// toBar //
// );
// if (isZoneInited)
// {
// //
// XCTicksZoneObject *tZoneObj;
// bool isCreated = drawer.CreateTicksZone(
// tZone,
// tZoneObj //
// );
// if (isCreated)
// {
// mX121SMCXSupDemOBSObjects.Add(tZoneObj);
// }
// }
// }
}
// //
int obFVGsCount = ArraySize(conditions.obFVGs); int obFVGsCount = ArraySize(conditions.obFVGs);
bool hasOBFVGs = IsValidSize(obFVGsCount); bool hasOBFVGs = IsValidSize(obFVGsCount);
@@ -4230,3 +3988,234 @@ void DrawX121SMCXSupDemOBSConditions(
// //
// //
void RemoveX121SMCXSupDemOBSWorkingZoneDraws()
{
mX121SMCXSupDemOBSWorkingZoneObjects.Clear();
}
//
void DrawX121SMCXSupDemOBSWorkingZone(
X121SMCStrategyXSupDemOBSSignalConditions &conditions,
XCPOIDrawer *drawer //
)
{
//
if (drawer == NULL)
{
return;
}
//
bool isCreated = false;
//
bool hasVisionHighestSupplyZone = conditions.HasVisionHighestSupplyZone();
if (hasVisionHighestSupplyZone)
{
//
XCSupplyZoneObject *ivhSupObj;
isCreated = drawer.CreateSupplyZone(
conditions.visionHighestSupplyZone,
ivhSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSWorkingZoneObjects.Add(ivhSupObj);
}
}
//
bool hasConsolidationHighestSupplyZone = conditions.HasConsolidationHighestSupplyZone();
if (hasConsolidationHighestSupplyZone)
{
//
XCSupplyZoneObject *ichSupObj;
isCreated = drawer.CreateSupplyZone(
conditions.consolidationHighestSupplyZone,
ichSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSWorkingZoneObjects.Add(ichSupObj);
}
}
//
bool hasVisionLowestDemandZone = conditions.HasVisionLowestDemandZone();
if (hasVisionLowestDemandZone)
{
//
XCDemandZoneObject *ivlSupObj;
isCreated = drawer.CreateDemandZone(
conditions.visionLowestDemandZone,
ivlSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSWorkingZoneObjects.Add(ivlSupObj);
}
}
//
bool hasConsolidationLowestDemandZone = conditions.HasConsolidationLowestDemandZone();
if (hasConsolidationLowestDemandZone)
{
//
XCDemandZoneObject *iclSupObj;
isCreated = drawer.CreateDemandZone(
conditions.consolidationLowestDemandZone,
iclSupObj //
);
if (isCreated)
{
mX121SMCXSupDemOBSWorkingZoneObjects.Add(iclSupObj);
}
}
//
bool hasWorkingZone = conditions.workingZone.IsValid();
if (hasWorkingZone)
{
//
string zonePrefix = "X121_WZ_" + conditions.workingZone.symbol + "_" + ToString(conditions.workingZone.period);
string fromStr = ToFormatString(conditions.workingZone.from);
string fromMD5 = ToMD5(fromStr);
//
string upperName = zonePrefix + "_Upper_" + fromMD5;
string lowerName = zonePrefix + "_Lower_" + fromMD5;
string zoneUpperName = zonePrefix + "_ZoneUpper_" + fromMD5;
string zoneLowerName = zonePrefix + "_ZoneLower_" + fromMD5;
//
string q1Name = zonePrefix + "_Q1_" + fromMD5;
string q2Name = zonePrefix + "_Q2_" + fromMD5;
string q3Name = zonePrefix + "_Q3_" + fromMD5;
//
ulong chartID = drawer.ChartIdentification();
int subWindow = drawer.SubWindowIdentification();
//
bool isCreated = false;
//
// Lower ...
CChartObjectHLine *lowerHLine;
lowerHLine = new CChartObjectHLine();
isCreated = lowerHLine.Create(
chartID,
lowerName,
subWindow,
conditions.workingZone.lower //
);
if (isCreated)
{
//
lowerHLine.Color(clrLime);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(lowerHLine);
}
//
CChartObjectHLine *upperHLine;
upperHLine = new CChartObjectHLine();
isCreated = upperHLine.Create(
chartID,
upperName,
subWindow,
conditions.workingZone.upper //
);
if (isCreated)
{
//
upperHLine.Color(clrLime);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(upperHLine);
}
//
CChartObjectHLine *zoneLowerHLine;
zoneLowerHLine = new CChartObjectHLine();
isCreated = zoneLowerHLine.Create(
chartID,
zoneLowerName,
subWindow,
conditions.workingZone.zoneLower //
);
if (isCreated)
{
//
zoneLowerHLine.Color(clrRed);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(zoneLowerHLine);
}
//
CChartObjectHLine *zoneUpperHLine;
zoneUpperHLine = new CChartObjectHLine();
isCreated = zoneUpperHLine.Create(
chartID,
zoneUpperName,
subWindow,
conditions.workingZone.zoneUpper //
);
if (isCreated)
{
//
zoneUpperHLine.Color(clrRed);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(zoneUpperHLine);
}
//
CChartObjectHLine *quarter1HLine;
quarter1HLine = new CChartObjectHLine();
isCreated = quarter1HLine.Create(
chartID,
q1Name,
subWindow,
conditions.workingZone.quarter1 //
);
if (isCreated)
{
//
quarter1HLine.Color(clrYellow);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(quarter1HLine);
}
//
CChartObjectHLine *quarter2HLine;
quarter2HLine = new CChartObjectHLine();
isCreated = quarter2HLine.Create(
chartID,
q2Name,
subWindow,
conditions.workingZone.quarter2 //
);
if (isCreated)
{
//
quarter2HLine.Color(clrYellow);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(quarter2HLine);
}
//
CChartObjectHLine *quarter3HLine;
quarter3HLine = new CChartObjectHLine();
isCreated = quarter3HLine.Create(
chartID,
q3Name,
subWindow,
conditions.workingZone.quarter3 //
);
if (isCreated)
{
//
quarter3HLine.Color(clrYellow);
mX121SMCXSupDemOBSWorkingZoneObjects.Add(quarter3HLine);
}
}
}
//
//
//
//
@@ -122,6 +122,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
delete mVerificationCycleHelper; delete mVerificationCycleHelper;
delete mConsolidationCycleHelper; delete mConsolidationCycleHelper;
delete mVisionCycleHelper; delete mVisionCycleHelper;
//
RemoveX121SMCXSupDemOBSDraws();
RemoveX121SMCXSupDemOBSWorkingZoneDraws();
} }
/** /**
@@ -343,6 +347,31 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
// XCSignalObject *iObj; // XCSignalObject *iObj;
// mPOIDrawer.DrawSignal(signal, iObj); // mPOIDrawer.DrawSignal(signal, iObj);
// Print(""); // Print("");
//
if (useXSupDemOBSSignal &&
hasXSupDemOBSSignal)
{
//
// double sR2R = signal.GetRiskRewardRatio();
// double risk = signal.GetRisk();
//
// double tp = signal.tp;
// double target = signal.tp + (risk * sR2R);
//
// signal.tp = target;
// signal.target = tp;
//
signal.trailSL = true;
signal.fullTPLevel = r2r;
signal.partialCloseOnTPLevel = 0;
signal.partialCloseMultiplier = 0;
signal.trailSLStartOnReachTPLevel = 3;
}
} }
// //
@@ -862,9 +891,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
1 // 1 //
); );
//
RemoveX121SMCXSupDemOBSDraws();
// //
// Check Signal Direction ... // Check Signal Direction ...
isBullish = IsBullish(mConditions.dir); isBullish = IsBullish(mConditions.dir);