Warrior_EA/Expert/Features/AIBaseFeaturesViewImpl.mqh
AnimateDread b2784b5a4d Enhance Feature and Topology Interfaces with Bulk Operations and Cache Management
- Added bulk read/write methods for feature caches in IFeaturesView and its implementations to optimize performance.
- Introduced LabelCacheInvalidateAll method to manage label cache invalidation alongside feature cache.
- Implemented PooledIndependentBars method in topology interfaces to account for additional independent observations.
- Enhanced risk budget management with throttling for peak-equity updates to reduce unnecessary file operations.
- Improved error handling and logging for ATR trailing stops to ensure better visibility of issues.
- Updated alt-data handling to prevent unnecessary operations during testing and optimization phases.
2026-08-25 22:51:50 -04:00

149 lines
10 KiB
MQL5

//+------------------------------------------------------------------+
//| Warrior_EA |
//| AnimateDread |
//| |
//| CAIBaseFeaturesView bodies - needs the full signal declaration. |
//| Same doctrine as Topology\AIBaseTopologyViewImpl.mqh - every |
//| method is a forward, borrowed pointer checked on every call. |
//+------------------------------------------------------------------+
#ifndef WARRIOR_FEATURES_AIBASEFEATURESVIEWIMPL_MQH
#define WARRIOR_FEATURES_AIBASEFEATURESVIEWIMPL_MQH
string CAIBaseFeaturesView::Id(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataId() : ""; }
string CAIBaseFeaturesView::SymbolName(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartSymbolName() : _Symbol; }
ENUM_TIMEFRAMES CAIBaseFeaturesView::Timeframe(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartTimeframe() : PERIOD_CURRENT; }
int CAIBaseFeaturesView::HistoryBars(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataHistoryBars() : 0; }
int CAIBaseFeaturesView::NeuronsCount(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataFeaturesPerBar() : 0; }
int CAIBaseFeaturesView::LabelResolutionBars(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataLabelResolutionBars() : 1; }
double CAIBaseFeaturesView::EffectiveSampleSize(const double rawN)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataEffectiveSampleSize(rawN) : rawN; }
double CAIBaseFeaturesView::MeanLabelLifespan(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureMeanLabelLifespan() : 1.0; }
int CAIBaseFeaturesView::FirstLayerFanIn(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureFirstLayerFanIn() : 0; }
double CAIBaseFeaturesView::SwingLifespanEstimate(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureSwingLifespanEstimate() : 1.0; }
double CAIBaseFeaturesView::EstimatedInSampleBarsRaw(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureEstimatedInSampleBarsRaw() : 0.0; }
double CAIBaseFeaturesView::ChanceRatePct(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureChanceRatePct() : -1.0; }
bool CAIBaseFeaturesView::UseAltData(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.TopologyUseAltData() : false; }
int CAIBaseFeaturesView::SwingConfirmationBars(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.SwingConfirmationBars() : 0; }
int CAIBaseFeaturesView::NewsFeatureWindowMinutes(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.NewsFeatureWindowMinutes() : 0; }
int CAIBaseFeaturesView::InitialNeuronsCount(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.TopologyInitialNeuronsCount() : 0; }
string CAIBaseFeaturesView::ActiveFileName(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineActiveFileName() : ""; }
bool CAIBaseFeaturesView::UseVolumes(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseVolumes() : false; }
bool CAIBaseFeaturesView::UseMA(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseMA() : false; }
bool CAIBaseFeaturesView::UseATR(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseATR() : false; }
bool CAIBaseFeaturesView::UseTime(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseTime() : false; }
bool CAIBaseFeaturesView::UseSwingContext(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseSwingContext() : false; }
bool CAIBaseFeaturesView::UseNews(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseNews() : false; }
bool CAIBaseFeaturesView::UseSpreadFeature(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseSpreadFeature() : false; }
bool CAIBaseFeaturesView::UseCrossAsset(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.UseCrossAsset() : false; }
double CAIBaseFeaturesView::OpenAt(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureOpenAt(idx) : EMPTY_VALUE; }
double CAIBaseFeaturesView::HighAt(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureHighAt(idx) : EMPTY_VALUE; }
double CAIBaseFeaturesView::LowAt(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureLowAt(idx) : EMPTY_VALUE; }
double CAIBaseFeaturesView::CloseAt(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartBarClose(idx) : EMPTY_VALUE; }
datetime CAIBaseFeaturesView::TimeAt(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartBarTime(idx) : 0; }
double CAIBaseFeaturesView::AtrMain(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineAtrMain(idx) : EMPTY_VALUE; }
int CAIBaseFeaturesView::AtrBarsCalculated(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureAtrBarsCalculated() : -1; }
int CAIBaseFeaturesView::AtrHandle(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureAtrHandle() : INVALID_HANDLE; }
int CAIBaseFeaturesView::ZigZagBarsCalculated(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureZigZagBarsCalculated() : -1; }
int CAIBaseFeaturesView::ZigZagHandle(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureZigZagHandle() : INVALID_HANDLE; }
bool CAIBaseFeaturesView::FindConfirmedZigZagPivot(const int fromIdx, int &pivotIdx, double &pivotPrice, bool &pivotIsLow)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureFindConfirmedZigZagPivot(fromIdx, pivotIdx, pivotPrice, pivotIsLow) : false; }
double CAIBaseFeaturesView::SymbolPoint(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureSymbolPoint() : 0.0; }
CIndicators *CAIBaseFeaturesView::IndicatorsPtr(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureIndicatorsPtr() : NULL; }
CADIndicatorTuner *CAIBaseFeaturesView::IndicatorTuner(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureIndicatorTuner() : NULL; }
CCrossAssetPanel *CAIBaseFeaturesView::CrossAsset(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCrossAsset() : NULL; }
int CAIBaseFeaturesView::AltDataFeatureCount(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureAltDataFeatureCount() : 0; }
void CAIBaseFeaturesView::AltDataEnsureFresh(const datetime asOf)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureAltDataEnsureFresh(asOf); }
void CAIBaseFeaturesView::AltDataFeatures(const datetime t, double &out[])
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureAltDataFeatures(t, out); }
string CAIBaseFeaturesView::CrossAssetPairsPinned(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.PersistCrossAssetPairsPinned() : ""; }
void CAIBaseFeaturesView::SetCrossAssetPairsPinned(const string v)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.PersistSetCrossAssetPairsPinned(v); }
bool CAIBaseFeaturesView::CrossAssetCfgSaved(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.PersistCrossAssetCfgSaved() : false; }
void CAIBaseFeaturesView::SetCrossAssetCfgSaved(const bool v)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.PersistSetCrossAssetCfgSaved(v); }
bool CAIBaseFeaturesView::CommitCrossAssetPin(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCommitCrossAssetPin() : false; }
int CAIBaseFeaturesView::FeatureCacheSize(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCacheSize() : 0; }
bool CAIBaseFeaturesView::FeatureCacheHasValue(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCacheHasValue(idx) : false; }
bool CAIBaseFeaturesView::FeatureCacheIsValid(const int idx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCacheIsValid(idx) : false; }
double CAIBaseFeaturesView::FeatureCacheAt(const int flatIdx)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.FeatureCacheAt(flatIdx) : 0.0; }
void CAIBaseFeaturesView::FeatureCacheBlock(const int base, const int count, double &out[])
{
if(CheckPointer(m_owner) != POINTER_INVALID)
m_owner.FeatureCacheBlock(base, count, out);
else
ArrayResize(out, 0);
}
void CAIBaseFeaturesView::FeatureCacheSetAt(const int flatIdx, const double v)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureCacheSetAt(flatIdx, v); }
void CAIBaseFeaturesView::FeatureCacheSetBlock(const int base, const int count, const double &values[])
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureCacheSetBlock(base, count, values); }
void CAIBaseFeaturesView::FeatureCacheMarkStored(const int idx)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureCacheMarkStored(idx); }
void CAIBaseFeaturesView::FeatureCacheInvalidateAll(void)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureCacheInvalidateAll(); }
void CAIBaseFeaturesView::LabelCacheInvalidateAll(void)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.LabelCacheInvalidateAll(); }
void CAIBaseFeaturesView::SetFailBlock(const string block)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureSetFailBlock(block); }
void CAIBaseFeaturesView::SetFailIdx(const int idx)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureSetFailIdx(idx); }
void CAIBaseFeaturesView::SetWindowFail(const int slot, const int total)
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.FeatureSetWindowFail(slot, total); }
CArrayDouble *CAIBaseFeaturesView::TempData(void)
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataTempData() : NULL; }
#endif // WARRIOR_FEATURES_AIBASEFEATURESVIEWIMPL_MQH
//+------------------------------------------------------------------+