last worsk ...
This commit is contained in:
@@ -0,0 +1,297 @@
|
||||
|
||||
//
|
||||
// Find a Support or Resistance Zone ...
|
||||
|
||||
// //
|
||||
// // Support Zone ...
|
||||
// bool hasSupportZone = conditions.HasSupportZone();
|
||||
// if (isLowEqualsToVale && !hasSupportZone)
|
||||
// {
|
||||
// //
|
||||
// int count = state.CountSupportZones();
|
||||
// if (IsValidSize(count))
|
||||
// {
|
||||
// //
|
||||
// for (int i = count - 1; i >= 0; i--)
|
||||
// {
|
||||
// //
|
||||
// XCSupportZone *iZone = state.supportZones[i];
|
||||
|
||||
// //
|
||||
// bool isValid =
|
||||
// vale >= iZone.Lower() &&
|
||||
// vale <= iZone.Upper();
|
||||
// if (isValid)
|
||||
// {
|
||||
// //
|
||||
// conditions.supportZone = iZone;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// hasSupportZone = conditions.HasSupportZone();
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Resistance Zone ...
|
||||
// bool hasResistanceZone = conditions.HasResistanceZone();
|
||||
// if (isHighEqualsToPeak && !hasResistanceZone)
|
||||
// {
|
||||
// //
|
||||
// int count = state.CountResistanceZones();
|
||||
// if (IsValidSize(count))
|
||||
// {
|
||||
// //
|
||||
// for (int i = count - 1; i >= 0; i--)
|
||||
// {
|
||||
// //
|
||||
// XCResistanceZone *iZone = state.resistanceZones[i];
|
||||
|
||||
// //
|
||||
// bool isValid =
|
||||
// peak >= iZone.Lower() &&
|
||||
// peak <= iZone.Upper();
|
||||
// if (isValid)
|
||||
// {
|
||||
// //
|
||||
// conditions.resistanceZone = iZone;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// hasResistanceZone = conditions.HasResistanceZone();
|
||||
// }
|
||||
// }
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// isLowEqualsToVale &&
|
||||
// hasSupportZone;
|
||||
|
||||
// //
|
||||
// isBearish =
|
||||
// isHighEqualsToPeak &&
|
||||
// hasResistanceZone;
|
||||
|
||||
// //
|
||||
// result = isBullish ||
|
||||
// isBearish;
|
||||
// if (!result)
|
||||
// {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Retrieve Active Zone ...
|
||||
// XCBarZone *activeZone;
|
||||
// result = conditions.HasActiveZone(activeZone);
|
||||
// if (!result)
|
||||
// {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// //
|
||||
// // Draw ...
|
||||
// if (hasSupportZone)
|
||||
// {
|
||||
// //
|
||||
// XCSupportZoneObject *iObj;
|
||||
// bool isCreated = drawer.CreateSupportZone(
|
||||
// conditions.supportZone,
|
||||
// iObj //
|
||||
// );
|
||||
// }
|
||||
|
||||
// //
|
||||
// if (hasResistanceZone)
|
||||
// {
|
||||
// //
|
||||
// XCResistanceZoneObject *iObj;
|
||||
// bool isCreated = drawer.CreateResistanceZone(
|
||||
// conditions.resistanceZone,
|
||||
// iObj //
|
||||
// );
|
||||
// }
|
||||
|
||||
//
|
||||
XCSupportZone *supportZone;
|
||||
XCResistanceZone *resistanceZone;
|
||||
datetime activeZoneFoundedAt;
|
||||
|
||||
//
|
||||
supportZone = NULL;
|
||||
resistanceZone = NULL;
|
||||
activeZoneFoundedAt = NULL;
|
||||
|
||||
bool HasSupportZone()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
supportZone != NULL &&
|
||||
supportZone.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
bool HasResistanceZone()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
resistanceZone != NULL &&
|
||||
resistanceZone.IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
bool HasActiveZone(XCBarZone *&zone)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
zone = NULL;
|
||||
|
||||
//
|
||||
bool hasSupportZone = HasSupportZone();
|
||||
bool hasResistanceZone = HasResistanceZone();
|
||||
|
||||
//
|
||||
result = hasSupportZone ||
|
||||
hasResistanceZone;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (hasSupportZone)
|
||||
{
|
||||
//
|
||||
supportZone.To(TimeCurrent());
|
||||
zone = supportZone;
|
||||
}
|
||||
|
||||
//
|
||||
if (hasResistanceZone)
|
||||
{
|
||||
//
|
||||
resistanceZone.To(TimeCurrent());
|
||||
zone = resistanceZone;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Detect Cycle Trend Based On Pivots ...
|
||||
*
|
||||
* @param dir: ENUM_X_DIRECTION member Reference ...
|
||||
* @param numberOfPivots: Integer ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool DetectTrend(
|
||||
ENUM_X_DIRECTION &dir,
|
||||
int numberOfPivots = 3 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
if (numberOfPivots < 2)
|
||||
{
|
||||
numberOfPivots = 2;
|
||||
}
|
||||
|
||||
//
|
||||
int verifications = 0;
|
||||
XValueChange changes[];
|
||||
|
||||
//
|
||||
// Bearish Trend ...
|
||||
int peaksChangesCount = CountPeaksChanges();
|
||||
if (!result &&
|
||||
peaksChangesCount > numberOfPivots)
|
||||
{
|
||||
//
|
||||
Clean(changes);
|
||||
FillPeaksChanges(changes);
|
||||
|
||||
//
|
||||
verifications = 0;
|
||||
for (int i = peaksChangesCount - 1 - numberOfPivots; i < peaksChangesCount - 2; i++)
|
||||
{
|
||||
//
|
||||
XValueChange cChange = changes[i];
|
||||
XValueChange nChange = changes[i + 1];
|
||||
|
||||
//
|
||||
if (cChange.after > nChange.after)
|
||||
{
|
||||
verifications++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = verifications == numberOfPivots - 1;
|
||||
if (result)
|
||||
{
|
||||
dir = X_DIRECTION_BEARISH;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Bullish Trend ...
|
||||
int valesChangesCount = CountValesChanges();
|
||||
if (!result &&
|
||||
valesChangesCount > numberOfPivots)
|
||||
{
|
||||
//
|
||||
Clean(changes);
|
||||
FillValesChanges(changes);
|
||||
|
||||
//
|
||||
verifications = 0;
|
||||
for (int i = valesChangesCount - 1 - numberOfPivots; i < valesChangesCount - 2; i++)
|
||||
{
|
||||
//
|
||||
XValueChange cChange = changes[i];
|
||||
XValueChange nChange = changes[i + 1];
|
||||
|
||||
//
|
||||
if (cChange.after < nChange.after)
|
||||
{
|
||||
verifications++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = verifications == numberOfPivots - 1;
|
||||
if (result)
|
||||
{
|
||||
dir = X_DIRECTION_BULLISH;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user