cleanup workspace ...

This commit is contained in:
2024-06-11 22:50:23 +03:30
parent 79b12c390d
commit e023518bba
11 changed files with 0 additions and 14476 deletions
-539
View File
@@ -819,452 +819,6 @@ struct XPositionTrack
// Type Definitions for XPosition Tracker Events ...
typedef void (*TOnPositionState)(const XPositionTrack &track);
//
// an Struct for Holding Event Handled Items for Position Tracker ...
struct XPositionTrackerState
{
//
XPositionTrack inProfits[];
XPositionTrack inDrawdowns[];
//
XPositionTrack onProfits[];
XPositionTrack onDrawdowns[];
//
XPositionTrackerState()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
Clean(inProfits);
Clean(inDrawdowns);
//
Clean(onProfits);
Clean(onDrawdowns);
}
};
//
// Position Tracker Class ...
class XSCPositionTracker
{
//
// Public ...
public:
//
// Props ...
//
// Constructor ...
void XSCPositionTracker(bool cleanStore = false)
{
//
XSCDataCollector<XPositionTrack> mBase;
//
if (cleanStore)
{
mBase.Clear();
}
}
//
// Tools ...
//
// Cleaning Store ...
void Clear()
{
//
XSCDataCollector<XPositionTrack> mBase;
//
mBase.Clear();
}
//
// Collect All Store ...
int Collect(XPositionTrack &result[])
{
//
int mResult = 0;
//
XSCDataCollector<XPositionTrack> mBase;
//
mResult = mBase.Collect(result);
//
return mResult;
}
//
// Add Item To Store ...
bool Add(XPositionTrack &item)
{
//
bool result = false;
//
XSCDataCollector<XPositionTrack> mBase;
//
result = mBase.Add(item);
//
return result;
}
//
// Add Item(s) To Store ...
int Add(XPositionTrack &items[])
{
//
int result = 0;
//
XSCDataCollector<XPositionTrack> mBase;
//
result = mBase.Add(items);
//
return result;
}
//
// Remove an Item from Store ...
bool Remove(XPositionTrack &item)
{
//
bool result = false;
//
XSCDataCollector<XPositionTrack> mBase;
//
result = mBase.Remove(item);
//
return result;
}
//
// Custom Functions ...
//
// Sync all Content using Specific Trader Class ...
int Sync(
XPositionTrackerState &state, // Hold all Changes State ...
XSCTrade *mTrader // XSCTrade Instance for Synchronize ...
)
{
//
int result = 0;
//
XPosition positions[];
int positionsCount = mTrader.GetPositions(positions);
//
ulong trackTickets[];
XPositionTrack trackers[];
int trackersCount = Collect(trackers);
//
// Nothing to Do ...
if (positionsCount <= 0 && trackersCount <= 0)
{
return result;
}
//
// Collect Exists Trackers Ticket's For Managing ...
for (int i = 0; i < trackersCount; i++)
{
//
XPositionTrack iTrack = trackers[i];
//
bool isValid = iTrack.IsValid();
if (isValid)
{
//
AddSpecific(
iTrack.ticket,
trackTickets //
);
}
}
//
// Clear Tracker Store for Update Later ...
Clear();
//
// Collect All Required to Add/Update Trackers here ...
XPositionTrack syncedTracks[];
//
// a Flag for Synchronization Performance ...
bool hasTracker = trackersCount > 0;
//
// Loop through Position for Managing Trackers ...
for (int i = 0; i < positionsCount; i++)
{
//
XPosition iPosition = positions[i];
//
// if there isn't any Track before ...
if (!hasTracker)
{
//
XPositionTrack iTrack;
bool isInited = iTrack.Init(iPosition);
if (isInited)
{
//
AddRef(
iTrack,
syncedTracks //
);
//
FillState(
iTrack,
state //
);
}
//
continue;
}
//
// if there was some tracks ...
//
// Try to Find Position Ticket in Track Tickets ...
int iTicketIdx = FindIndex(
iPosition.ticket,
trackTickets //
);
bool isTrackedBefore = iTicketIdx >= 0;
//
// Add new Track ...
if (!isTrackedBefore)
{
//
XPositionTrack iTrack;
bool isInited = iTrack.Init(iPosition);
if (isInited)
{
//
AddRef(
iTrack,
syncedTracks //
);
//
FillState(
iTrack,
state //
);
}
}
//
// Update Exists Track ...
else
{
//
XPositionTrack iTrack = trackers[iTicketIdx];
bool isUpdated = iTrack.Update(iPosition);
if (isUpdated)
{
//
AddRef(
iTrack,
syncedTracks //
);
//
FillState(
iTrack,
state //
);
}
}
}
//
// Check Synced Tracks ...
int syncedTracksCount = ArraySize(syncedTracks);
if (syncedTracksCount <= 0)
{
return result;
}
//
result = Add(syncedTracks);
//
return result;
}
//
// Event Handlers ...
//
// Add Profit Event Handler ...
void AddOnProfitEventHandler(TOnPositionState handler)
{
//
AddSpecific(
handler,
mOnProfitEventHandlers //
);
}
//
// Add Drawdown Event Handler ...
void AddOnDrawdownEventHandler(TOnPositionState handler)
{
//
AddSpecific(
handler,
mOnDrawdownEventHandlers //
);
}
//
// Protected ...
protected:
//
// Tools ...
//
// Event Handlers ...
//
// OnProfit ...
void NotifyOnProfitEvent(XPositionTrack &track)
{
//
int count = ArraySize(mOnProfitEventHandlers);
if (count <= 0)
{
return;
}
//
for (int i = 0; i < count; i++)
{
//
TOnPositionState iHandler = mOnProfitEventHandlers[i];
iHandler(track);
}
}
//
// OnDrawdown ...
void NotifyOnDrawdownEvent(XPositionTrack &track)
{
//
int count = ArraySize(mOnDrawdownEventHandlers);
if (count <= 0)
{
return;
}
//
for (int i = 0; i < count; i++)
{
//
TOnPositionState iHandler = mOnDrawdownEventHandlers[i];
iHandler(track);
}
}
//
// Private ...
private:
//
// Props ...
//
TOnPositionState mOnProfitEventHandlers[];
TOnPositionState mOnDrawdownEventHandlers[];
//
void FillState(
XPositionTrack &track,
XPositionTrackerState &state //
)
{
//
// In Profit ...
bool isInProfit = track.profit[0] > 0;
if (isInProfit)
{
//
AddRef(
track,
state.inProfits //
);
}
//
// In Drawdown ...
bool isInDrawdown = track.profit[0] < 0;
if (isInDrawdown)
{
//
AddRef(
track,
state.inDrawdowns //
);
}
//
// On Profit ...
bool isOnProfit = track.IsCrossedInProfit();
if (isOnProfit)
{
//
AddRef(
track,
state.onProfits //
);
}
//
// On Drawdown ...
bool isOnDrawdown = track.IsCrossedInDrawdown();
if (isOnDrawdown)
{
//
AddRef(
track,
state.onDrawdowns //
);
}
}
};
//
class XSCPositionHolder
{
@@ -2212,18 +1766,6 @@ public:
{
mTrader.AddOnTradeStateChangedEventHandler(mOnTradeStateChangedHandler);
}
//
// Instantiate XPositionTracker Class ...
mPositionTracker = new XSCPositionTracker();
//
// Do Synchronisation after Instantiate everything ...
XPositionTrackerState state;
mPositionTracker.Sync(
state,
mTrader //
);
}
//
@@ -2232,7 +1774,6 @@ public:
{
//
delete mTrader;
delete mPositionTracker;
}
//
@@ -2605,7 +2146,6 @@ protected:
//
// Trade Class Instance ...
XSCTrade *mTrader;
XSCPositionTracker *mPositionTracker;
//
// Check in Test Mode or not ...
@@ -3025,85 +2565,6 @@ protected:
}
}
//
// Synchronize Positions and Position Tracker ...
void SyncPositionTracker()
{
//
// Check Syncing Interval ...
//
static datetime lastSyncPositionTracker = NULL;
datetime cTime = TimeCurrent();
//
int syncInterval = PeriodSeconds(PERIOD_M5);
int lastDiff = (int)cTime - (int)lastSyncPositionTracker;
//
bool canSync =
//
lastSyncPositionTracker == NULL
? true
: lastDiff >= syncInterval
//
;
if (!canSync)
{
return;
}
//
lastSyncPositionTracker = cTime;
//
// Do Sync ...
//
XPositionTrackerState state;
int synced = mPositionTracker.Sync(
state,
mTrader //
);
if (synced > 0)
{
//
// Check State and Do What we Want ...
int onProfitsCount = ArraySize(state.onProfits);
int onDrawdownCount = ArraySize(state.onDrawdowns);
//
// Do What we want whe a Position Dropped to Prefit ...
if (onProfitsCount > 0)
{
//
for (int i = 0; i < onProfitsCount; i++)
{
//
XPositionTrack iTrack = state.onProfits[i];
//
OnPositionGoingInProfit(iTrack);
}
}
//
// Do what we want when a Position Dropped to Drawdown ...
if (onDrawdownCount > 0)
{
//
for (int i = 0; i < onDrawdownCount; i++)
{
//
XPositionTrack iTrack = state.onDrawdowns[i];
//
OnPositionGoingToDrawdown(iTrack);
}
}
}
}
//
// Guards ...