last works on create X121Setup ...
This commit is contained in:
@@ -190,6 +190,568 @@ struct XICHInputs
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// Define Conditions ...
|
||||
struct XICHConditions
|
||||
{
|
||||
//
|
||||
// Common ...
|
||||
string symbol;
|
||||
ENUM_TIMEFRAMES period;
|
||||
datetime time;
|
||||
|
||||
//
|
||||
// Buffers ...
|
||||
double tenkanSen[];
|
||||
double kijunSen[];
|
||||
double chikouSpan[];
|
||||
double senkouSpanA[];
|
||||
double senkouSpanB[];
|
||||
double futureSenkouSpanA[];
|
||||
double futureSenkouSpanB[];
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
bool isClosedOverKijunSen;
|
||||
bool isClosedUnderKijunSen;
|
||||
bool isTenkanSenOverKijunSen;
|
||||
bool isTenkanSenUnderKijunSen;
|
||||
bool isTenkanSenCrossedOverKijunSen;
|
||||
bool isTenkanSenCrossedUnderKijunSen;
|
||||
|
||||
//
|
||||
bool isSenkouSpanAOverB;
|
||||
bool isSenkouSpanAUnderB;
|
||||
bool isSenkouSpanAOverLast;
|
||||
bool isSenkouSpanAUnderLast;
|
||||
bool isFutureSenkouSpanAOverB;
|
||||
bool isFutureSenkouSpanAUnderB;
|
||||
bool isFutureSenkouSpanAOverLast;
|
||||
bool isFutureSenkouSpanAUnderLast;
|
||||
|
||||
//
|
||||
bool isSenkouSpanACrossedOverB;
|
||||
bool isSenkouSpanACrossedUnderB;
|
||||
bool isSenkouSpanACrossedOverLast;
|
||||
bool isSenkouSpanACrossedUnderLast;
|
||||
bool isFutureSenkouSpanACrossedOverB;
|
||||
bool isFutureSenkouSpanACrossedUnderB;
|
||||
bool isFutureSenkouSpanACrossedOverLast;
|
||||
bool isFutureSenkouSpanACrossedUnderLast;
|
||||
|
||||
//
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
Clean(tenkanSen);
|
||||
Clean(kijunSen);
|
||||
Clean(chikouSpan);
|
||||
Clean(senkouSpanA);
|
||||
Clean(senkouSpanB);
|
||||
Clean(futureSenkouSpanA);
|
||||
Clean(futureSenkouSpanB);
|
||||
|
||||
//
|
||||
ArraySetAsSeries(tenkanSen, true);
|
||||
ArraySetAsSeries(kijunSen, true);
|
||||
ArraySetAsSeries(chikouSpan, true);
|
||||
ArraySetAsSeries(senkouSpanA, true);
|
||||
ArraySetAsSeries(senkouSpanB, true);
|
||||
ArraySetAsSeries(futureSenkouSpanA, true);
|
||||
ArraySetAsSeries(futureSenkouSpanB, true);
|
||||
|
||||
//
|
||||
isClosedOverKijunSen = false;
|
||||
isClosedUnderKijunSen = false;
|
||||
isTenkanSenOverKijunSen = false;
|
||||
isTenkanSenUnderKijunSen = false;
|
||||
isTenkanSenCrossedOverKijunSen = false;
|
||||
isTenkanSenCrossedUnderKijunSen = false;
|
||||
|
||||
//
|
||||
isSenkouSpanAOverB = false;
|
||||
isSenkouSpanAUnderB = false;
|
||||
isSenkouSpanAOverLast = false;
|
||||
isSenkouSpanAUnderLast = false;
|
||||
isFutureSenkouSpanAOverB = false;
|
||||
isFutureSenkouSpanAUnderB = false;
|
||||
isFutureSenkouSpanAOverLast = false;
|
||||
isFutureSenkouSpanAUnderLast = false;
|
||||
|
||||
//
|
||||
isSenkouSpanACrossedOverB = false;
|
||||
isSenkouSpanACrossedUnderB = false;
|
||||
isSenkouSpanACrossedOverLast = false;
|
||||
isSenkouSpanACrossedUnderLast = false;
|
||||
isFutureSenkouSpanACrossedOverB = false;
|
||||
isFutureSenkouSpanACrossedUnderB = false;
|
||||
isFutureSenkouSpanACrossedOverLast = false;
|
||||
isFutureSenkouSpanACrossedUnderLast = false;
|
||||
}
|
||||
|
||||
//
|
||||
void GenerateScore(
|
||||
double &bullishScore,
|
||||
double &bearishScore //
|
||||
)
|
||||
{
|
||||
//
|
||||
bullishScore = 0;
|
||||
bearishScore = 0;
|
||||
|
||||
//
|
||||
if (isClosedOverKijunSen)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isTenkanSenOverKijunSen)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isTenkanSenCrossedOverKijunSen)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isSenkouSpanAOverB)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isSenkouSpanAOverLast)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanAOverB)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanAOverLast)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isSenkouSpanACrossedOverB)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isSenkouSpanACrossedOverLast)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanACrossedOverB)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanACrossedOverLast)
|
||||
{
|
||||
bullishScore++;
|
||||
}
|
||||
|
||||
//
|
||||
if (isClosedUnderKijunSen)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isTenkanSenUnderKijunSen)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isTenkanSenCrossedUnderKijunSen)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isSenkouSpanAUnderB)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isSenkouSpanAUnderLast)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanAUnderB)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanAUnderLast)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isSenkouSpanACrossedUnderB)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isSenkouSpanACrossedUnderLast)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanACrossedUnderB)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
if (isFutureSenkouSpanACrossedUnderLast)
|
||||
{
|
||||
bearishScore++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
string GenerateSummary(
|
||||
bool onlyCommons = false,
|
||||
bool onlyConditions = false,
|
||||
bool includeScores = true,
|
||||
bool ignoreFalseConditions = true,
|
||||
string separator = "\n" //
|
||||
)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
double bullishScore = 0;
|
||||
double bearishScore = 0;
|
||||
GenerateScore(
|
||||
bullishScore,
|
||||
bearishScore //
|
||||
);
|
||||
|
||||
//
|
||||
string scoresStr =
|
||||
//
|
||||
"Scores: " + separator +
|
||||
"---------------" + separator +
|
||||
"Bullish: " + ToString(bullishScore) + separator +
|
||||
"Bearish: " + ToString(bearishScore) + separator +
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
string commonStr = GenerateSpecifiedCommonSummary(
|
||||
this,
|
||||
separator,
|
||||
includeScores //
|
||||
);
|
||||
|
||||
//
|
||||
string conditionsStr =
|
||||
//
|
||||
ToString("isClosedOverKijunSen", isClosedOverKijunSen, ignoreFalseConditions, separator) +
|
||||
ToString("isClosedUnderKijunSen", isClosedUnderKijunSen, ignoreFalseConditions, separator) +
|
||||
ToString("isTenkanSenOverKijunSen", isTenkanSenOverKijunSen, ignoreFalseConditions, separator) +
|
||||
ToString("isTenkanSenUnderKijunSen", isTenkanSenUnderKijunSen, ignoreFalseConditions, separator) +
|
||||
ToString("isTenkanSenCrossedOverKijunSen", isTenkanSenCrossedOverKijunSen, ignoreFalseConditions, separator) +
|
||||
ToString("isTenkanSenCrossedUnderKijunSen", isTenkanSenCrossedUnderKijunSen, ignoreFalseConditions, separator) +
|
||||
//
|
||||
ToString("isSenkouSpanAOverB", isSenkouSpanAOverB, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanAUnderB", isSenkouSpanAUnderB, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanAOverLast", isSenkouSpanAOverLast, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanAUnderLast", isSenkouSpanAUnderLast, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanAOverB", isFutureSenkouSpanAOverB, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanAUnderB", isFutureSenkouSpanAUnderB, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanAOverLast", isFutureSenkouSpanAOverLast, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanAUnderLast", isFutureSenkouSpanAUnderLast, ignoreFalseConditions, separator) +
|
||||
//
|
||||
ToString("isSenkouSpanACrossedOverB", isSenkouSpanACrossedOverB, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanACrossedUnderB", isSenkouSpanACrossedUnderB, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanACrossedOverLast", isSenkouSpanACrossedOverLast, ignoreFalseConditions, separator) +
|
||||
ToString("isSenkouSpanACrossedUnderLast", isSenkouSpanACrossedUnderLast, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanACrossedOverB", isFutureSenkouSpanACrossedOverB, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanACrossedUnderB", isFutureSenkouSpanACrossedUnderB, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanACrossedOverLast", isFutureSenkouSpanACrossedOverLast, ignoreFalseConditions, separator) +
|
||||
ToString("isFutureSenkouSpanACrossedUnderLast", isFutureSenkouSpanACrossedUnderLast, ignoreFalseConditions, separator) +
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
"[" + GetTag() + "]" + separator +
|
||||
(onlyConditions
|
||||
? ""
|
||||
: commonStr) +
|
||||
(!includeScores
|
||||
? ""
|
||||
: scoresStr) +
|
||||
" " + separator +
|
||||
(onlyCommons
|
||||
? ""
|
||||
: conditionsStr) +
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string GetTag()
|
||||
{
|
||||
return "XICH";
|
||||
}
|
||||
|
||||
//
|
||||
bool HasLongConditions()
|
||||
{
|
||||
//
|
||||
bool result;
|
||||
|
||||
//
|
||||
int zIndex = 0;
|
||||
int cIndex = zIndex + 1;
|
||||
int pIndex = cIndex + 1;
|
||||
|
||||
//
|
||||
XOHCL cBar;
|
||||
result = cBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
cIndex //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
result = pBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
pIndex //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isCloseOverSenkouSpanA = cBar.close > senkouSpanA[cIndex];
|
||||
|
||||
//
|
||||
bool isBaseBullish = isCloseOverSenkouSpanA &&
|
||||
isSenkouSpanAOverB &&
|
||||
isSenkouSpanAOverLast;
|
||||
|
||||
//
|
||||
bool isKijunSenOverSenkouSpanA = kijunSen[cIndex] > senkouSpanA[cIndex];
|
||||
|
||||
//
|
||||
bool isCloseOverTenkanSen = cBar.close > tenkanSen[cIndex];
|
||||
|
||||
//
|
||||
bool isPriceCloseCrossedUpTenkanSen = pBar.close <= tenkanSen[pIndex] &&
|
||||
cBar.close > tenkanSen[cIndex];
|
||||
|
||||
//
|
||||
double cKumoUpper = MathMax(senkouSpanA[cIndex], senkouSpanB[cIndex]);
|
||||
double pKumoUpper = MathMax(senkouSpanA[pIndex], senkouSpanB[pIndex]);
|
||||
|
||||
//
|
||||
double cKumoLower = MathMin(senkouSpanA[cIndex], senkouSpanB[cIndex]);
|
||||
double pKumoLower = MathMin(senkouSpanA[pIndex], senkouSpanB[pIndex]);
|
||||
|
||||
//
|
||||
bool isTenkanSenOverKumo = tenkanSen[cIndex] > cKumoUpper;
|
||||
bool isTenkanSenOverKumoPrev = tenkanSen[pIndex] > pKumoUpper;
|
||||
|
||||
//
|
||||
bool isTenkanSenUnderKumo = tenkanSen[cIndex] < cKumoLower;
|
||||
bool isTenkanSenUnderKumoPrev = tenkanSen[pIndex] < pKumoLower;
|
||||
|
||||
//
|
||||
bool isTenkanSenCrossedOverKumo = isTenkanSenOverKumo &&
|
||||
!isTenkanSenOverKumoPrev;
|
||||
|
||||
//
|
||||
bool isTenkanSenCrossedUnderKumo = isTenkanSenUnderKumo &&
|
||||
!isTenkanSenUnderKumoPrev;
|
||||
|
||||
//
|
||||
bool condition1 =
|
||||
isBaseBullish &&
|
||||
isCloseOverTenkanSen &&
|
||||
isKijunSenOverSenkouSpanA &&
|
||||
isTenkanSenCrossedOverKijunSen;
|
||||
|
||||
//
|
||||
bool condition2 =
|
||||
isBaseBullish &&
|
||||
isCloseOverTenkanSen &&
|
||||
isKijunSenOverSenkouSpanA &&
|
||||
isTenkanSenOverKijunSen &&
|
||||
isSenkouSpanACrossedOverB;
|
||||
|
||||
//
|
||||
bool condition3 =
|
||||
isBaseBullish &&
|
||||
isKijunSenOverSenkouSpanA &&
|
||||
isPriceCloseCrossedUpTenkanSen &&
|
||||
isTenkanSenOverKijunSen;
|
||||
|
||||
//
|
||||
bool condition4 =
|
||||
isCloseOverTenkanSen &&
|
||||
isTenkanSenCrossedOverKumo &&
|
||||
isTenkanSenOverKijunSen &&
|
||||
isFutureSenkouSpanAOverB &&
|
||||
isFutureSenkouSpanAOverLast;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
condition1
|
||||
//
|
||||
||
|
||||
//
|
||||
condition2
|
||||
//
|
||||
||
|
||||
//
|
||||
condition3
|
||||
//
|
||||
||
|
||||
//
|
||||
condition4
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasShortConditions()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
int zIndex = 0;
|
||||
int cIndex = zIndex + 1;
|
||||
int pIndex = cIndex + 1;
|
||||
|
||||
//
|
||||
XOHCL cBar;
|
||||
result = cBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
cIndex //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
result = pBar.Init(
|
||||
symbol,
|
||||
period,
|
||||
pIndex //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isCloseUnderSenkouSpanB = cBar.close < senkouSpanB[cIndex];
|
||||
|
||||
//
|
||||
bool isBaseBearish = isCloseUnderSenkouSpanB &&
|
||||
isSenkouSpanAUnderB &&
|
||||
isSenkouSpanAUnderLast;
|
||||
|
||||
//
|
||||
bool isKijunSenUnderSenkouSpanB = kijunSen[cIndex] < senkouSpanB[cIndex];
|
||||
|
||||
//
|
||||
bool isCloseUnderTenkanSen = cBar.close < tenkanSen[cIndex];
|
||||
|
||||
//
|
||||
bool isPriceCloseCrossedDownTenkanSen = pBar.close >= tenkanSen[pIndex] &&
|
||||
cBar.close < tenkanSen[cIndex];
|
||||
|
||||
//
|
||||
double cKumoUpper = MathMax(senkouSpanA[cIndex], senkouSpanB[cIndex]);
|
||||
double pKumoUpper = MathMax(senkouSpanA[pIndex], senkouSpanB[pIndex]);
|
||||
|
||||
//
|
||||
double cKumoLower = MathMin(senkouSpanA[cIndex], senkouSpanB[cIndex]);
|
||||
double pKumoLower = MathMin(senkouSpanA[pIndex], senkouSpanB[pIndex]);
|
||||
|
||||
//
|
||||
bool isTenkanSenOverKumo = tenkanSen[cIndex] > cKumoUpper;
|
||||
bool isTenkanSenOverKumoPrev = tenkanSen[pIndex] > pKumoUpper;
|
||||
|
||||
//
|
||||
bool isTenkanSenUnderKumo = tenkanSen[cIndex] < cKumoLower;
|
||||
bool isTenkanSenUnderKumoPrev = tenkanSen[pIndex] < pKumoLower;
|
||||
|
||||
//
|
||||
bool isTenkanSenCrossedOverKumo = isTenkanSenOverKumo &&
|
||||
!isTenkanSenOverKumoPrev;
|
||||
|
||||
//
|
||||
bool isTenkanSenCrossedUnderKumo = isTenkanSenUnderKumo &&
|
||||
!isTenkanSenUnderKumoPrev;
|
||||
|
||||
//
|
||||
bool condition1 =
|
||||
isBaseBearish &&
|
||||
isCloseUnderTenkanSen &&
|
||||
isKijunSenUnderSenkouSpanB &&
|
||||
isTenkanSenCrossedUnderKijunSen;
|
||||
|
||||
//
|
||||
bool condition2 =
|
||||
isBaseBearish &&
|
||||
isCloseUnderTenkanSen &&
|
||||
isKijunSenUnderSenkouSpanB &&
|
||||
isTenkanSenUnderKijunSen &&
|
||||
isSenkouSpanACrossedUnderB;
|
||||
|
||||
//
|
||||
bool condition3 =
|
||||
isBaseBearish &&
|
||||
isKijunSenUnderSenkouSpanB &&
|
||||
isPriceCloseCrossedDownTenkanSen &&
|
||||
isTenkanSenUnderKijunSen;
|
||||
|
||||
//
|
||||
bool condition4 =
|
||||
isCloseUnderTenkanSen &&
|
||||
isTenkanSenCrossedUnderKumo &&
|
||||
isTenkanSenUnderKijunSen &&
|
||||
isFutureSenkouSpanAUnderB &&
|
||||
isFutureSenkouSpanAUnderLast;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
condition1
|
||||
|
||||
||
|
||||
//
|
||||
condition2
|
||||
//
|
||||
||
|
||||
//
|
||||
condition3
|
||||
//
|
||||
||
|
||||
//
|
||||
condition4
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// Class ...
|
||||
class XSCXICHHelper : public XSCBaseHelper
|
||||
@@ -703,6 +1265,190 @@ public:
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
bool GetConditions(
|
||||
XICHConditions &conditions, //
|
||||
int barIndex = 0, //
|
||||
int loopback = 4 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = true;
|
||||
|
||||
//
|
||||
if (loopback < 4)
|
||||
{
|
||||
loopback = 4;
|
||||
}
|
||||
|
||||
//
|
||||
conditions.Clean();
|
||||
|
||||
//
|
||||
conditions.symbol = mSymbol;
|
||||
conditions.period = mPeriod;
|
||||
conditions.time = TimeCurrent();
|
||||
|
||||
//
|
||||
int zIndex = barIndex;
|
||||
int cIndex = zIndex + 1;
|
||||
int pIndex = cIndex + 1;
|
||||
int ppIndex = pIndex + 1;
|
||||
|
||||
//
|
||||
CopyTenkanSen(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.tenkanSen //
|
||||
);
|
||||
CopyKijunSen(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.kijunSen //
|
||||
);
|
||||
CopyChikouSpan(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.chikouSpan //
|
||||
);
|
||||
CopySenkouSpanA(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.senkouSpanA //
|
||||
);
|
||||
CopySenkouSpanB(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.senkouSpanB //
|
||||
);
|
||||
CopyFutureSenkouSpanA(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.futureSenkouSpanA //
|
||||
);
|
||||
CopyFutureSenkouSpanB(
|
||||
zIndex,
|
||||
loopback,
|
||||
conditions.futureSenkouSpanB //
|
||||
);
|
||||
|
||||
//
|
||||
// Calculate Conditions ...
|
||||
|
||||
//
|
||||
XOHCL cBar;
|
||||
result = cBar.Init(
|
||||
_Symbol,
|
||||
_Period,
|
||||
cIndex //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isClosedOverKijunSen = cBar.close > conditions.kijunSen[cIndex];
|
||||
bool isClosedUnderKijunSen = cBar.close < conditions.kijunSen[cIndex];
|
||||
|
||||
//
|
||||
bool isTenkanSenOverKijunSen = conditions.tenkanSen[cIndex] > conditions.kijunSen[cIndex];
|
||||
bool isTenkanSenUnderKijunSen = conditions.tenkanSen[cIndex] < conditions.kijunSen[cIndex];
|
||||
|
||||
//
|
||||
bool isTenkanSenOverKijunSenPrev = conditions.tenkanSen[pIndex] > conditions.kijunSen[pIndex];
|
||||
bool isTenkanSenUnderKijunSenPrev = conditions.tenkanSen[pIndex] < conditions.kijunSen[pIndex];
|
||||
|
||||
//
|
||||
bool isTenkanSenCrossedOverKijunSen = isTenkanSenOverKijunSen &&
|
||||
!isTenkanSenOverKijunSenPrev;
|
||||
bool isTenkanSenCrossedUnderKijunSen = isTenkanSenUnderKijunSen &&
|
||||
!isTenkanSenUnderKijunSenPrev;
|
||||
|
||||
//
|
||||
bool isSenkouSpanAOverB = conditions.senkouSpanA[cIndex] > conditions.senkouSpanB[cIndex];
|
||||
bool isSenkouSpanAUnderB = conditions.senkouSpanA[cIndex] < conditions.senkouSpanB[cIndex];
|
||||
|
||||
//
|
||||
bool isSenkouSpanAOverBPrev = conditions.senkouSpanA[pIndex] > conditions.senkouSpanB[pIndex];
|
||||
bool isSenkouSpanAUnderBPrev = conditions.senkouSpanA[pIndex] < conditions.senkouSpanB[pIndex];
|
||||
|
||||
//
|
||||
bool isSenkouSpanAOverLast = conditions.senkouSpanA[cIndex] > conditions.senkouSpanA[pIndex];
|
||||
bool isSenkouSpanAUnderLast = conditions.senkouSpanA[cIndex] < conditions.senkouSpanA[pIndex];
|
||||
|
||||
//
|
||||
bool isSenkouSpanAOverLastPrev = conditions.senkouSpanA[pIndex] > conditions.senkouSpanA[ppIndex];
|
||||
bool isSenkouSpanAUnderLastPrev = conditions.senkouSpanA[pIndex] < conditions.senkouSpanA[ppIndex];
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanAOverB = conditions.futureSenkouSpanA[cIndex] > conditions.futureSenkouSpanB[cIndex];
|
||||
bool isFutureSenkouSpanAUnderB = conditions.futureSenkouSpanA[cIndex] < conditions.futureSenkouSpanB[cIndex];
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanAOverBPrev = conditions.futureSenkouSpanA[pIndex] > conditions.futureSenkouSpanB[pIndex];
|
||||
bool isFutureSenkouSpanAUnderBPrev = conditions.futureSenkouSpanA[pIndex] < conditions.futureSenkouSpanB[pIndex];
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanAOverLast = conditions.futureSenkouSpanA[cIndex] > conditions.futureSenkouSpanA[pIndex];
|
||||
bool isFutureSenkouSpanAUnderLast = conditions.futureSenkouSpanA[cIndex] < conditions.futureSenkouSpanA[pIndex];
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanAOverLastPrev = conditions.futureSenkouSpanA[pIndex] > conditions.futureSenkouSpanA[ppIndex];
|
||||
bool isFutureSenkouSpanAUnderLastPrev = conditions.futureSenkouSpanA[pIndex] < conditions.futureSenkouSpanA[ppIndex];
|
||||
|
||||
//
|
||||
bool isSenkouSpanACrossedOverB = isSenkouSpanAOverB &&
|
||||
!isSenkouSpanAOverBPrev;
|
||||
bool isSenkouSpanACrossedUnderB = isSenkouSpanAUnderB &&
|
||||
!isSenkouSpanAUnderBPrev;
|
||||
|
||||
//
|
||||
bool isSenkouSpanACrossedOverLast = isSenkouSpanAOverLast &
|
||||
!isSenkouSpanAOverLastPrev;
|
||||
bool isSenkouSpanACrossedUnderLast = isSenkouSpanAUnderLast &&
|
||||
!isSenkouSpanAUnderLastPrev;
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanACrossedOverB = isFutureSenkouSpanAOverB &&
|
||||
!isFutureSenkouSpanAOverBPrev;
|
||||
bool isFutureSenkouSpanACrossedUnderB = isFutureSenkouSpanAUnderB &&
|
||||
!isFutureSenkouSpanAUnderBPrev;
|
||||
|
||||
//
|
||||
bool isFutureSenkouSpanACrossedOverLast = isFutureSenkouSpanAOverLast &&
|
||||
!isFutureSenkouSpanAOverLastPrev;
|
||||
bool isFutureSenkouSpanACrossedUnderLast = isFutureSenkouSpanAUnderLast &&
|
||||
!isFutureSenkouSpanAUnderLastPrev;
|
||||
|
||||
//
|
||||
conditions.isClosedOverKijunSen = isClosedOverKijunSen;
|
||||
conditions.isClosedUnderKijunSen = isClosedUnderKijunSen;
|
||||
conditions.isTenkanSenOverKijunSen = isTenkanSenOverKijunSen;
|
||||
conditions.isTenkanSenUnderKijunSen = isTenkanSenUnderKijunSen;
|
||||
conditions.isTenkanSenCrossedOverKijunSen = isTenkanSenCrossedOverKijunSen;
|
||||
conditions.isTenkanSenCrossedUnderKijunSen = isTenkanSenCrossedUnderKijunSen;
|
||||
conditions.isSenkouSpanAOverB = isSenkouSpanAOverB;
|
||||
conditions.isSenkouSpanAUnderB = isSenkouSpanAUnderB;
|
||||
conditions.isSenkouSpanAOverLast = isSenkouSpanAOverLast;
|
||||
conditions.isSenkouSpanAUnderLast = isSenkouSpanAUnderLast;
|
||||
conditions.isFutureSenkouSpanAOverB = isFutureSenkouSpanAOverB;
|
||||
conditions.isFutureSenkouSpanAUnderB = isFutureSenkouSpanAUnderB;
|
||||
conditions.isFutureSenkouSpanAOverLast = isFutureSenkouSpanAOverLast;
|
||||
conditions.isFutureSenkouSpanAUnderLast = isFutureSenkouSpanAUnderLast;
|
||||
conditions.isSenkouSpanACrossedOverB = isSenkouSpanACrossedOverB;
|
||||
conditions.isSenkouSpanACrossedUnderB = isSenkouSpanACrossedUnderB;
|
||||
conditions.isSenkouSpanACrossedOverLast = isSenkouSpanACrossedOverLast;
|
||||
conditions.isSenkouSpanACrossedUnderLast = isSenkouSpanACrossedUnderLast;
|
||||
conditions.isFutureSenkouSpanACrossedOverB = isFutureSenkouSpanACrossedOverB;
|
||||
conditions.isFutureSenkouSpanACrossedUnderB = isFutureSenkouSpanACrossedUnderB;
|
||||
conditions.isFutureSenkouSpanACrossedOverLast = isFutureSenkouSpanACrossedOverLast;
|
||||
conditions.isFutureSenkouSpanACrossedUnderLast = isFutureSenkouSpanACrossedUnderLast;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Protected ...
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user