Warrior_EA/Database
Repository files (latest commit first)
Nome del file Ultimo messaggio di commit Ultima data di commit
AnimateDread 17270ab308 feat(trade): two books per symbol, and delete the vote exit
Allow_Hedging (default ON, live only on a RETAIL_HEDGING account) gives the EA
an independent long book and short book on its symbol: at most one long and at
most one short, each opened on its own side's vote and each held to its own
barrier. On a netting account, or with the input off, the original
single-position path runs bit-for-bit unchanged and init says which one is live.

WHY THIS INSTEAD OF A VOTE EXIT. The deploy gate certifies
P(label agrees | vote fired) and the label runs to the barrier, so closing early
on a reversal makes the realised outcome stop being the labelled one - the
certified precision no longer describes what is traded. Opening the other side
acts on the new signal and leaves the old position's certification intact, and
costs no more than reversing: both pay the new side's spread, the difference is
only that the existing position runs on to a barrier already measured as
positive-expectancy. So Signal_ThresholdClose is DELETED rather than tuned,
along with its SIGNAL_CLOSE_PRESETS enum; the threshold is pinned to an
arithmetically unreachable 101 (the stock default of 100 is reachable by a
weighted mean of values capped at 100).

Note the two books can never both fill from one signal: CheckOpenLong and
CheckOpenShort test opposite signs of the same m_direction, so at most one clears
per tick. A hedge only forms when a LATER opposite vote fires - which is what
keeps it from being a guaranteed-loss wash pair.

The mechanism is a SelectPosition() override keyed on the active book's magic;
every inherited close/trail path then operates on that book untouched. The long
book keeps Expert_MagicNumber, so no existing position, journal row or
risk-budget state file is re-addressed. Short book is +1.

Four ownership filters had to widen from "== m_magic" to WarriorOwnsMagic(),
or the short book would have been invisible to the code that must reach it:
the scheduled close-all (positions and orders), the risk budget's emergency
flatten, and the journal's MAE/MFE walk. WarriorOwnsMagic() is deliberately NOT
gated on Allow_Hedging - turning the input off while a short-book position is
open would otherwise orphan it with nothing left to close it.

Risk sizing needed no change: CapRiskAmount already subtracts OpenRiskAtStops(),
which counts every position regardless of magic, so the second book is sized
inside what the first one left. Conservative for a hedged pair, which cannot
lose both stops - the safe direction.

Retrain-neutral: neither input is in BuildModelFingerprint() or
ComputeDbConfigFingerprint(). Compiled clean; NOT yet run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 09:20:35 -04:00
..
DatabaseConnectionManager.mqh refactor(ai): extract Layer.mqh and deduplicate AI config 2026-08-01 11:27:28 -04:00
DatabaseFileSystemManager.mqh refactor(db): dedupe the 5x/1s retry loop in FileSystemManager + VersionManager 2026-08-24 01:25:34 -04:00
DatabaseManager.mqh refactor(db): stop wrapping CDatabaseVersionManager's retry in a second retry loop 2026-08-24 02:26:56 -04:00
DatabaseOperationsManager.mqh Enhance Feature and Topology Interfaces with Bulk Operations and Cache Management 2026-08-25 22:51:50 -04:00
DatabaseVersionManager.mqh refactor(db): dedupe the 5x/1s retry loop in FileSystemManager + VersionManager 2026-08-24 01:25:34 -04:00
TradeJournalManager.mqh feat(trade): two books per symbol, and delete the vote exit 2026-08-26 09:20:35 -04:00
TradeJournalReport.mqh refactor(db): split GenerateReport into fetch/aggregate/derive/write 2026-08-24 03:55:25 -04:00