Características del lenguaje mql5, sutilezas y técnicas - página 29

 
Andrey Dik:

En las pruebas, los datos por minutos se consideran más fiables.

¿Son más fiables las barras de minutos? ¿No son los datos de las garrapatas el último recurso? ¿Por qué necesitamos los datos reales de las garrapatas si no se tienen en cuenta?

Yo solía hacer esto ingenuamente: probaba en barras de minutos, luego probaba en ticks, luego en ticks reales como comprobación final de precisión. Ahora entiendo que el tercer cheque no tiene mucho sentido.


Las piernas crecen a partir de aquí

https://www.mql5.com/ru/forum/188047

Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
Не совпадают цены тестера и CopyTicks, или неверная синхронизация?
  • www.mql5.com
Пытаюсь сделать мультивалютный советник,но с фьючами. Запускаем в тестере простой советник на ближнем фьюче,т.к. он более живой...
 
Vladimir Karputov:


No hace falta sacar la frase de contexto. La frase suena así:

Como puedes ver, si no intentas manipularlo, verás que has interpretado mal la referencia.

No estaba manipulando nada. La ayuda indica claramente que las barras de minutos son de suma importancia. A falta de datos de ticks - los ticks se generan según las barras de minutos.

En mi opinión, los TFs de los minutos deberían calcularse a partir de ticks reales en el modo "Ticks reales", de lo contrario no tiene sentido este modo.

 
Andrey Dik:

En mi opinión, los TFs de minutos deberían formarse a partir de ticks reales en el modo "Ticks reales", de lo contrario no tiene mucho sentido este modo.


orientando a la historia de los minutos y lleva a una situación en la que los ticks reales del 02.04.17 al 08.04.17

2017.04.08 18:06:17.780 сколько тиков (GOLD-9.17,H1)    Колво тиков за 2017.04.02 00:00:00 = 116844

y el probador sólo utiliza los ticks de las barras de 88 minutos existentes. todos los demás ticks sólo existen en algún lugar de ...

2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: 5918 ticks, 88 bars generated. Environment synchronized in 0:00:00.070. Test passed in 0:00:03.125 (including ticks preprocessing 0:00:00.070).
2017.04.08 18:05:17.263 Core 1  GOLD-9.17,M1: total time from login to stop testing 0:00:03.195 (including 0:00:02.944 for history data synchronization)
2017.04.08 18:05:17.263 Core 1  166135 total ticks for all symbols
2017.04.08 18:05:17.263 Core 1  GOLD-9.17: generate 5918 ticks in 0:00:00.020, passed to tester 5918 ticks
 
Registro del probador
GOLD-6.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-6.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-6.17,H1: 145777 ticks, 70 bars generated. Environment synchronized in 0:00:01.388. Test passed in 0:00:00.062 (including ticks preprocessing 0:00:00.031).

Y aquí está el número de garrapatas reales


Esto es Metaquotes-Demo.

Resulta que los ticks reales son 147700 durante la semana, mientras que el probador en su modo más preciso muestra 145777 ticks de tipo desconocido.

 
fxsaber:
Registro de probadores

Y aquí está el número de garrapatas reales


Esto es Metaquotes-Demo.

Resulta que los ticks reales son 147700 durante la semana, mientras que el probador en su modo más preciso da 145777 ticks desconocidos.


El probador utiliza menos garrapatas que en la realidad, porque se centra en ellas.

mejor mirar los futuros a largo plazo, la imagen es más clara allí

 
kaus_bonus:


Faltan varias barras M1 y como el punto de referencia está en ellas, el probador utiliza menos ticks de los que realmente tenía.

Las barras M1 se forman cuando hay un precio de flipper. Si no hay ninguno, no hay bar. ¡Y el hecho de que hubiera ticks de compra/venta en ese momento se ignora!

Por tanto, el problema no está sólo en el probador, sino también en el algoritmo de formación de barras.

Es mejor que mires los futuros a largo plazo, allí el panorama es más claro.

Exactamente en los futuros largos esta situación, como escribí anteriormente, ocurre con mayor frecuencia.

Tienes razón, voy a demostrar la situación más claramente

GOLD-9.17,H1: testing of Experts\fxsaber\Test2.ex5 from 2017.04.03 00:00 to 2017.04.08 00:00 started
GOLD-9.17 : real ticks begin from 2017.04.03 00:00:00
final balance 100000.00 EUR
GOLD-9.17,H1: 5918 ticks, 39 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:00.046.

Los ticks reales son 116844, los ticks de prueba en el modo más preciso son 5918. Unas modestas 20 veces menos.


SZY La refutación de una hipótesis de que la situación dada se desarrolla debido a la omisión por el probador de garrapatas idénticas

#include <TypeToBytes.mqh>

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, D'2017.04.03' * 1000, D'2017.04.08' * 1000);
  
  int Count = 1;
  
  for (int i = 1; i < Amount; i++)
    if (_R(Ticks[i]) != Ticks[i - 1])
      Count++;
      
  Print(TOSTRING(Amount) + TOSTRING(Count));
}
Resultado
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

Sólo 4 garrapatas idénticas pudieron fallar.

 
Traducción de MqlTick a cadena

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Bibliotecas: Price_Compare

fxsaber, 2016.10.19 17:18

string GetTickFlag( uint tickflag )
{
  string flag = "";

#define TICKFLAG_MACRO(A) flag += ((bool)(tickflag & TICK_FLAG_##A)) ? " TICK_FLAG_" + #A : "";
  TICKFLAG_MACRO(BID)
  TICKFLAG_MACRO(ASK)
  TICKFLAG_MACRO(LAST)
  TICKFLAG_MACRO(VOLUME)
  TICKFLAG_MACRO(BUY)
  TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

  if (flag == "")
    flag = " FLAG_UNKNOWN (" + (string)tickflag + ")";
    
  return(flag);
}

#define TOSTRING(A) " " + #A + " = " + (string)Tick.A

string TickToString( const MqlTick &Tick )
{
  return(TOSTRING(time) + "." + (string)IntegerToString(Tick.time_msc %1000, 3, '0') +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(TickToString(Tick));
}
Resultado
time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
fxsaber:
Traducción de MqlTick a cadena
Resultado

Imposible de leer:

time = 2017.04.07 23:58:18.000 bid = 110620.0 ask = 110640.0 last = 110630.0 volume = 1 TICK_FLAG_BID TICK_FLAG_ASK TICK_FLAG_LAST TICK_FLAG_VOLUME
 
Dennis Kirichenko:

Imposible de leer:

No lo entiendo. Yo mismo lo utilizo para imprimir cualquier estructura simple, tipos y matrices.

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

MetaEditor build 1463

fxsaber, 2016.11.10 10:42

class PRINTCLASS
{
public:  
  template <typename T>
  static void MyPrint( const T &Value )
  {
    T Array[1];
    
    Array[0] = Value;
    
    ::ArrayPrint(Array, _Digits, NULL, 0, WHOLE_ARRAY, ARRAYPRINT_HEADER|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN);
  }
  
  template <typename T>
  static void MyPrint( const T Value )
  {
    ::Print(Value);
  }

  template <typename T>
  static void MyPrint( const T &Value[] )
  {
    ::ArrayPrint(Value);
  }
};

#define Print(A) PRINTCLASS::MyPrint(A)

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    Print(Tick);
}

El resultado
             [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]
2017.04.07 23:58:18  110620  110640  110630        1 1491609498000      30

Todo depende de los objetivos.
 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos".