Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 29

 
Andrey Dik:

Nei test, i dati al minuto sono considerati più affidabili.

Le barre di minuti sono più affidabili? I dati delle zecche non sono l'ultima risorsa? Perché abbiamo bisogno di dati reali di tick se non vengono presi in considerazione?

Lo facevo ingenuamente: provavo su barre di minuti, poi provavo su tick, poi su tick reali come controllo finale di precisione. Ora capisco che il terzo controllo non ha molto senso.


Le gambe crescono da qui

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

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


Non c'è bisogno di togliere la frase dal contesto. La frase suona così:

Come vedete, se non cercate di manipolarlo, vi accorgerete di aver interpretato male il riferimento.

Non stavo manipolando nulla. L'aiuto afferma chiaramente che le barre dei minuti sono di fondamentale importanza. Per mancanza di dati di tick - i tick sono generati secondo le barre dei minuti.

Secondo me, i TF minuti dovrebbero essere calcolati da tick reali nella modalità "Tick reali", altrimenti non ha senso in questa modalità.

 
Andrey Dik:

A mio parere, i TF minuti dovrebbero essere formati da tick reali nella modalità "Tick reali", altrimenti non ha molto senso questa modalità.


orientandosi alla cronologia dei minuti e porta a una situazione in cui i tick reali dal 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

e il tester usa i tick solo per 88 barre di minuti esistenti. tutti gli altri tick esistono solo da qualche parte in ...

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
 
Diario del tester
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).

Ed ecco il numero di zecche reali


Questo è Metaquotes-Demo.

Si scopre che i tick reali sono 147700 durante la settimana, mentre il tester nella sua modalità più accurata mostra 145777 tick di tipo sconosciuto.

 
fxsaber:
Registro dei tester

Ed ecco il numero di zecche reali


Questo è Metaquotes-Demo.

Si scopre che i tick reali sono 147700 durante la settimana, mentre il tester nella sua modalità più accurata dà 145777 tick sconosciuti.


Il tester usa meno tic rispetto alla realtà, perché si concentra su di loro.

meglio guardare i futures lunghi, il quadro è più chiaro lì

 
kaus_bonus:


Mancano diverse barre M1 e dato che il punto di riferimento è su di esse, il tester usa meno tick di quanto fosse realmente.

Le barre M1 si formano quando c'è un prezzo flipper. Se non c'è, non c'è nessuna barra. E il fatto che c'erano tick bid/ask in quel momento viene ignorato!

Quindi, il problema non è solo nel tester, ma anche nell'algoritmo di formazione delle barre.

Faresti meglio a guardare i long futures, lì il quadro è più chiaro.

Esattamente sui futures lunghi questa situazione, come ho scritto sopra, accade più spesso.

Hai ragione, dimostrerò la situazione più chiaramente

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.

I tic reali sono 116844, i tic del tester nella modalità più precisa sono 5918. Un modesto 20 volte meno.


SZY La confutazione di un'ipotesi che la situazione data si sviluppa a causa del salto da parte del tester di zecche identiche

#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));
}
Risultato
Test2 (GOLD-9.17,H1)    Amount = 116844 Count = 116840

Solo 4 zecche identiche potevano mancare.

 
Traduzione di MqlTick in stringa

Forum sul trading, sistemi di trading automatico e strategie di trading di prova

Biblioteche: Prezzo_Compara

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));
}
Risultato
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:
Tradurre MqlTick in una stringa
Risultato

Illeggibile:

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:

Illeggibile:

Non capisco. Io stesso lo uso per stampare qualsiasi struttura semplice, tipi e matrici.

Forum sul trading, sistemi di trading automatico e test di strategie di 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);
}

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

Tutto dipende dagli obiettivi.
 
I commenti non relativi a questo argomento sono stati spostati in "Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici".