| //+------------------------------------------------------------------+
|
| //| Modality.mqh |
|
| //| AnimateDread |
|
| //| |
|
| //| ONE WAY OF LOOKING AT THE CHART. |
|
| //| |
|
| //| A discretionary Wyckoff trader does not read one number. They read |
|
| //| the structure, the volume behind it, how volatile the tape is, |
|
| //| what the neighbouring markets are doing and what day it is - and |
|
| //| only then decide how much to trust the setup. Each of those is a |
|
| //| MODALITY: a class that turns the same closed bar into its own |
|
| //| slice of an SMarketContext and knows nothing about the others. |
|
| //| |
|
| //| Open/closed: a new way of looking is a new subclass registered in |
|
| //| CWarriorMind::Init(); the mind, the book and the reviewer do not |
|
| //| change, because they only ever see the context's field indices. |
|
| //| |
|
| //| Every Read() sees CLOSED bars only (bar.shift >= 1 at decision |
|
| //| time), so a row it writes could have been written live. |
|
| //| A modality that cannot answer returns false and leaves its fields |
|
| //| at CTX_NA; the mind carries on without it. A modality must never |
|
| //| be the reason a trade does not happen. |
|
| //+------------------------------------------------------------------+
|
| #ifndef WARRIOR_MODALITY_MQH
|
| #define WARRIOR_MODALITY_MQH
|
|
|
| #include "MarketContext.mqh"
|
|
|
| //--- Which bar is being read: its slot in the bar cache, its stdlib series shift, its open time.
|
| struct SBarRef
|
| {
|
| int idx;
|
| int shift;
|
| datetime time;
|
| };
|
|
|
| class CModality
|
| {
|
| public:
|
| virtual ~CModality(void) {}
|
| virtual string Name(void) const = 0;
|
| virtual bool Read(const SBarRef &bar, SMarketContext &ctx) = 0;
|
| };
|
| #endif // WARRIOR_MODALITY_MQH
|