last works ...
This commit is contained in:
+1576
-1044
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,825 @@
|
||||
|
||||
int CountKIFastTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetKIFast(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountKISlowTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetKISlow(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountKISuperSlowTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetKISuperSlow(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountKIUpperTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetKIUpper(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountKILowerTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetKILower(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountMAFastTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetMAFast(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountMASlowTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetMASlow(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
int CountMASuperSlowTouches(
|
||||
int barIndex = 0,
|
||||
int loopback = 5,
|
||||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||||
ENUM_X_BOUNDARY_PRICE priceType = X_BOUNDARY_PRICE_HIGH_LOW //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
loopback = NormalizeInt(loopback, 1);
|
||||
barIndex = NormalizeBarIndex(barIndex);
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool has = false;
|
||||
double iValue = 0;
|
||||
double affectedValue = 0;
|
||||
double iConfirnValue = 0;
|
||||
bool isBullish = !HasDirection(forDir) || IsXBullish(forDir);
|
||||
bool isBearish = !HasDirection(forDir) || IsXBearish(forDir);
|
||||
ENUM_X_PRICE bullishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bullishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
ENUM_X_PRICE bearishTouchUpperPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_HIGH
|
||||
: X_PRICE_UP;
|
||||
ENUM_X_PRICE bearishTouchLowerPriceType = priceType == X_BOUNDARY_PRICE_HIGH_LOW
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_DOWN;
|
||||
for (int i = barIndex; i < barIndex + loopback; i++)
|
||||
{
|
||||
//
|
||||
has = iBar.Init(symbol, period, i);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
affectedValue = helper.GetMASuperSlow(i);
|
||||
|
||||
//
|
||||
// Bullish Touches ...
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bullishTouchLowerPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bullishTouchUpperPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue <= affectedValue &&
|
||||
iConfirnValue >= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Touches ...
|
||||
if (isBearish)
|
||||
{
|
||||
//
|
||||
iValue = iBar.GetPrice(bearishTouchUpperPriceType);
|
||||
iConfirnValue = iBar.GetPrice(bearishTouchLowerPriceType);
|
||||
has =
|
||||
NotEmptyZero(iValue) &&
|
||||
NotEmptyZero(affectedValue) &&
|
||||
NotEmptyZero(iConfirnValue) &&
|
||||
iValue >= affectedValue &&
|
||||
iConfirnValue <= affectedValue;
|
||||
if (has)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user