last ...
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user