last works ...

adding some tools to ch helper classes ...
This commit is contained in:
2024-07-26 03:36:40 +03:30
parent 35d814fc9c
commit fc9bca9c37
6 changed files with 1878 additions and 77 deletions
+876 -15
View File
@@ -98,11 +98,12 @@ struct XCHHKInputs
//
// Presentation ...
bool showCurrent; // Show Current Cycle
bool showShort; // Show Short Cycle
bool showMedium; // Show Medium Cycle
bool showLong; // Show Long Cycle
bool showHind; // Show Hind Cycle
bool ignoreShadows; // Ignore Bar Shadows
bool showCurrent; // Show Current Cycle
bool showShort; // Show Short Cycle
bool showMedium; // Show Medium Cycle
bool showLong; // Show Long Cycle
bool showHind; // Show Hind Cycle
//
// Constructor(s) ...
@@ -133,6 +134,7 @@ struct XCHHKInputs
hcPeriod = NULL;
//
ignoreShadows = false;
showCurrent = false;
showShort = false;
showMedium = false;
@@ -158,6 +160,7 @@ struct XCHHKInputs
hcPeriod = NULL;
//
ignoreShadows = false;
showCurrent = true;
showShort = true;
showMedium = true;
@@ -790,6 +793,7 @@ public:
//
// Presentation ...
"",
mInputs.ignoreShadows,
mInputs.showCurrent,
mInputs.showShort,
mInputs.showMedium,
@@ -2453,6 +2457,863 @@ public:
return result;
}
//
// Tools ...
//
double GetCyclesMaxHigh(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
XOHCL iBar;
bool isBarInited = false;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
isBarInited = CAsOHCL(
iBar,
barIndex //
);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
isBarInited = SAsOHCL(
iBar,
barIndex //
);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
isBarInited = MAsOHCL(
iBar,
barIndex //
);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
isBarInited = LAsOHCL(
iBar,
barIndex //
);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
isBarInited = HAsOHCL(
iBar,
barIndex //
);
break;
}
//
if (isBarInited)
{
//
Add(
iBar.high,
values //
);
}
}
//
result = GetMax(values);
//
return result;
}
//
double GetCyclesMinHigh(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
XOHCL iBar;
bool isBarInited = false;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
isBarInited = CAsOHCL(
iBar,
barIndex //
);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
isBarInited = SAsOHCL(
iBar,
barIndex //
);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
isBarInited = MAsOHCL(
iBar,
barIndex //
);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
isBarInited = LAsOHCL(
iBar,
barIndex //
);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
isBarInited = HAsOHCL(
iBar,
barIndex //
);
break;
}
//
if (isBarInited)
{
//
Add(
iBar.high,
values //
);
}
}
//
result = GetMin(values);
//
return result;
}
//
double GetCyclesMaxLow(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
XOHCL iBar;
bool isBarInited = false;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
isBarInited = CAsOHCL(
iBar,
barIndex //
);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
isBarInited = SAsOHCL(
iBar,
barIndex //
);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
isBarInited = MAsOHCL(
iBar,
barIndex //
);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
isBarInited = LAsOHCL(
iBar,
barIndex //
);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
isBarInited = HAsOHCL(
iBar,
barIndex //
);
break;
}
//
if (isBarInited)
{
//
Add(
iBar.low,
values //
);
}
}
//
result = GetMax(values);
//
return result;
}
//
double GetCyclesMinLow(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
XOHCL iBar;
bool isBarInited = false;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
isBarInited = CAsOHCL(
iBar,
barIndex //
);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
isBarInited = SAsOHCL(
iBar,
barIndex //
);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
isBarInited = MAsOHCL(
iBar,
barIndex //
);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
isBarInited = LAsOHCL(
iBar,
barIndex //
);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
isBarInited = HAsOHCL(
iBar,
barIndex //
);
break;
}
//
if (isBarInited)
{
//
Add(
iBar.low,
values //
);
}
}
//
result = GetMin(values);
//
return result;
}
//
// Calculate Bullish Power ...
double GetBullishPower(
int barIndex // Bar Index
)
{
//
double result = 0;
//
XOHCL cBar;
bool isInited = CAsOHCL(
cBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (cBar.IsBullish())
{
result += cBar.GetBody();
}
//
XOHCL sBar;
isInited = SAsOHCL(
sBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (sBar.IsBullish())
{
result += sBar.GetBody();
}
//
XOHCL mBar;
isInited = MAsOHCL(
mBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (mBar.IsBullish())
{
result += mBar.GetBody();
}
//
XOHCL lBar;
isInited = LAsOHCL(
lBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (lBar.IsBullish())
{
result += lBar.GetBody();
}
//
XOHCL hBar;
isInited = HAsOHCL(
hBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (hBar.IsBullish())
{
result += hBar.GetBody();
}
//
return result;
}
//
// Calculate Bearish Power ...
double GetBearishPower(
int barIndex // Bar Index
)
{
//
double result = 0;
//
XOHCL cBar;
bool isInited = CAsOHCL(
cBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (cBar.IsBearish())
{
result += cBar.GetBody();
}
//
XOHCL sBar;
isInited = SAsOHCL(
sBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (sBar.IsBearish())
{
result += sBar.GetBody();
}
//
XOHCL mBar;
isInited = MAsOHCL(
mBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (mBar.IsBearish())
{
result += mBar.GetBody();
}
//
XOHCL lBar;
isInited = LAsOHCL(
lBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (lBar.IsBearish())
{
result += lBar.GetBody();
}
//
XOHCL hBar;
isInited = HAsOHCL(
hBar,
barIndex //
);
if (!isInited)
{
return result;
}
//
if (hBar.IsBearish())
{
result += hBar.GetBody();
}
//
return result;
}
//
// Check Bullish Power is Up ...
bool HasBullishPower(
int barIndex // Bar Index
)
{
//
bool result = false;
//
double bullishPower = GetBullishPower(barIndex);
double bearishPower = GetBearishPower(barIndex);
//
result =
//
bearishPower >= 0 &&
bullishPower > bearishPower
//
;
//
return result;
}
//
// Check Bearish Power is Up ...
bool HasBearishPower(
int barIndex // Bar Index
)
{
//
bool result = false;
//
double bullishPower = GetBullishPower(barIndex);
double bearishPower = GetBearishPower(barIndex);
//
result =
//
bullishPower >= 0 &&
bearishPower > bullishPower
//
;
//
return result;
}
//
// Check Bullish Power Increasing ...
bool IsBullishPowerIncreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBullishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBullishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower > iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower > lastPower
//
;
}
//
return result;
}
//
// Check Bullish Power Decreasing ...
bool IsBullishPowerDecreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBullishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBullishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower < iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower < lastPower
//
;
}
//
return result;
}
//
// Check Bearish Power Increasing ...
bool IsBearishPowerIncreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBearishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBearishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower > iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower > lastPower
//
;
}
//
return result;
}
//
// Check Bearish Power Decreasing ...
bool IsBearishPowerDecreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBearishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBearishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower < iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower < lastPower
//
;
}
//
return result;
}
//
// Conditions ...
@@ -2569,9 +3430,9 @@ public:
//
bool isCSwitchedToBullish = isCBullish &&
!isCBullishPrev;
!isCBullishPrev;
bool isCSwitchedToBearish = isCBearish &&
!isCBearishPrev;
!isCBearishPrev;
//
bool isCloseOverCHigh = cBar.close > conditions.cBars[cIndex].high;
@@ -2600,9 +3461,9 @@ public:
//
bool isSSwitchedToBullish = isSBullish &&
!isSBullishPrev;
!isSBullishPrev;
bool isSSwitchedToBearish = isSBearish &&
!isSBearishPrev;
!isSBearishPrev;
//
bool isCloseOverSHigh = cBar.close > conditions.sBars[cIndex].high;
@@ -2631,9 +3492,9 @@ public:
//
bool isMSwitchedToBullish = isMBullish &&
!isMBullishPrev;
!isMBullishPrev;
bool isMSwitchedToBearish = isMBearish &&
!isMBearishPrev;
!isMBearishPrev;
//
bool isCloseOverMHigh = cBar.close > conditions.mBars[cIndex].high;
@@ -2662,9 +3523,9 @@ public:
//
bool isLSwitchedToBullish = isLBullish &&
!isLBullishPrev;
!isLBullishPrev;
bool isLSwitchedToBearish = isLBearish &&
!isLBearishPrev;
!isLBearishPrev;
//
bool isCloseOverLHigh = cBar.close > conditions.lBars[cIndex].high;
@@ -2693,9 +3554,9 @@ public:
//
bool isHSwitchedToBullish = isHBullish &&
!isHBullishPrev;
!isHBullishPrev;
bool isHSwitchedToBearish = isHBearish &&
!isHBearishPrev;
!isHBearishPrev;
//
bool isCloseOverHHigh = cBar.close > conditions.hBars[cIndex].high;
+788
View File
@@ -1585,6 +1585,794 @@ public:
);
}
//
// Tools ...
//
double GetCyclesMaxFast(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
double iValue = 0;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
iValue = GetCFast(barIndex);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
iValue = GetSFast(barIndex);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
iValue = GetMFast(barIndex);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
iValue = GetLFast(barIndex);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
iValue = GetHFast(barIndex);
break;
}
//
if (iValue > 0)
{
//
Add(
iValue,
values //
);
}
}
//
result = GetMax(values);
//
return result;
}
//
double GetCyclesMinFast(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
double iValue = 0;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
iValue = GetCFast(barIndex);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
iValue = GetSFast(barIndex);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
iValue = GetMFast(barIndex);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
iValue = GetLFast(barIndex);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
iValue = GetHFast(barIndex);
break;
}
//
if (iValue > 0)
{
//
Add(
iValue,
values //
);
}
}
//
result = GetMin(values);
//
return result;
}
//
double GetCyclesMaxSlow(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
double iValue = 0;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
iValue = GetCSlow(barIndex);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
iValue = GetSSlow(barIndex);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
iValue = GetMSlow(barIndex);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
iValue = GetLSlow(barIndex);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
iValue = GetHSlow(barIndex);
break;
}
//
if (iValue > 0)
{
//
Add(
iValue,
values //
);
}
}
//
result = GetMax(values);
//
return result;
}
//
double GetCyclesMinSlow(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
int cyclesCount = ArraySize(cycles);
if (!IsValidSize(cyclesCount))
{
return result;
}
//
double values[];
for (int i = 0; i < cyclesCount; i++)
{
//
double iValue = 0;
//
switch (cycles[i])
{
//
// CURRENT ...
case X_MARKET_CYCLE_UNKNOWN:
//
iValue = GetCSlow(barIndex);
break;
//
// SHORT ...
case X_MARKET_CYCLE_SHORT:
//
iValue = GetSSlow(barIndex);
break;
//
// MEDIUM ...
case X_MARKET_CYCLE_MEDIUM:
//
iValue = GetMSlow(barIndex);
break;
//
// LONG ...
case X_MARKET_CYCLE_LONG:
//
iValue = GetLSlow(barIndex);
break;
//
// HIND ...
case X_MARKET_CYCLE_HIND:
//
iValue = GetHSlow(barIndex);
break;
}
//
if (iValue > 0)
{
//
Add(
iValue,
values //
);
}
}
//
result = GetMin(values);
//
return result;
}
//
double GetCyclesMax(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
double maxFast = GetCyclesMaxFast(
barIndex,
cycles //
);
double maxSlow = GetCyclesMaxSlow(
barIndex,
cycles //
);
//
result = MathMax(maxFast, maxSlow);
//
return result;
}
//
double GetCyclesMin(
int barIndex, // Bar Index
ENUM_X_MARKET_CYCLES &cycles[] // Cycles
)
{
//
double result = 0;
//
double minFast = GetCyclesMinFast(
barIndex,
cycles //
);
double minSlow = GetCyclesMinSlow(
barIndex,
cycles //
);
//
result = MathMin(minFast, minSlow);
//
return result;
}
//
// Calculate Bullish Power ...
double GetBullishPower(
int barIndex // Bar Index
)
{
//
double result = 0;
//
double fast = 0;
double slow = 0;
double delta = 0;
//
// CURRENT ...
fast = GetCFast(barIndex);
slow = GetCSlow(barIndex);
delta = MathAbs(fast - slow);
if (fast > slow)
{
result += delta;
}
//
// SHORT ...
fast = GetSFast(barIndex);
slow = GetSSlow(barIndex);
delta = MathAbs(fast - slow);
if (fast > slow)
{
result += delta;
}
//
// MEDIUM ...
fast = GetMFast(barIndex);
slow = GetMSlow(barIndex);
delta = MathAbs(fast - slow);
if (fast > slow)
{
result += delta;
}
//
// LONG ...
fast = GetLFast(barIndex);
slow = GetLSlow(barIndex);
delta = MathAbs(fast - slow);
if (fast > slow)
{
result += delta;
}
//
// HIND ...
fast = GetHFast(barIndex);
slow = GetHSlow(barIndex);
delta = MathAbs(fast - slow);
if (fast > slow)
{
result += delta;
}
//
return result;
}
//
// Calculate Bearish Power ...
double GetBearishPower(
int barIndex // Bar Index
)
{
//
double result = 0;
//
double fast = 0;
double slow = 0;
double delta = 0;
//
// CURRENT ...
fast = GetCFast(barIndex);
slow = GetCSlow(barIndex);
delta = MathAbs(slow - fast);
if (fast < slow)
{
result += delta;
}
//
// SHORT ...
fast = GetSFast(barIndex);
slow = GetSSlow(barIndex);
delta = MathAbs(slow - fast);
if (fast < slow)
{
result += delta;
}
//
// MEDIUM ...
fast = GetMFast(barIndex);
slow = GetMSlow(barIndex);
delta = MathAbs(slow - fast);
if (fast < slow)
{
result += delta;
}
//
// LONG ...
fast = GetLFast(barIndex);
slow = GetLSlow(barIndex);
delta = MathAbs(slow - fast);
if (fast < slow)
{
result += delta;
}
//
// HIND ...
fast = GetHFast(barIndex);
slow = GetHSlow(barIndex);
delta = MathAbs(slow - fast);
if (fast < slow)
{
result += delta;
}
//
return result;
}
//
// Check Bullish Power is Up ...
bool HasBullishPower(
int barIndex // Bar Index
)
{
//
bool result = false;
//
double bullishPower = GetBullishPower(barIndex);
double bearishPower = GetBearishPower(barIndex);
//
result =
//
bearishPower >= 0 &&
bullishPower > bearishPower
//
;
//
return result;
}
//
// Check Bearish Power is Up ...
bool HasBearishPower(
int barIndex // Bar Index
)
{
//
bool result = false;
//
double bullishPower = GetBullishPower(barIndex);
double bearishPower = GetBearishPower(barIndex);
//
result =
//
bullishPower >= 0 &&
bearishPower > bullishPower
//
;
//
return result;
}
//
// Check Bullish Power Increasing ...
bool IsBullishPowerIncreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBullishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBullishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower > iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower > lastPower
//
;
}
//
return result;
}
//
// Check Bullish Power Decreasing ...
bool IsBullishPowerDecreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBullishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBullishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower < iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower < lastPower
//
;
}
//
return result;
}
//
// Check Bearish Power Increasing ...
bool IsBearishPowerIncreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBearishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBearishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower > iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower > lastPower
//
;
}
//
return result;
}
//
// Check Bearish Power Decreasing ...
bool IsBearishPowerDecreasing(
int barIndex, // Bar Index
int loopback = 5 // Loopback
)
{
//
bool result = false;
//
if (loopback <= 0)
{
loopback = 5;
}
//
double firstPower = GetBearishPower(barIndex);
double lastPower = firstPower;
for (int i = barIndex + 1; i < barIndex + loopback; i++)
{
//
double iPower = GetBearishPower(i);
//
result =
//
iPower > 0 &&
firstPower > 0 &&
lastPower < iPower
//
;
if (!result)
{
break;
}
//
lastPower = iPower;
}
//
if (result)
{
//
result =
//
firstPower < lastPower
//
;
}
//
return result;
}
//
// Conditions ...
//
bool GetConditions(
XCHMConditions &conditions, //