last ...
This commit is contained in:
@@ -89,14 +89,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
return mPeriod;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve POI Drawer Instance Pointer ...
|
||||
**/
|
||||
XCPOIDrawer *GetDrawer()
|
||||
{
|
||||
return mPOIDrawer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Strategy is Disabled or not ...
|
||||
*
|
||||
@@ -107,68 +99,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
return mForceDisabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Chart Id ...
|
||||
*
|
||||
* @return ( long )
|
||||
*/
|
||||
long ChartIdentification()
|
||||
{
|
||||
return mChartID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Chart Id ...
|
||||
*
|
||||
* @param value: Long ...
|
||||
*/
|
||||
void ChartIdentification(long value)
|
||||
{
|
||||
//
|
||||
if (value < 0)
|
||||
{
|
||||
value = 0;
|
||||
}
|
||||
|
||||
//
|
||||
mChartID = value;
|
||||
if (mPOIDrawer != NULL)
|
||||
{
|
||||
mPOIDrawer.ChartIdentification(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Sub Window Id ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int SubWindowIdentification()
|
||||
{
|
||||
return mSubWindow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Sub Window Id ...
|
||||
*
|
||||
* @param value: Integer ...
|
||||
*/
|
||||
void SubWindowIdentification(int value)
|
||||
{
|
||||
//
|
||||
if (value < 0)
|
||||
{
|
||||
value = 0;
|
||||
}
|
||||
|
||||
//
|
||||
mSubWindow = value;
|
||||
if (mPOIDrawer != NULL)
|
||||
{
|
||||
mPOIDrawer.SubWindowIdentification(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Signal Volume ...
|
||||
*
|
||||
@@ -243,60 +173,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
mMaxAllowedSpread = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Min Required Ticks Verification for Spread Pass ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int MinRequiredTicksForSpreadPass()
|
||||
{
|
||||
return mMinRequiredTicksForSpreadPass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Min Required Ticks Verification for Spread Pass ...
|
||||
*
|
||||
* @param value: Integer ...
|
||||
*/
|
||||
void MinRequiredTicksForSpreadPass(int value)
|
||||
{
|
||||
//
|
||||
if (value < 100)
|
||||
{
|
||||
value = 100;
|
||||
}
|
||||
|
||||
//
|
||||
mMinRequiredTicksForSpreadPass = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Max Allowed Save Ticks ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int MaxAllowedSaveTicks()
|
||||
{
|
||||
return mMaxAllowedSaveTicks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Max Allowed Save Ticks ...
|
||||
*
|
||||
* @param value: Integer ...
|
||||
*/
|
||||
void MaxAllowedSaveTicks(int value)
|
||||
{
|
||||
//
|
||||
if (value < 150)
|
||||
{
|
||||
value = 150;
|
||||
}
|
||||
|
||||
//
|
||||
mMaxAllowedSaveTicks = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Long Signalling State ...
|
||||
*
|
||||
@@ -425,7 +301,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
//
|
||||
// Update Last Issued Tick ...
|
||||
mLastTick = cTick;
|
||||
SaveTickData();
|
||||
|
||||
//
|
||||
// Check Current Processing Tick has Signal or not ...
|
||||
@@ -586,11 +461,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
// Props ...
|
||||
|
||||
//
|
||||
XCPOIDrawer *mPOIDrawer; // POI Drawer Class ...
|
||||
CArrayObj mDrawnObjects;
|
||||
|
||||
//
|
||||
XTick mTicks[]; // Hold Ticks Data ...
|
||||
MqlTick mLastTick; // Last Issued Tick ...
|
||||
|
||||
//
|
||||
@@ -601,81 +471,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
//
|
||||
// Actions ...
|
||||
|
||||
/**
|
||||
* Check Spread Passed for Positions...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsSpreadPass()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
double pointValue = GetPoints(mSymbol);
|
||||
double maxAllowedSpread = MaxAllowedSpread();
|
||||
int minRequiredTicksVerification = MinRequiredTicksForSpreadPass();
|
||||
if (maxAllowedSpread > 0)
|
||||
{
|
||||
maxAllowedSpread *= pointValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
maxAllowedSpread = 0;
|
||||
}
|
||||
|
||||
//
|
||||
result = maxAllowedSpread <= 0
|
||||
? true
|
||||
: minRequiredTicksVerification > 0;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int ticksCount = ArraySize(mTicks);
|
||||
result = ticksCount >= minRequiredTicksVerification;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (maxAllowedSpread > 0)
|
||||
{
|
||||
//
|
||||
int end = -1;
|
||||
int start = -1;
|
||||
result = CalculateTicksParams(
|
||||
start,
|
||||
end,
|
||||
minRequiredTicksVerification //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = start; i < end; i++)
|
||||
{
|
||||
//
|
||||
XTick iTick = mTicks[i];
|
||||
|
||||
//
|
||||
result = iTick.spread <= maxAllowedSpread;
|
||||
if (!result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare and Normalize Signal for Execution in Strategy ...
|
||||
*
|
||||
@@ -751,126 +546,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Draw Functions ...
|
||||
|
||||
/**
|
||||
* Clear all Drawn Objects ...
|
||||
*/
|
||||
void ClearDraws()
|
||||
{
|
||||
mDrawnObjects.Clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove Specified Drawn Object ...
|
||||
*
|
||||
* @param name: Object name ...
|
||||
*/
|
||||
void RemoveObject(string name)
|
||||
{
|
||||
//
|
||||
if (!IsValid(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int count = mDrawnObjects.Total();
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int idx = -1;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
string iName = ((CChartObject *)mDrawnObjects.At(i)).Name();
|
||||
string iObjName = NULL;
|
||||
if (!IsValid(iName))
|
||||
{
|
||||
iObjName = ((XCBaseObject *)mDrawnObjects.At(i)).ObjName();
|
||||
}
|
||||
|
||||
//
|
||||
if ((IsValid(iName) &&
|
||||
iName == name) ||
|
||||
(IsValid(iObjName) &&
|
||||
iObjName == name))
|
||||
{
|
||||
//
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (IsValidIndex(idx))
|
||||
{
|
||||
mDrawnObjects.Delete(idx);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Specified Object to Drawn Objects if not Exists ...
|
||||
*/
|
||||
void AddObjectIfNotExists(XCBaseObject *object)
|
||||
{
|
||||
//
|
||||
string name = object.ObjName();
|
||||
|
||||
//
|
||||
bool canAdd = true;
|
||||
int count = mDrawnObjects.Total();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
string iName = ((XCBaseObject *)mDrawnObjects.At(i)).ObjName();
|
||||
|
||||
//
|
||||
if (name == iName)
|
||||
{
|
||||
//
|
||||
canAdd = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (canAdd)
|
||||
{
|
||||
mDrawnObjects.Add(object);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Specified Objects to Drawn Objects if not Exists ...
|
||||
*/
|
||||
void AddObjectsIfNotExists(XCBaseObject *&objects[])
|
||||
{
|
||||
//
|
||||
int count = ArraySize(objects);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
AddObjectIfNotExists(objects[i]);
|
||||
}
|
||||
|
||||
//
|
||||
Clean(objects);
|
||||
}
|
||||
|
||||
//
|
||||
// Private ...
|
||||
private:
|
||||
@@ -887,13 +562,7 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
double mVolume; // Static Volume Per Trades ...
|
||||
|
||||
//
|
||||
double mMaxAllowedSpread; // Max Allowed Spread ...
|
||||
int mMinRequiredTicksForSpreadPass; // Min Required Ticks Verification for Spread Pass ...
|
||||
int mMaxAllowedSaveTicks; // Max Allowed Save Ticks ...
|
||||
|
||||
//
|
||||
long mChartID; // Chart ID ...
|
||||
int mSubWindow; // Sub Window ID ...
|
||||
double mMaxAllowedSpread; // Max Allowed Spread ...
|
||||
|
||||
//
|
||||
// On X121 Signal Recieved Event Handler(s) ...
|
||||
@@ -913,28 +582,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
//
|
||||
R2R(1);
|
||||
Volume(0.01);
|
||||
MaxAllowedSaveTicks(150);
|
||||
MinRequiredTicksForSpreadPass(100);
|
||||
|
||||
//
|
||||
ChartIdentification(0);
|
||||
SubWindowIdentification(0);
|
||||
|
||||
//
|
||||
// Configure POI Drawer if Required ...
|
||||
mPOIDrawer = new XCPOIDrawer();
|
||||
mPOIDrawer.ChartIdentification(0);
|
||||
mPOIDrawer.SubWindowIdentification(0);
|
||||
|
||||
//
|
||||
mPOIDrawer.DemandZoneFill(false);
|
||||
mPOIDrawer.SupplyZoneFill(false);
|
||||
mPOIDrawer.BullishFVGFill(false);
|
||||
mPOIDrawer.BearishFVGFill(false);
|
||||
mPOIDrawer.SupportZoneFill(false);
|
||||
mPOIDrawer.ResistanceZoneFill(false);
|
||||
mPOIDrawer.BullishOrderBlockFill(false);
|
||||
mPOIDrawer.BearishOrderBlockFill(false);
|
||||
|
||||
//
|
||||
string symbol = Symbol();
|
||||
@@ -966,15 +613,12 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
void DeInit()
|
||||
{
|
||||
//
|
||||
ZeroMemory(mPOIDrawer);
|
||||
ZeroMemory(mBarAnalyser);
|
||||
|
||||
//
|
||||
delete mPOIDrawer;
|
||||
delete mBarAnalyser;
|
||||
|
||||
//
|
||||
Clean(mTicks);
|
||||
Clean(mSignalEventHandlers);
|
||||
|
||||
//
|
||||
@@ -989,90 +633,6 @@ class XCX121SMCBaseStrategy : public XCBaseAlert
|
||||
mBarTracker.Clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new Tick Data to Collection ...
|
||||
*/
|
||||
void SaveTickData()
|
||||
{
|
||||
//
|
||||
XTick tick;
|
||||
bool isInited = tick.Init(mSymbol);
|
||||
if (!isInited)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int beforeCount = ArraySize(mTicks);
|
||||
|
||||
//
|
||||
AddRef(
|
||||
tick,
|
||||
mTicks //
|
||||
);
|
||||
|
||||
//
|
||||
int afterCount = ArraySize(mTicks);
|
||||
|
||||
//
|
||||
bool isAdded = afterCount == beforeCount + 1;
|
||||
if (isAdded)
|
||||
{
|
||||
//
|
||||
// Cleaning Up Unused Items ...
|
||||
int maxAllowed = MaxAllowedSaveTicks();
|
||||
CleanupArray(
|
||||
mTicks,
|
||||
maxAllowed //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate Ticks Param for Looping through Last n items ...
|
||||
*
|
||||
* @param start: Integer Reference to Start ...
|
||||
* @param end: Integer Reference to End ...
|
||||
* @param numOfLastTicks: Integer Max Number of Required N Last Ticks ...
|
||||
*/
|
||||
bool CalculateTicksParams(
|
||||
int &start,
|
||||
int &end,
|
||||
int numOfLastTicks = 5 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = 0;
|
||||
|
||||
//
|
||||
start = -1;
|
||||
end = -1;
|
||||
|
||||
//
|
||||
int count = ArraySize(mTicks);
|
||||
|
||||
//
|
||||
start = count - numOfLastTicks;
|
||||
if (start < 0)
|
||||
{
|
||||
start = 0;
|
||||
}
|
||||
|
||||
//
|
||||
end = start + numOfLastTicks;
|
||||
if (end > count)
|
||||
{
|
||||
end = count;
|
||||
}
|
||||
|
||||
//
|
||||
result = IsValidIndex(start) &&
|
||||
IsValidIndex(end);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
//
|
||||
#include "../../Classes/x-saherelm.x-alert.class.mq5"
|
||||
#include "../../Classes/x-saherelm.x-bar.analyser.class.mq5"
|
||||
#include "../../Classes/x-saherelm.x-poi.drawer.class.mq5"
|
||||
#include "../../Classes/x-saherelm.x-trade.class.mq5"
|
||||
#include "../Libraries/x-121.smc.lib.mq5"
|
||||
|
||||
@@ -1639,9 +1638,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
Clean(mSymbolInfos);
|
||||
Clean(mLastExecutedSignals);
|
||||
|
||||
//
|
||||
delete mDrawer;
|
||||
|
||||
//
|
||||
delete mTrader;
|
||||
delete mCollector;
|
||||
@@ -2220,32 +2216,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
mHedgeingMinRequiredProfitPerVolumeStep = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get POI Drawer instance Pointer ...
|
||||
*/
|
||||
XCPOIDrawer *GetDrawer()
|
||||
{
|
||||
return mDrawer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get POI Drawer instance Pointer ...
|
||||
*/
|
||||
void SetDrawer(XCPOIDrawer *drawer)
|
||||
{
|
||||
mDrawer = drawer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Darwer Exists Before Draw anything ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool CanDraw()
|
||||
{
|
||||
return mDrawer != NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Actions ...
|
||||
|
||||
@@ -3175,12 +3145,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
//
|
||||
// Add XTradeHandler Data ...
|
||||
Add(signal);
|
||||
if (CanDraw())
|
||||
{
|
||||
//
|
||||
XCSignalObject *iObj;
|
||||
mDrawer.DrawSignal(signal, iObj);
|
||||
}
|
||||
|
||||
//
|
||||
// Handle Last Executed Signal ...
|
||||
@@ -3281,12 +3245,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
//
|
||||
// Add XTradeHandler Data ...
|
||||
Add(signal);
|
||||
if (CanDraw())
|
||||
{
|
||||
//
|
||||
XCSignalObject *iObj;
|
||||
mDrawer.DrawSignal(signal, iObj);
|
||||
}
|
||||
|
||||
//
|
||||
// Handle Last Executed Signal ...
|
||||
@@ -3895,9 +3853,6 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
double mHedgingMinVolumeStep; // Minimum Volume Step for Hedging ...
|
||||
double mHedgeingMinRequiredProfitPerVolumeStep; // Minimum Required Profit Per Volume Step for Hedging ...
|
||||
|
||||
//
|
||||
XCPOIDrawer *mDrawer;
|
||||
|
||||
//
|
||||
// Common Functions ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user