refactor(online-learning): OnlineLearning is a real collaborator, not a raw-include partial (S5)
Expert\AIBase\OnlineLearning.mqh (595 lines) -> Expert\OnlineLearning\:
IOnlineLearningView.mqh (abstract, ~50 accessors) + AIBaseOnlineLearningView.mqh/
AIBaseOnlineLearningViewImpl.mqh (the adapter) + OnlineLearning.mqh (COnlineLearning).
STATEFUL, unlike CModelPersistence: grep-verified the shadow net, the OOS
continual-learning simulation state and the pattern-database backfill state are
genuinely exclusive to this file's own methods - Training.mqh/Topology.mqh/
Lifecycle.mqh/the signal's own header only ever CHECKED or RESET this state at
era/lifecycle boundaries, never owned it, so it moved onto the collaborator as
real members (same doctrine as Excursion). Those external touch points became
consolidated view/forward calls instead of raw field pokes - AbortSimIfActive()
replaces THREE separate copies of the same delete/null/false triple (Training.mqh's
stop path, FlushTrainRun, ResetWeights), matching the geometry-scan duplicate-reset
precedent in project memory. ResetForFreshTopology() replaces Topology.mqh's five-
field reset block, DeployNet() replaces the shadow-preferred net selection duplicated
in Inference.mqh and ChartScoreBarForRescan, and BlendTowardNet() replaces the era-end
blend Training.mqh used to poke m_shadowNet for directly.
Reused the signal's existing Data*()/Chart*()/Persist*() getters wherever one already
answered the question (labels/outcome/history/horizon/priors/servable-bars/etc.);
added ~30 new Online*() wrappers only for what nothing else exposed yet. The three
PersistOnline*() get/set pairs (WST3 .stats fields) now forward through the owning
member instead of touching the field directly - CModelPersistence is unaffected.
Every method body is a pure relocation of the original's statements in original
order; verified against `git show HEAD~1:Expert/AIBase/Excursion.mqh`-style diff
against the pre-extraction file kept in the working tree until this commit.
Compiled 0 errors, 0 warnings (stage mirror + MetaEditor64 /compile, ~91s).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 22:59:02 -04:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Warrior_EA |
|
|
|
|
|
//| AnimateDread |
|
|
|
|
|
//| |
|
|
|
|
|
//| CAIBaseOnlineLearningView bodies - needs the full signal |
|
|
|
|
|
//| declaration. Same doctrine as Persistence\AIBasePersistenceViewImpl.mqh - |
|
|
|
|
|
//| every method is a forward, borrowed pointer checked on every call.|
|
|
|
|
|
//| Reuses the signal's existing Data*()/Chart*()/Persist*() getters |
|
|
|
|
|
//| wherever one already answers the question; the rest are new |
|
|
|
|
|
//| Online*() wrappers published next to them. |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#ifndef WARRIOR_ONLINELEARNING_AIBASEONLINELEARNINGVIEWIMPL_MQH
|
|
|
|
|
#define WARRIOR_ONLINELEARNING_AIBASEONLINELEARNINGVIEWIMPL_MQH
|
|
|
|
|
string CAIBaseOnlineLearningView::Id(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataId() : ""; }
|
|
|
|
|
string CAIBaseOnlineLearningView::ActiveFileName(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineActiveFileName() : ""; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::ActiveFileCommon(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineActiveFileCommon() : false; }
|
|
|
|
|
long CAIBaseOnlineLearningView::EraCount(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartEraCount() : 0; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::TrainingComplete(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartTrainingComplete() : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::IsEnsembleMember(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataIsEnsembleMember() : false; }
|
|
|
|
|
double CAIBaseOnlineLearningView::ErrorPct(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartErrorPct() : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::UndefinePct(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineDUndefine() : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::Forecast(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartForecast() : 0.0; }
|
|
|
|
|
datetime CAIBaseOnlineLearningView::StudiedTime(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineDtStudied() : 0; }
|
|
|
|
|
CNet *CAIBaseOnlineLearningView::NetPtr(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineNet() : NULL; }
|
|
|
|
|
CArrayDouble *CAIBaseOnlineLearningView::TempData(void)
|
feat(target): delete the barrier/geometry stack - the label is the verdict
Step 3 of the swing-pivot plan, whole-hog. The swing label is now the ONE
target and the era verdict is precision + recall per class against the
label's own base rate - no win rate, no break-even, no expectancy, no
geometry anywhere in training.
DELETED
- Expert/Excursion/ (4), Expert/BarrierHorizon/ (4), GeometrySweep,
FirstPassageLadder, Labeling/TripleBarrier.mqh (CLabelOverlap survives
in Labeling/LabelOverlap.mqh), 3 test EAs.
- TripleBarrierLabel + walk, fractal label, geometry derivation/scan/
adoption, exit-policy replay, excursion MI targets, the drift verdict
(DIRECTION_INTELLIGENT), the recall floor, balanced-accuracy telemetry,
the barrier defines, the .cfg geometry adopt (slots kept as zeros for
the positional layout), the derived-geometry live-order override.
- TRAINING_TARGET input/enum: direction models are always swing; META2
re-keys the meta head onto label agreement (descriptor loses its two
geometry slots).
REWORKED
- Labels.mqh (1795 -> ~370 lines): AdvanceSwingLabelState with
FINALITY-GATED CACHING - an unresolved bar (pivot pair uncommitted) is
never cached, so it can never freeze as a false Neutral; training,
calibration, OOS scoring and online learning all skip unresolved bars.
- SDeployVerdict: significance-only; SOosTally chance = larger
directional class share; pooled gate poolability = timeframe (record v2).
- Purge/embargo/declustering gaps: the measured mean label resolution
lag (LabelResolutionBars), not a barrier horizon.
- Pool purge key + backfill DB rows: marked at the bar the label
resolved on (m_labelResolveAge), not a fabricated barrier touch.
- Online learning frontier: finality, not a horizon delay.
- m_bestBalancedOos -> m_bestSelectionScore, m_erasSinceBestBalanced ->
m_erasSinceBest, ensemble vote outcome arrays -> label arrays.
STEP 4 folded in: Entry_Multiplier / SL_Mode / TP_Mode / tradingdirection
are inputs again - trade management is the tester GA's search space.
Fingerprints: every direction model re-keys (TGT:SWG1 now unconditional,
CUT token gone); META1 -> META2. Full retrain, as planned.
Compile-verified in _claude_stage: Warrior_EA + both surviving test EAs,
0 errors, 0 warnings each.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:42:31 -04:00
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataTempData() : NULL; }
|
refactor(online-learning): OnlineLearning is a real collaborator, not a raw-include partial (S5)
Expert\AIBase\OnlineLearning.mqh (595 lines) -> Expert\OnlineLearning\:
IOnlineLearningView.mqh (abstract, ~50 accessors) + AIBaseOnlineLearningView.mqh/
AIBaseOnlineLearningViewImpl.mqh (the adapter) + OnlineLearning.mqh (COnlineLearning).
STATEFUL, unlike CModelPersistence: grep-verified the shadow net, the OOS
continual-learning simulation state and the pattern-database backfill state are
genuinely exclusive to this file's own methods - Training.mqh/Topology.mqh/
Lifecycle.mqh/the signal's own header only ever CHECKED or RESET this state at
era/lifecycle boundaries, never owned it, so it moved onto the collaborator as
real members (same doctrine as Excursion). Those external touch points became
consolidated view/forward calls instead of raw field pokes - AbortSimIfActive()
replaces THREE separate copies of the same delete/null/false triple (Training.mqh's
stop path, FlushTrainRun, ResetWeights), matching the geometry-scan duplicate-reset
precedent in project memory. ResetForFreshTopology() replaces Topology.mqh's five-
field reset block, DeployNet() replaces the shadow-preferred net selection duplicated
in Inference.mqh and ChartScoreBarForRescan, and BlendTowardNet() replaces the era-end
blend Training.mqh used to poke m_shadowNet for directly.
Reused the signal's existing Data*()/Chart*()/Persist*() getters wherever one already
answered the question (labels/outcome/history/horizon/priors/servable-bars/etc.);
added ~30 new Online*() wrappers only for what nothing else exposed yet. The three
PersistOnline*() get/set pairs (WST3 .stats fields) now forward through the owning
member instead of touching the field directly - CModelPersistence is unaffected.
Every method body is a pure relocation of the original's statements in original
order; verified against `git show HEAD~1:Expert/AIBase/Excursion.mqh`-style diff
against the pre-extraction file kept in the working tree until this commit.
Compiled 0 errors, 0 warnings (stage mirror + MetaEditor64 /compile, ~91s).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 22:59:02 -04:00
|
|
|
int CAIBaseOnlineLearningView::OutputNeurons(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartOutputNeuronsCount() : 0; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::BuildFeatureWindow(const int bar)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineBuildFeatureWindow(bar) : false; }
|
|
|
|
|
double CAIBaseOnlineLearningView::ApplyClassificationSoftmax(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineApplyClassificationSoftmax() : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::AdjustedSignalFromSoftmax(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineAdjustedSignalFromSoftmax() : 0.0; }
|
|
|
|
|
ENUM_SIGNAL CAIBaseOnlineLearningView::SignalFromValue(const double v)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartDoubleToSignal(v) : Neutral; }
|
|
|
|
|
ENUM_SIGNAL CAIBaseOnlineLearningView::BarLabel(const int bar)
|
feat(target): delete the barrier/geometry stack - the label is the verdict
Step 3 of the swing-pivot plan, whole-hog. The swing label is now the ONE
target and the era verdict is precision + recall per class against the
label's own base rate - no win rate, no break-even, no expectancy, no
geometry anywhere in training.
DELETED
- Expert/Excursion/ (4), Expert/BarrierHorizon/ (4), GeometrySweep,
FirstPassageLadder, Labeling/TripleBarrier.mqh (CLabelOverlap survives
in Labeling/LabelOverlap.mqh), 3 test EAs.
- TripleBarrierLabel + walk, fractal label, geometry derivation/scan/
adoption, exit-policy replay, excursion MI targets, the drift verdict
(DIRECTION_INTELLIGENT), the recall floor, balanced-accuracy telemetry,
the barrier defines, the .cfg geometry adopt (slots kept as zeros for
the positional layout), the derived-geometry live-order override.
- TRAINING_TARGET input/enum: direction models are always swing; META2
re-keys the meta head onto label agreement (descriptor loses its two
geometry slots).
REWORKED
- Labels.mqh (1795 -> ~370 lines): AdvanceSwingLabelState with
FINALITY-GATED CACHING - an unresolved bar (pivot pair uncommitted) is
never cached, so it can never freeze as a false Neutral; training,
calibration, OOS scoring and online learning all skip unresolved bars.
- SDeployVerdict: significance-only; SOosTally chance = larger
directional class share; pooled gate poolability = timeframe (record v2).
- Purge/embargo/declustering gaps: the measured mean label resolution
lag (LabelResolutionBars), not a barrier horizon.
- Pool purge key + backfill DB rows: marked at the bar the label
resolved on (m_labelResolveAge), not a fabricated barrier touch.
- Online learning frontier: finality, not a horizon delay.
- m_bestBalancedOos -> m_bestSelectionScore, m_erasSinceBestBalanced ->
m_erasSinceBest, ensemble vote outcome arrays -> label arrays.
STEP 4 folded in: Entry_Multiplier / SL_Mode / TP_Mode / tradingdirection
are inputs again - trade management is the tester GA's search space.
Fingerprints: every direction model re-keys (TGT:SWG1 now unconditional,
CUT token gone); META1 -> META2. Full retrain, as planned.
Compile-verified in _claude_stage: Warrior_EA + both surviving test EAs,
0 errors, 0 warnings each.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 20:42:31 -04:00
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineBarLabel(bar) : Undefine; }
|
|
|
|
|
int CAIBaseOnlineLearningView::LabelResolveAge(const int bar)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataLabelResolveAge(bar) : 0; }
|
refactor(online-learning): OnlineLearning is a real collaborator, not a raw-include partial (S5)
Expert\AIBase\OnlineLearning.mqh (595 lines) -> Expert\OnlineLearning\:
IOnlineLearningView.mqh (abstract, ~50 accessors) + AIBaseOnlineLearningView.mqh/
AIBaseOnlineLearningViewImpl.mqh (the adapter) + OnlineLearning.mqh (COnlineLearning).
STATEFUL, unlike CModelPersistence: grep-verified the shadow net, the OOS
continual-learning simulation state and the pattern-database backfill state are
genuinely exclusive to this file's own methods - Training.mqh/Topology.mqh/
Lifecycle.mqh/the signal's own header only ever CHECKED or RESET this state at
era/lifecycle boundaries, never owned it, so it moved onto the collaborator as
real members (same doctrine as Excursion). Those external touch points became
consolidated view/forward calls instead of raw field pokes - AbortSimIfActive()
replaces THREE separate copies of the same delete/null/false triple (Training.mqh's
stop path, FlushTrainRun, ResetWeights), matching the geometry-scan duplicate-reset
precedent in project memory. ResetForFreshTopology() replaces Topology.mqh's five-
field reset block, DeployNet() replaces the shadow-preferred net selection duplicated
in Inference.mqh and ChartScoreBarForRescan, and BlendTowardNet() replaces the era-end
blend Training.mqh used to poke m_shadowNet for directly.
Reused the signal's existing Data*()/Chart*()/Persist*() getters wherever one already
answered the question (labels/outcome/history/horizon/priors/servable-bars/etc.);
added ~30 new Online*() wrappers only for what nothing else exposed yet. The three
PersistOnline*() get/set pairs (WST3 .stats fields) now forward through the owning
member instead of touching the field directly - CModelPersistence is unaffected.
Every method body is a pure relocation of the original's statements in original
order; verified against `git show HEAD~1:Expert/AIBase/Excursion.mqh`-style diff
against the pre-extraction file kept in the working tree until this commit.
Compiled 0 errors, 0 warnings (stage mirror + MetaEditor64 /compile, ~91s).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-23 22:59:02 -04:00
|
|
|
bool CAIBaseOnlineLearningView::HasLabel(const int bar)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataHasLabel(bar) : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::IsBuyLabel(const int bar)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataIsBuyLabel(bar) : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::IsSellLabel(const int bar)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataIsSellLabel(bar) : false; }
|
|
|
|
|
int CAIBaseOnlineLearningView::HistoryBars(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataHistoryBars() : 0; }
|
|
|
|
|
int CAIBaseOnlineLearningView::CalibPurgeBars(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataPurgeBars() : 0; }
|
|
|
|
|
int CAIBaseOnlineLearningView::CalibLoIndex(const int oosCutoff)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineCalibLoIndex(oosCutoff) : 0; }
|
|
|
|
|
int CAIBaseOnlineLearningView::CalibHiIndex(const int totalIter, const int oosCutoff)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.DataCalibrationHiIndex(totalIter, oosCutoff) : 0; }
|
|
|
|
|
int CAIBaseOnlineLearningView::CalibBandBars(const int totalIter, const int oosCutoff)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineCalibBandBars(totalIter, oosCutoff) : 0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::PriorBuy(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.PersistPriorBuy() : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::PriorSell(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.PersistPriorSell() : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::PriorNeutral(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.PersistPriorNeutral() : 0.0; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::InferenceOnly(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineInferenceOnlyFlag() : true; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::TrainRunActive(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineTrainRunActiveFlag() : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::TrainingStopRequested(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.IsTrainingStopped() : true; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::TrainingPaused(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.IsTrainingPaused() : true; }
|
|
|
|
|
int CAIBaseOnlineLearningView::AvailableBars(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartAvailableBars() : 0; }
|
|
|
|
|
int CAIBaseOnlineLearningView::ServableBars(const int want, const string context)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartServableBars(want, context) : 0; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::ResizeBuffers(const int barIndex)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartResizeBuffers(barIndex) : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::RefreshData(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartRefreshData() : false; }
|
|
|
|
|
bool CAIBaseOnlineLearningView::EnsureBarCachesCapacity(const int bars)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineEnsureBarCachesCapacity(bars) : false; }
|
|
|
|
|
datetime CAIBaseOnlineLearningView::BarTime(const int idx)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartBarTime(idx) : 0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::CloseAt(const int idx)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.ChartBarClose(idx) : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::AtrAt(const int idx)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineAtrMain(idx) : 0.0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::SpreadPrice(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineSpreadPrice() : 0.0; }
|
|
|
|
|
string CAIBaseOnlineLearningView::FilterId(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.GetFilterID() : "NULL"; }
|
|
|
|
|
int CAIBaseOnlineLearningView::ConfidenceTierNow(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineConfidenceTier() : 0; }
|
|
|
|
|
double CAIBaseOnlineLearningView::PatternWeightForTier(const int tier)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlinePatternWeightForTier(tier) : 0.0; }
|
|
|
|
|
string CAIBaseOnlineLearningView::PatternTableName(const string filterId, const string pattern, const string direction)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlinePatternTableName(filterId, pattern, direction) : ""; }
|
|
|
|
|
void CAIBaseOnlineLearningView::RegisterSignalRow(int year, int month, int day, int DOW, int hour, int minutes,
|
|
|
|
|
string tableName, string pattern, string direction,
|
|
|
|
|
double entryPrice, double exitPrice, string result, double netVote)
|
|
|
|
|
{
|
|
|
|
|
if(CheckPointer(m_owner) != POINTER_INVALID)
|
|
|
|
|
m_owner.OnlineRegisterSignal(year, month, day, DOW, hour, minutes, tableName, pattern, direction,
|
|
|
|
|
entryPrice, exitPrice, result, netVote);
|
|
|
|
|
}
|
|
|
|
|
double CAIBaseOnlineLearningView::PrevSignal(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlinePrevSignal() : 0.0; }
|
|
|
|
|
void CAIBaseOnlineLearningView::SetPrevSignal(const double v)
|
|
|
|
|
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.OnlineSetPrevSignal(v); }
|
|
|
|
|
bool CAIBaseOnlineLearningView::SaveModelStatsNow(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineSaveModelStats() : false; }
|
|
|
|
|
void CAIBaseOnlineLearningView::FlattenIndicatorParams(double &ip[])
|
|
|
|
|
{ if(CheckPointer(m_owner) != POINTER_INVALID) m_owner.OnlineFlattenIndicatorParams(ip); }
|
|
|
|
|
double CAIBaseOnlineLearningView::ModelEta(void)
|
|
|
|
|
{ return (CheckPointer(m_owner) != POINTER_INVALID) ? m_owner.OnlineModelEta() : 0.0; }
|
|
|
|
|
#endif // WARRIOR_ONLINELEARNING_AIBASEONLINELEARNINGVIEWIMPL_MQH
|
|
|
|
|
//+------------------------------------------------------------------+
|