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 group "Presentation";
input bool showCandleTime = true; // Show Candle Time input bool showTimer = true; // Show Candle Time
// //
// END Inputs ... // END Inputs ...
@@ -67,6 +67,7 @@ input bool showCandleTime = true; // Show Candle Time
// //
// START Global Definitions: Variables, Properties and etc ... // START Global Definitions: Variables, Properties and etc ...
// //
bool isCreatedObject;
string tag; string tag;
// //
// END Global Definitions: Variables, Properties and etc ... // END Global Definitions: Variables, Properties and etc ...
@@ -86,16 +87,6 @@ int OnInit()
// //
tag = ShortName + _Symbol + ToString(_Period); tag = ShortName + _Symbol + ToString(_Period);
//
if (showCandleTime)
{
CreateIndicatorObject();
}
else
{
ObjectDelete(0, tag);
}
// //
// Set Indicator ShortName ... // Set Indicator ShortName ...
SetIndicatorName(); SetIndicatorName();
@@ -145,21 +136,11 @@ int OnCalculate(
) )
{ {
// //
ArraySetAsSeries(time, true); if (!showTimer)
//
if (!showCandleTime)
{ {
return rates_total; return rates_total;
} }
//
ulong chID = FindChartID(
_Symbol,
_Period
//
);
// //
XBarRemainsTime barRemains; XBarRemainsTime barRemains;
barRemains.Init( barRemains.Init(
@@ -191,20 +172,20 @@ int OnCalculate(
else if (mSpread < 100) else if (mSpread < 100)
_sp = "."; _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; 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; return rates_total;
@@ -229,16 +210,17 @@ void SetIndicatorName()
void CreateIndicatorObject() void CreateIndicatorObject()
{ {
// //
if (!showCandleTime) if (!showTimer ||
!IsValid(tag))
{ {
return; 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_CORNER, corner);
ObjectSetInteger(0, tag, OBJPROP_XDISTANCE, 10); 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; ENUM_ANCHOR_POINT Anchor = ANCHOR_LEFT_UPPER;
+93
View File
@@ -2382,6 +2382,10 @@ class XCTickZone : public CObject
int ticks; int ticks;
double percent; double percent;
//
ulong volume;
double volumePercent;
// //
// Compare Two Zone With Each Other ... // Compare Two Zone With Each Other ...
virtual int Compare( virtual int Compare(
@@ -2535,6 +2539,25 @@ class XCTicksZone : public XCTwoBarZone
toM // 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 ... // Retrieve Highs ...
SpecificClean(mHighs); SpecificClean(mHighs);
@@ -2664,6 +2687,74 @@ class XCTicksZone : public XCTwoBarZone
// //
result = IsValid(); 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; return result;
} }
@@ -2787,6 +2878,8 @@ class XCTicksZone : public XCTwoBarZone
MqlTick mTicks[]; MqlTick mTicks[];
double mHighs[]; double mHighs[];
double mLows[]; double mLows[];
ulong mVolumes;
ulong mTickVolumes[];
double mRangeHigh; double mRangeHigh;
datetime mRangeHighTime; datetime mRangeHighTime;
double mRangeLow; double mRangeLow;
@@ -368,78 +368,22 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
// Update POIs ... // Update POIs ...
// //
ENUM_XPOI_EVENTS _1DStates[]; // Trigger ...
m1DPOI.Update(_1DStates); ENUM_XPOI_EVENTS triggerPOIEvents[];
mTriggerPOIDetector.Update(triggerPOIEvents);
mTriggerPOIDetector.GetState(mTriggerPOIState);
// //
ENUM_XPOI_EVENTS _4HStates[]; // Analyse ...
m4HPOI.Update(_4HStates); ENUM_XPOI_EVENTS analysePOIEvents[];
mAnalysePOIDetector.Update(analysePOIEvents);
mAnalysePOIDetector.GetState(mAnalysePOIState);
// //
ENUM_XPOI_EVENTS _2HStates[]; // Trigger ...
m2HPOI.Update(_2HStates); ENUM_XPOI_EVENTS visionPOIEvents[];
mVisionPOIDetector.Update(visionPOIEvents);
// mVisionPOIDetector.GetState(mVisionPOIState);
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 //
);
// //
// Check Current Processing Tick has Signal or not ... // Check Current Processing Tick has Signal or not ...
@@ -530,23 +474,14 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
// //
// Point Of Interests ... // Point Of Interests ...
XCPOIDetector *m1DPOI; XCPOIDetector *mTriggerPOIDetector;
XCPOIDetector *m4HPOI; XCPOIDetector *mAnalysePOIDetector;
XCPOIDetector *m2HPOI; XCPOIDetector *mVisionPOIDetector;
XCPOIDetector *m1HPOI;
XCPOIDetector *m15MPOI;
XCPOIDetector *m5MPOI;
XCPOIDetector *m1MPOI;
// //
XPOIState _1DState; XPOIState mTriggerPOIState;
XPOIState _4HState; XPOIState mAnalysePOIState;
XPOIState _2HState; XPOIState mVisionPOIState;
XPOIState _1HState;
XPOIState _15MState;
XPOIState _5MState;
XPOIState _1MState;
XPOIState _CombineState;
// //
XCPOIDrawer *mPOIDrawer; // POI Drawer Class ... XCPOIDrawer *mPOIDrawer; // POI Drawer Class ...
@@ -1586,102 +1521,33 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
int poiRequired = 10; int poiRequired = 10;
// //
// 1D Period ... // Trigger ...
// POI Detector ... mTriggerPOIDetector = new XCPOIDetector(
m1DPOI = new XCPOIDetector(
symbol, symbol,
PERIOD_D1 // period //
); );
mTriggerPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
mTriggerPOIDetector.Init();
// //
m1DPOI.MaxNumberOfRequiredPOIs(poiRequired); // Analyse ...
ENUM_TIMEFRAMES analysePeriod = GetAnalysePeriod(period);
// mAnalysePOIDetector = new XCPOIDetector(
m1DPOI.Init();
//
// 4H Period ...
// POI Detector ...
m4HPOI = new XCPOIDetector(
symbol, symbol,
PERIOD_H4 // analysePeriod //
); );
mAnalysePOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
mAnalysePOIDetector.Init();
// //
m4HPOI.MaxNumberOfRequiredPOIs(poiRequired); // Vision ...
ENUM_TIMEFRAMES visionPeriod = GetVisionPeriod(period);
// mVisionPOIDetector = new XCPOIDetector(
m4HPOI.Init();
//
// 2H Period ...
// POI Detector ...
m2HPOI = new XCPOIDetector(
symbol, symbol,
PERIOD_H2 // visionPeriod //
); );
mVisionPOIDetector.MaxNumberOfRequiredPOIs(poiRequired);
// mVisionPOIDetector.Init();
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();
// //
} }
@@ -1692,11 +1558,9 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
void DeInit() void DeInit()
{ {
// //
delete m1DPOI; delete mTriggerPOIDetector;
delete m4HPOI; delete mAnalysePOIDetector;
delete m5MPOI; delete mVisionPOIDetector;
delete m1MPOI;
delete m15MPOI;
// //
delete mPOIDrawer; delete mPOIDrawer;
+149
View File
@@ -619,6 +619,155 @@ typedef void (*TOnX121SMCSignal)(
X121SMCStrategyConditions &conditions // 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 ... // Extentions ...
File diff suppressed because it is too large Load Diff