last ...
This commit is contained in:
@@ -421,6 +421,535 @@ int AddGuard(
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool TestDetectSignal(
|
||||
XCXCAEAHelper *helper,
|
||||
XCXCAEAPOIDrawer *drawer,
|
||||
XBoxZone &box,
|
||||
ENUM_X_DIRECTION &dir,
|
||||
XCAEAConditions &conditions,
|
||||
int barIndex = 0,
|
||||
int loopback = 10 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
int idx = -1;
|
||||
int count = 0;
|
||||
bool has = false;
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
conditions.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
barIndex = NormalizeInt(barIndex, 0);
|
||||
loopback = NormalizeInt(loopback, 5);
|
||||
|
||||
//
|
||||
// Retrieve Some Requirements ...
|
||||
string symbol = helper.GetSymbol();
|
||||
ENUM_TIMEFRAMES period = helper.GetPeriod();
|
||||
double points = GetPoints(symbol);
|
||||
|
||||
//
|
||||
// Retrieve Conditions for Processing ...
|
||||
result = helper.GetConditions(
|
||||
conditions,
|
||||
barIndex,
|
||||
loopback //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
box.Clean();
|
||||
conditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Define IDXses ...
|
||||
int zIDX = barIndex;
|
||||
int cIDX = zIDX + 1;
|
||||
int pIDX = cIDX + 1;
|
||||
int p2IDX = pIDX + 1;
|
||||
int p3IDX = p2IDX + 1;
|
||||
int p4IDX = p3IDX + 1;
|
||||
|
||||
//
|
||||
XOHCL zBar;
|
||||
XOHCL cBar;
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
XOHCL p3Bar;
|
||||
XOHCL p4Bar;
|
||||
result = zBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
zIDX //
|
||||
);
|
||||
result =
|
||||
result &&
|
||||
zBar.GetPreviousBar(cBar);
|
||||
result =
|
||||
result &&
|
||||
cBar.GetPreviousBar(pBar);
|
||||
result =
|
||||
result &&
|
||||
pBar.GetPreviousBar(p2Bar);
|
||||
result =
|
||||
result &&
|
||||
p2Bar.GetPreviousBar(p3Bar);
|
||||
result =
|
||||
result &&
|
||||
p3Bar.GetPreviousBar(p4Bar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
p4Bar.Clean();
|
||||
|
||||
//
|
||||
box.Clean();
|
||||
conditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Bars Conditions ...
|
||||
|
||||
//
|
||||
// Score ...
|
||||
|
||||
//
|
||||
double bullishScore = 0;
|
||||
double bearishScore = 0;
|
||||
conditions.GenerateScore(
|
||||
bullishScore,
|
||||
bearishScore //
|
||||
);
|
||||
|
||||
//
|
||||
bool isScoreBullish =
|
||||
bullishScore > bearishScore;
|
||||
|
||||
//
|
||||
bool isScoreBearish =
|
||||
bearishScore > bullishScore;
|
||||
|
||||
//
|
||||
bool isScoreNeutural = MathAbs(bullishScore - bearishScore) == 0;
|
||||
|
||||
//
|
||||
// Calculating Range Volumes ...
|
||||
|
||||
//
|
||||
double bullishVolume = 0;
|
||||
double bearishVolume = 0;
|
||||
helper.barAnalyser.CalculateRangeVolume(
|
||||
cBar,
|
||||
bullishVolume,
|
||||
bearishVolume,
|
||||
loopback //
|
||||
);
|
||||
|
||||
//
|
||||
bool isVolumeNeutural = MathAbs(bullishVolume - bearishVolume) == 0;
|
||||
|
||||
//
|
||||
// Reading Values ...
|
||||
|
||||
//
|
||||
// PEAK ...
|
||||
double zPeak = conditions.peakBuffer[zIDX];
|
||||
double cPeak = conditions.peakBuffer[cIDX];
|
||||
double pPeak = conditions.peakBuffer[pIDX];
|
||||
double p2Peak = conditions.peakBuffer[p2IDX];
|
||||
double p3Peak = conditions.peakBuffer[p3IDX];
|
||||
double p4Peak = conditions.peakBuffer[p4IDX];
|
||||
|
||||
//
|
||||
// VALE ...
|
||||
double zVale = conditions.valeBuffer[zIDX];
|
||||
double cVale = conditions.valeBuffer[cIDX];
|
||||
double pVale = conditions.valeBuffer[pIDX];
|
||||
double p2Vale = conditions.valeBuffer[p2IDX];
|
||||
double p3Vale = conditions.valeBuffer[p3IDX];
|
||||
double p4Vale = conditions.valeBuffer[p4IDX];
|
||||
|
||||
//
|
||||
// SWING Low ...
|
||||
double zSWL = conditions.swingLowBuffer[zIDX];
|
||||
double cSWL = conditions.swingLowBuffer[cIDX];
|
||||
double pSWL = conditions.swingLowBuffer[pIDX];
|
||||
double p2SWL = conditions.swingLowBuffer[p2IDX];
|
||||
double p3SWL = conditions.swingLowBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// SWING High ...
|
||||
double zSWH = conditions.swingHighBuffer[zIDX];
|
||||
double cSWH = conditions.swingHighBuffer[cIDX];
|
||||
double pSWH = conditions.swingHighBuffer[pIDX];
|
||||
double p2SWH = conditions.swingHighBuffer[p2IDX];
|
||||
double p3SWH = conditions.swingHighBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// SUPPORT ...
|
||||
double zSupport = conditions.supportBuffer[zIDX];
|
||||
double cSupport = conditions.supportBuffer[cIDX];
|
||||
double pSupport = conditions.supportBuffer[pIDX];
|
||||
double p2Support = conditions.supportBuffer[p2IDX];
|
||||
double p3Support = conditions.supportBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// RESISTANCE ...
|
||||
double zResistance = conditions.resistanceBuffer[zIDX];
|
||||
double cResistance = conditions.resistanceBuffer[cIDX];
|
||||
double pResistance = conditions.resistanceBuffer[pIDX];
|
||||
double p2Resistance = conditions.resistanceBuffer[p2IDX];
|
||||
double p3Resistance = conditions.resistanceBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// MAH ...
|
||||
double zMAH = conditions.mahBuffer[zIDX];
|
||||
double cMAH = conditions.mahBuffer[cIDX];
|
||||
double pMAH = conditions.mahBuffer[pIDX];
|
||||
double p2MAH = conditions.mahBuffer[p2IDX];
|
||||
double p3MAH = conditions.mahBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// MAL ...
|
||||
double zMAL = conditions.malBuffer[zIDX];
|
||||
double cMAL = conditions.malBuffer[cIDX];
|
||||
double pMAL = conditions.malBuffer[pIDX];
|
||||
double p2MAL = conditions.malBuffer[p2IDX];
|
||||
double p3MAL = conditions.malBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// MAC ...
|
||||
double zMAC = conditions.macBuffer[zIDX];
|
||||
double cMAC = conditions.macBuffer[cIDX];
|
||||
double pMAC = conditions.macBuffer[pIDX];
|
||||
double p2MAC = conditions.macBuffer[p2IDX];
|
||||
double p3MAC = conditions.macBuffer[p3IDX];
|
||||
|
||||
//
|
||||
// FIBO Level 1 ...
|
||||
double zFib1 = conditions.fiboLevel1Buffer[zIDX];
|
||||
double cFib1 = conditions.fiboLevel1Buffer[cIDX];
|
||||
double pFib1 = conditions.fiboLevel1Buffer[pIDX];
|
||||
double p2Fib1 = conditions.fiboLevel1Buffer[p2IDX];
|
||||
double p3Fib1 = conditions.fiboLevel1Buffer[p3IDX];
|
||||
|
||||
//
|
||||
// FIBO Level 2 ...
|
||||
double zFib2 = conditions.fiboLevel2Buffer[zIDX];
|
||||
double cFib2 = conditions.fiboLevel2Buffer[cIDX];
|
||||
double pFib2 = conditions.fiboLevel2Buffer[pIDX];
|
||||
double p2Fib2 = conditions.fiboLevel2Buffer[p2IDX];
|
||||
double p3Fib2 = conditions.fiboLevel2Buffer[p3IDX];
|
||||
|
||||
//
|
||||
// FIBO Level 3 ...
|
||||
double zFib3 = conditions.fiboLevel3Buffer[zIDX];
|
||||
double cFib3 = conditions.fiboLevel3Buffer[cIDX];
|
||||
double pFib3 = conditions.fiboLevel3Buffer[pIDX];
|
||||
double p2Fib3 = conditions.fiboLevel3Buffer[p2IDX];
|
||||
double p3Fib3 = conditions.fiboLevel3Buffer[p3IDX];
|
||||
|
||||
//
|
||||
// FIBO Level 4 ...
|
||||
double zFib4 = conditions.fiboLevel4Buffer[zIDX];
|
||||
double cFib4 = conditions.fiboLevel4Buffer[cIDX];
|
||||
double pFib4 = conditions.fiboLevel4Buffer[pIDX];
|
||||
double p2Fib4 = conditions.fiboLevel4Buffer[p2IDX];
|
||||
double p3Fib4 = conditions.fiboLevel4Buffer[p3IDX];
|
||||
|
||||
//
|
||||
// FIBO Level 5 ...
|
||||
double zFib5 = conditions.fiboLevel5Buffer[zIDX];
|
||||
double cFib5 = conditions.fiboLevel5Buffer[cIDX];
|
||||
double pFib5 = conditions.fiboLevel5Buffer[pIDX];
|
||||
double p2Fib5 = conditions.fiboLevel5Buffer[p2IDX];
|
||||
double p3Fib5 = conditions.fiboLevel5Buffer[p3IDX];
|
||||
|
||||
//
|
||||
// Create Custom Conditions ...
|
||||
|
||||
//
|
||||
// Bar and Fibo Conditions ...
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
|
||||
//
|
||||
// Strong Reversal ...
|
||||
bool isZBarOnFiboStrongBearish = zBar.low > zFib5;
|
||||
bool isCBarOnFiboStrongBearish = cBar.low > cFib5;
|
||||
bool isPBarOnFiboStrongBearish = pBar.low > pFib5;
|
||||
bool isP2BarOnFiboStrongBearish = p2Bar.low > p2Fib5;
|
||||
bool isP3BarOnFiboStrongBearish = p3Bar.low > p3Fib5;
|
||||
|
||||
//
|
||||
// Golden Zone Reversal ...
|
||||
bool isZBarOnFiboGoldenBearish = zBar.low > zFib3 &&
|
||||
zBar.high < zFib4;
|
||||
bool isCBarOnFiboGoldenBearish = cBar.low > cFib3 &&
|
||||
cBar.high < cFib4;
|
||||
bool isPBarOnFiboGoldenBearish = pBar.low > pFib3 &&
|
||||
pBar.high < pFib4;
|
||||
bool isP2BarOnFiboGoldenBearish = p2Bar.low > p2Fib3 &&
|
||||
p2Bar.high < p2Fib4;
|
||||
bool isP3BarOnFiboGoldenBearish = p3Bar.low > p3Fib3 &&
|
||||
p3Bar.high < p3Fib4;
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
|
||||
//
|
||||
// Strong Reversal ...
|
||||
bool isZBarOnFiboStrongBullish = zBar.high < zFib1;
|
||||
bool isCBarOnFiboStrongBullish = cBar.high < cFib1;
|
||||
bool isPBarOnFiboStrongBullish = pBar.high < pFib1;
|
||||
bool isP2BarOnFiboStrongBullish = p2Bar.high < p2Fib1;
|
||||
bool isP3BarOnFiboStrongBullish = p3Bar.high < p3Fib1;
|
||||
|
||||
//
|
||||
// Golden Zone Reversal ...
|
||||
bool isZBarOnFiboGoldenBullish = zBar.low > zFib2 &&
|
||||
zBar.high < zFib3;
|
||||
bool isCBarOnFiboGoldenBullish = cBar.low > cFib2 &&
|
||||
cBar.high < cFib3;
|
||||
bool isPBarOnFiboGoldenBullish = pBar.low > pFib2 &&
|
||||
pBar.high < pFib3;
|
||||
bool isP2BarOnFiboGoldenBullish = p2Bar.low > p2Fib2 &&
|
||||
p2Bar.high < p2Fib3;
|
||||
bool isP3BarOnFiboGoldenBullish = p3Bar.low > p3Fib2 &&
|
||||
p3Bar.high < p3Fib3;
|
||||
|
||||
//
|
||||
// Score and Volume Conditions ...
|
||||
|
||||
//
|
||||
bool isScoreVolumeNeutural = isScoreNeutural ||
|
||||
isVolumeNeutural;
|
||||
|
||||
//
|
||||
bool isScoreVolumeNeuturalInFiboStrongBullish =
|
||||
isScoreNeutural &&
|
||||
isCBarOnFiboStrongBullish;
|
||||
bool isScoreVolumeNeuturalInFiboGoldenBullish =
|
||||
isScoreNeutural &&
|
||||
isCBarOnFiboGoldenBullish;
|
||||
|
||||
//
|
||||
bool isScoreVolumeNeuturalInFiboStrongBearish =
|
||||
isScoreNeutural &&
|
||||
isCBarOnFiboStrongBearish;
|
||||
bool isScoreVolumeNeuturalInFiboGoldenBearish =
|
||||
isScoreNeutural &&
|
||||
isCBarOnFiboGoldenBearish;
|
||||
|
||||
//
|
||||
bool isScoreVolumeNeuturalBullishPowered =
|
||||
isScoreVolumeNeuturalInFiboStrongBullish ||
|
||||
isScoreVolumeNeuturalInFiboGoldenBullish;
|
||||
bool isScoreVolumeNeuturalBearishPowered =
|
||||
isScoreVolumeNeuturalInFiboStrongBearish ||
|
||||
isScoreVolumeNeuturalInFiboGoldenBearish;
|
||||
|
||||
//
|
||||
// PEAK and VALES ...
|
||||
|
||||
//
|
||||
// PEAK Pivot ...
|
||||
bool isZIsPeakPivot =
|
||||
zPeak == cPeak &&
|
||||
zPeak == zSWH &&
|
||||
zPeak == zResistance &&
|
||||
isZBarOnFiboStrongBearish;
|
||||
bool isCIsPeakPivot =
|
||||
cPeak == pPeak &&
|
||||
cPeak == cSWH &&
|
||||
cPeak == cResistance &&
|
||||
isCBarOnFiboStrongBearish;
|
||||
bool isPIsPeakPivot =
|
||||
pPeak == p2Peak &&
|
||||
pPeak == pSWH &&
|
||||
pPeak == pResistance &&
|
||||
isPBarOnFiboStrongBearish;
|
||||
bool isP2IsPeakPivot =
|
||||
p2Peak == p3Peak &&
|
||||
p2Peak == p2SWH &&
|
||||
p2Peak == p2Resistance &&
|
||||
isP2BarOnFiboStrongBearish;
|
||||
bool isP3IsPeakPivot =
|
||||
p3Peak == p4Peak &&
|
||||
p3Peak == p3SWH &&
|
||||
p3Peak == p3Resistance &&
|
||||
isP3BarOnFiboStrongBearish;
|
||||
|
||||
//
|
||||
// VALE Pivot ...
|
||||
bool isZIsValePivot =
|
||||
zVale == cVale &&
|
||||
zVale == zSWL &&
|
||||
zVale == zSupport &&
|
||||
isZBarOnFiboStrongBullish;
|
||||
bool isCIsValePivot =
|
||||
cVale == pVale &&
|
||||
cVale == cSWL &&
|
||||
cVale == cSupport &&
|
||||
isCBarOnFiboStrongBullish;
|
||||
bool isPIsValePivot =
|
||||
pVale == p2Vale &&
|
||||
pVale == pSWL &&
|
||||
pVale == pSupport &&
|
||||
isPBarOnFiboStrongBullish;
|
||||
bool isP2IsValePivot =
|
||||
p2Vale == p3Vale &&
|
||||
p2Vale == p2SWL &&
|
||||
p2Vale == p2Support &&
|
||||
isP2BarOnFiboStrongBullish;
|
||||
bool isP3IsValePivot =
|
||||
p3Vale == p4Vale &&
|
||||
p3Vale == p3SWL &&
|
||||
p3Vale == p3Support &&
|
||||
isP3BarOnFiboStrongBullish;
|
||||
|
||||
//
|
||||
// Testing Conditions ...
|
||||
|
||||
//
|
||||
// Score and Volume Conditions ...
|
||||
if (isScoreVolumeNeuturalBullishPowered ||
|
||||
isScoreVolumeNeuturalBearishPowered)
|
||||
{
|
||||
//
|
||||
ENUM_X_DIRECTION iScoreVolumeDir =
|
||||
isScoreVolumeNeuturalBullishPowered
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
int timeOffset = (int)cBar.time;
|
||||
string iName = ToString(iScoreVolumeDir) + "_SCVM_" + ToString(timeOffset);
|
||||
color iColor = isScoreVolumeNeuturalBullishPowered
|
||||
? clrAqua
|
||||
: clrMagenta;
|
||||
ENUM_LINE_STYLE iStyle = STYLE_DOT;
|
||||
|
||||
//
|
||||
// CChartObjectVLine *iObj;
|
||||
// iObj = new CChartObjectVLine();
|
||||
// has = iObj.Create(
|
||||
// 0,
|
||||
// iName,
|
||||
// 0,
|
||||
// cBar.time //
|
||||
// );
|
||||
// if (has)
|
||||
// {
|
||||
// //
|
||||
// iObj.Color(iColor);
|
||||
// iObj.Style(iStyle);
|
||||
// }
|
||||
|
||||
// //
|
||||
// Print("Conditions Finder ...");
|
||||
}
|
||||
|
||||
//
|
||||
// PVPivot Conditions ...
|
||||
if (isCIsPeakPivot ||
|
||||
isCIsValePivot)
|
||||
{
|
||||
//
|
||||
ENUM_X_DIRECTION iPVPivotDir =
|
||||
isCIsValePivot
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
int timeOffset = (int)cBar.time;
|
||||
string iName = ToString(iPVPivotDir) + "_PVPVT_" + ToString(timeOffset);
|
||||
color iColor = isCIsValePivot
|
||||
? clrAqua
|
||||
: clrMagenta;
|
||||
ENUM_LINE_STYLE iStyle = STYLE_DOT;
|
||||
|
||||
// //
|
||||
// CChartObjectVLine *iObj;
|
||||
// iObj = new CChartObjectVLine();
|
||||
// has = iObj.Create(
|
||||
// 0,
|
||||
// iName,
|
||||
// 0,
|
||||
// cBar.time //
|
||||
// );
|
||||
// if (has)
|
||||
// {
|
||||
// //
|
||||
// iObj.Color(iColor);
|
||||
// iObj.Style(iStyle);
|
||||
// }
|
||||
|
||||
// //
|
||||
// Print("Conditions Finder ...");
|
||||
}
|
||||
|
||||
//
|
||||
// Summarise Result ...
|
||||
|
||||
//
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
// Do Signal Preparing ...
|
||||
|
||||
//
|
||||
// Check Box is Prepared or Not ...
|
||||
result = box.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
// Cleaning Up ...
|
||||
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
pBar.Clean();
|
||||
p2Bar.Clean();
|
||||
p3Bar.Clean();
|
||||
p4Bar.Clean();
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
box.Clean();
|
||||
conditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Cond 2 ...
|
||||
// - a PV Box is Sweep Liquidity;
|
||||
@@ -431,7 +960,6 @@ int AddGuard(
|
||||
//
|
||||
bool DetectXCAEAConditions(
|
||||
XCXCAEAPOIDrawer *drawer,
|
||||
ENUM_X_DIRECTION trend,
|
||||
XBoxZone &pivots[],
|
||||
XCAEAConditions &conditions,
|
||||
XBoxZone &pivotBox,
|
||||
|
||||
Reference in New Issue
Block a user