forked from animatedread/Warrior_EA
- 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.
149 lines
10 KiB
MQL5
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
|
|
//+------------------------------------------------------------------+
|