forked from rosh/MQL5Book
71 lines
2.7 KiB
MQL5
71 lines
2.7 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| TickModel.mqh |
| |||
//| Copyright 2022, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#include "MqlError.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Tick modelling options |
| |||
//+------------------------------------------------------------------+
| |||
enum TICK_MODEL
| |||
{
| |||
TICK_MODEL_UNKNOWN = -1, /*Unknown (any)*/ // unknown/not detected yet
| |||
TICK_MODEL_REAL = 0, /*Real ticks*/ // best quality
| |||
TICK_MODEL_GENERATED = 1, /*Generated ticks*/ // good quality
| |||
TICK_MODEL_OHLC_M1 = 2, /*OHLC M1*/ // acceptable quality and fast
| |||
TICK_MODEL_OPEN_PRICES = 3, /*Open prices*/ // worst quality, but super fast (take care of accuracy manually)
| |||
TICK_MODEL_MATH_CALC = 4, /*Math calculations*/// no ticks (undetectable)
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Tick model detector |
| |||
//| NB: TICK_MODEL_OPEN_PRICES reported at 1-st tick can be |
| |||
//| refined to TICK_MODEL_OHLC_M1 on the 2-nd tick |
| |||
//| All other models are reported persistently from the 1-st tick |
| |||
//+------------------------------------------------------------------+
| |||
TICK_MODEL getTickModel()
| |||
{
| |||
static TICK_MODEL model = TICK_MODEL_UNKNOWN;
| |||
| |||
if(model == TICK_MODEL_UNKNOWN)
| |||
{
| |||
MqlTick ticks[];
| |||
const int n = CopyTicks(_Symbol, ticks, COPY_TICKS_ALL, 0, 10);
| |||
if(n == -1)
| |||
{
| |||
switch(_LastError)
| |||
{
| |||
case ERR_NOT_ENOUGH_MEMORY: // emulated ticks
| |||
model = TICK_MODEL_GENERATED;
| |||
break;
| |||
| |||
case ERR_FUNCTION_NOT_ALLOWED: // open or OHLC
| |||
if(TimeCurrent() != iTime(_Symbol, _Period, 0))
| |||
{
| |||
model = TICK_MODEL_OHLC_M1;
| |||
}
| |||
else if(model == TICK_MODEL_UNKNOWN)
| |||
{
| |||
model = TICK_MODEL_OPEN_PRICES;
| |||
}
| |||
break;
| |||
}
| |||
| |||
Print(E2S(_LastError));
| |||
}
| |||
else
| |||
{
| |||
model = TICK_MODEL_REAL;
| |||
}
| |||
}
| |||
else if(model == TICK_MODEL_OPEN_PRICES)
| |||
{
| |||
if(TimeCurrent() != iTime(_Symbol, _Period, 0))
| |||
{
| |||
model = TICK_MODEL_OHLC_M1;
| |||
}
| |||
}
| |||
return model;
| |||
}
| |||
//+------------------------------------------------------------------+
|