This commit is contained in:
2024-11-21 17:48:22 +03:30
parent 70a373802d
commit 09fd3627c6
6 changed files with 1755 additions and 841 deletions
File diff suppressed because it is too large Load Diff
+17 -35
View File
@@ -43,7 +43,7 @@ input ENUM_BASE_CORNER corner = CORNER_RIGHT_LOWER; // Text Position
//
input group "Presentation";
input bool showCandleTime = true; // Show Candle Time
input bool showTimer = true; // Show Candle Time
//
// END Inputs ...
@@ -67,6 +67,7 @@ input bool showCandleTime = true; // Show Candle Time
//
// START Global Definitions: Variables, Properties and etc ...
//
bool isCreatedObject;
string tag;
//
// END Global Definitions: Variables, Properties and etc ...
@@ -86,16 +87,6 @@ int OnInit()
//
tag = ShortName + _Symbol + ToString(_Period);
//
if (showCandleTime)
{
CreateIndicatorObject();
}
else
{
ObjectDelete(0, tag);
}
//
// Set Indicator ShortName ...
SetIndicatorName();
@@ -145,21 +136,11 @@ int OnCalculate(
)
{
//
ArraySetAsSeries(time, true);
//
if (!showCandleTime)
if (!showTimer)
{
return rates_total;
}
//
ulong chID = FindChartID(
_Symbol,
_Period
//
);
//
XBarRemainsTime barRemains;
barRemains.Init(
@@ -191,20 +172,20 @@ int OnCalculate(
else if (mSpread < 100)
_sp = ".";
//
// int offset = TimeGMTOffset();
// string timeString =
// ", Time: " + string(TimeCurrent()) + "\n" +
// ", ServerTime: " + string(TimeTradeServer()) + "\n" +
// ", GMT Offset: " + (string)offset;
// timeString = timeString;
// Comment(timeString);
//
string objText = "Spread: " + IntegerToString(mSpread) + _sp + ", Next Bar in: " + msg;
//
ObjectSetString(0, tag, OBJPROP_TEXT, objText);
if (IsValid(tag) && !isCreatedObject)
{
CreateIndicatorObject();
}
//
if (isCreatedObject)
{
ObjectSetString(0, tag, OBJPROP_TEXT, objText);
}
//
return rates_total;
@@ -229,16 +210,17 @@ void SetIndicatorName()
void CreateIndicatorObject()
{
//
if (!showCandleTime)
if (!showTimer ||
!IsValid(tag))
{
return;
}
//
ObjectCreate(0, tag, OBJ_LABEL, 0, 0, 0);
isCreatedObject = ObjectCreate(0, tag, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, tag, OBJPROP_CORNER, corner);
ObjectSetInteger(0, tag, OBJPROP_XDISTANCE, 10);
ObjectSetInteger(0, ShortName, OBJPROP_YDISTANCE, 2);
ObjectSetInteger(0, tag, OBJPROP_YDISTANCE, 2);
//
ENUM_ANCHOR_POINT Anchor = ANCHOR_LEFT_UPPER;
+93
View File
@@ -2382,6 +2382,10 @@ class XCTickZone : public CObject
int ticks;
double percent;
//
ulong volume;
double volumePercent;
//
// Compare Two Zone With Each Other ...
virtual int Compare(
@@ -2535,6 +2539,25 @@ class XCTicksZone : public XCTwoBarZone
toM //
);
//
// Ticks Volumes ...
int ticksVolumeCount = CopyTickVolume(
symbol,
PERIOD_M1,
from,
to,
mTickVolumes //
);
if (IsValidSize(ticksVolumeCount))
{
//
mVolumes = 0;
for (int i = 0; i < ticksVolumeCount; i++)
{
mVolumes += mTickVolumes[i];
}
}
//
// Retrieve Highs ...
SpecificClean(mHighs);
@@ -2664,6 +2687,74 @@ class XCTicksZone : public XCTwoBarZone
//
result = IsValid();
//
// Try to Find Out PERIOD_1M times in each zone ...
datetime to1M = (datetime)((int)endBar.time + PeriodSeconds(period) - 60);
int to1MIndex = iBarShift(
symbol,
PERIOD_M1,
to1M //
);
int from1MIndex = iBarShift(
symbol,
PERIOD_M1,
from //
);
for (int i = from1MIndex; i > to1MIndex; i--)
{
//
XOHCL iBar;
bool isInited = iBar.Init(
symbol,
PERIOD_M1,
i //
);
if (!isInited)
{
continue;
}
ulong iVolume = iTickVolume(
symbol,
PERIOD_M1,
i //
);
//
// Loop through Zones ...
for (int j = 0; j < Levels(); j++)
{
//
XCTickZone *jZone = mZones.At(j);
if (!jZone.IsValid())
{
continue;
}
//
// Check iBar is Inside jZone ...
bool isIBarInside =
iBar.GetUp() < jZone.high &&
iBar.GetDown() > jZone.low;
// iBar.low < jZone.high ||
// iBar.high > jZone.low;
if (isIBarInside)
{
jZone.volume += iVolume;
}
}
}
//
// Calculate Volume Percent ...
for (int i = 0; i < Levels(); i++)
{
//
XCTickZone *iZone = mZones.At(i);
//
iZone.volumePercent = (double)(iZone.volume * 100 / mVolumes);
}
//
return result;
}
@@ -2787,6 +2878,8 @@ class XCTicksZone : public XCTwoBarZone
MqlTick mTicks[];
double mHighs[];
double mLows[];
ulong mVolumes;
ulong mTickVolumes[];
double mRangeHigh;
datetime mRangeHighTime;
double mRangeLow;
@@ -368,78 +368,22 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
// Update POIs ...
//
ENUM_XPOI_EVENTS _1DStates[];
m1DPOI.Update(_1DStates);
// Trigger ...
ENUM_XPOI_EVENTS triggerPOIEvents[];
mTriggerPOIDetector.Update(triggerPOIEvents);
mTriggerPOIDetector.GetState(mTriggerPOIState);
//
ENUM_XPOI_EVENTS _4HStates[];
m4HPOI.Update(_4HStates);
// Analyse ...
ENUM_XPOI_EVENTS analysePOIEvents[];
mAnalysePOIDetector.Update(analysePOIEvents);
mAnalysePOIDetector.GetState(mAnalysePOIState);
//
ENUM_XPOI_EVENTS _2HStates[];
m2HPOI.Update(_2HStates);
//
ENUM_XPOI_EVENTS _1HStates[];
m1HPOI.Update(_1HStates);
//
ENUM_XPOI_EVENTS _15MStates[];
m15MPOI.Update(_15MStates);
//
ENUM_XPOI_EVENTS _5MStates[];
m5MPOI.Update(_5MStates);
//
ENUM_XPOI_EVENTS _1MStates[];
m1MPOI.Update(_1MStates);
//
// Read all POI States ...
m1DPOI.GetState(_1DState);
m4HPOI.GetState(_4HState);
m2HPOI.GetState(_2HState);
m1HPOI.GetState(_1HState);
m15MPOI.GetState(_15MState);
m5MPOI.GetState(_5MState);
m1MPOI.GetState(_1MState);
//
// Combine States ...
XPOIState _States[];
AddRef(
_1DState,
_States //
);
AddRef(
_4HState,
_States //
);
AddRef(
_2HState,
_States //
);
AddRef(
_1HState,
_States //
);
AddRef(
_15MState,
_States //
);
AddRef(
_5MState,
_States //
);
AddRef(
_1MState,
_States //
);
CombineStates(
_CombineState,
_States //
);
// Trigger ...
ENUM_XPOI_EVENTS visionPOIEvents[];
mVisionPOIDetector.Update(visionPOIEvents);
mVisionPOIDetector.GetState(mVisionPOIState);
//
// Check Current Processing Tick has Signal or not ...
@@ -530,23 +474,14 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
//
// Point Of Interests ...
XCPOIDetector *m1DPOI;
XCPOIDetector *m4HPOI;
XCPOIDetector *m2HPOI;
XCPOIDetector *m1HPOI;
XCPOIDetector *m15MPOI;
XCPOIDetector *m5MPOI;
XCPOIDetector *m1MPOI;
XCPOIDetector *mTriggerPOIDetector;
XCPOIDetector *mAnalysePOIDetector;
XCPOIDetector *mVisionPOIDetector;
//
XPOIState _1DState;
XPOIState _4HState;
XPOIState _2HState;
XPOIState _1HState;
XPOIState _15MState;
XPOIState _5MState;
XPOIState _1MState;
XPOIState _CombineState;
XPOIState mTriggerPOIState;
XPOIState mAnalysePOIState;
XPOIState mVisionPOIState;
//
XCPOIDrawer *mPOIDrawer; // POI Drawer Class ...
@@ -1586,102 +1521,33 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
int poiRequired = 10;
//
// 1D Period ...
// POI Detector ...
m1DPOI = new XCPOIDetector(
// Trigger ...
mTriggerPOIDetector = new XCPOIDetector(
symbol,
PERIOD_D1 //
period //
);
mTriggerPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
mTriggerPOIDetector.Init();
//
m1DPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m1DPOI.Init();
//
// 4H Period ...
// POI Detector ...
m4HPOI = new XCPOIDetector(
// Analyse ...
ENUM_TIMEFRAMES analysePeriod = GetAnalysePeriod(period);
mAnalysePOIDetector = new XCPOIDetector(
symbol,
PERIOD_H4 //
analysePeriod //
);
mAnalysePOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
mAnalysePOIDetector.Init();
//
m4HPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m4HPOI.Init();
//
// 2H Period ...
// POI Detector ...
m2HPOI = new XCPOIDetector(
// Vision ...
ENUM_TIMEFRAMES visionPeriod = GetVisionPeriod(period);
mVisionPOIDetector = new XCPOIDetector(
symbol,
PERIOD_H2 //
visionPeriod //
);
//
m2HPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m2HPOI.Init();
//
// 1H Period ...
// POI Detector ...
m1HPOI = new XCPOIDetector(
symbol,
PERIOD_H1 //
);
//
m1HPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m1HPOI.Init();
//
// 15M Period ...
// POI Detector ...
m15MPOI = new XCPOIDetector(
symbol,
PERIOD_M15 //
);
//
m15MPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m15MPOI.Init();
//
// 5M Period ...
// POI Detector ...
m5MPOI = new XCPOIDetector(
symbol,
PERIOD_M5 //
);
//
m5MPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m5MPOI.Init();
//
// 1M Period ...
// POI Detector ...
m1MPOI = new XCPOIDetector(
symbol,
PERIOD_M1 //
);
//
m1MPOI.MaxNumberOfRequiredPOIs(poiRequired);
//
m1MPOI.Init();
mVisionPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
mVisionPOIDetector.Init();
//
}
@@ -1692,11 +1558,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
void DeInit()
{
//
delete m1DPOI;
delete m4HPOI;
delete m5MPOI;
delete m1MPOI;
delete m15MPOI;
delete mTriggerPOIDetector;
delete mAnalysePOIDetector;
delete mVisionPOIDetector;
//
delete mPOIDrawer;
+149
View File
@@ -619,6 +619,155 @@ typedef void (*TOnX121SMCSignal)(
X121SMCStrategyConditions &conditions //
);
//
// Time Frames Tools ...
/**
* Calculate Analyse Period ...
*
* @param value: ENUM_TIMEFRAMES member, Specified Trigger Period ...
*
* @return ( ENUM_TIMEFRAMES )
*/
ENUM_TIMEFRAMES GetAnalysePeriod(ENUM_TIMEFRAMES value)
{
//
ENUM_TIMEFRAMES result = NULL;
//
value = NormalizePeriod(value);
//
switch (value)
{
//
case PERIOD_M1:
case PERIOD_M2:
case PERIOD_M3:
case PERIOD_M4:
case PERIOD_M5:
case PERIOD_M6:
case PERIOD_M10:
case PERIOD_M12:
result = PERIOD_M15;
break;
//
case PERIOD_M15:
case PERIOD_M20:
result = PERIOD_M30;
break;
//
case PERIOD_H1:
case PERIOD_H2:
case PERIOD_H3:
result = PERIOD_H4;
break;
//
case PERIOD_H4:
case PERIOD_H6:
case PERIOD_H8:
result = PERIOD_H12;
break;
//
default:
result = NULL;
}
//
return result;
}
bool HasValidAnalysePeriod(
ENUM_TIMEFRAMES value,
ENUM_TIMEFRAMES &period //
)
{
//
bool result = false;
period = GetAnalysePeriod(value);
result = IsValid(period);
//
return result;
}
/**
* Calculate Vision Period ...
*
* @param value: ENUM_TIMEFRAMES member, Specified Trigger Period ...
*
* @return ( ENUM_TIMEFRAMES )
*/
ENUM_TIMEFRAMES GetVisionPeriod(ENUM_TIMEFRAMES value)
{
//
ENUM_TIMEFRAMES result = NULL;
//
value = NormalizePeriod(value);
//
switch (value)
{
//
case PERIOD_M1:
case PERIOD_M2:
case PERIOD_M3:
case PERIOD_M4:
case PERIOD_M5:
case PERIOD_M6:
case PERIOD_M10:
case PERIOD_M12:
result = PERIOD_H1;
break;
//
case PERIOD_M15:
case PERIOD_M20:
result = PERIOD_H2;
break;
//
case PERIOD_H1:
case PERIOD_H2:
case PERIOD_H3:
result = PERIOD_H6;
break;
//
case PERIOD_H4:
case PERIOD_H6:
case PERIOD_H8:
result = PERIOD_D1;
break;
//
default:
result = NULL;
}
//
return result;
}
bool HasValidVisionPeriod(
ENUM_TIMEFRAMES value,
ENUM_TIMEFRAMES &period //
)
{
//
bool result = false;
period = GetVisionPeriod(value);
result = IsValid(period);
//
return result;
}
//
// Extentions ...
File diff suppressed because it is too large Load Diff