Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 29

 
Andrej Dik:

Bei der Prüfung gelten Minutenangaben als zuverlässiger.

Sind Minutenbalken zuverlässiger? Sind Zeckendaten nicht das letzte Mittel? Wozu brauchen wir überhaupt echte Tickdaten, wenn sie nicht berücksichtigt werden?

Früher habe ich das ganz naiv gemacht: Ich habe mit Minutenbalken getestet, dann mit Ticks, dann mit echten Ticks als letzte Präzisionskontrolle. Jetzt verstehe ich, dass die dritte Prüfung nicht viel Sinn macht.


Von hier aus wachsen die Beine

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

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


Sie brauchen den Satz nicht aus dem Zusammenhang zu reißen. Der Satz klingt wie folgt:

Wie Sie sehen, werden Sie, wenn Sie nicht versuchen, sie zu manipulieren, feststellen, dass Sie die Referenz falsch interpretiert haben.

Ich habe nichts manipuliert. Die Hilfe macht deutlich, dass die Minutenbalken von größter Bedeutung sind. In Ermangelung von Tickdaten werden die Ticks nach Minutenbalken generiert .

Meiner Meinung nach sollten die Minuten-TFs im "Real ticks"-Modus aus echten Ticks berechnet werden, sonst hat dieser Modus keinen Sinn.

 
Andrej Dik:

Meiner Meinung nach sollten Minuten-TFs aus echten Ticks im "Real ticks"-Modus gebildet werden, sonst hat dieser Modus wenig Sinn.


orientiert sich an der Minutenhistorie und führt dazu, dass reale Ticks vom 02.04.17 bis 08.04.17

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

und der tester verwendet nur ticks für 88 existierende minutenbalken. alle anderen ticks existieren nur irgendwo 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
 
Prüfprotokoll
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).

Und hier ist die Anzahl der echten Ticks


Dies ist Metaquotes-Demo.

Es stellt sich heraus, dass die tatsächlichen Ticks 147700 während der Woche betragen, während das Prüfgerät in seinem genauesten Modus 145777 Ticks unbekannter Art anzeigt.

 
fxsaber:
Prüfprotokoll

Und hier ist die Anzahl der echten Ticks


Dies ist Metaquotes-Demo.

Es stellt sich heraus, dass die realen Ticks 147700 während der Woche betragen, während das Prüfgerät in seinem genauesten Modus 145777 unbekannte Ticks anzeigt.


Der Prüfer verwendet weniger Ticks als in der Realität, weil er sich auf sie konzentriert.

Schauen Sie sich besser die Long-Futures an, dort ist das Bild klarer

 
kaus_bonus:


Es fehlen mehrere M1-Balken, und da sich der Orientierungspunkt auf ihnen befindet, verwendet das Prüfgerät weniger Ticks als tatsächlich vorhanden sind.

M1-Balken werden gebildet, wenn es einen Flipperkurs gibt. Wenn es keine gibt, gibt es auch keine Bar. Und die Tatsache, dass es zu dieser Zeit Geld-/Briefmarken gab, wird ignoriert!

Das Problem liegt also nicht nur beim Prüfer, sondern auch beim Algorithmus der Balkenbildung.

Schauen Sie sich lieber die Long-Futures an, dort ist das Bild klarer.

Genau auf lange Sicht tritt diese Situation, wie ich oben schrieb, am häufigsten auf.

Sie haben Recht, ich werde die Situation nur noch deutlicher machen

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.

Die realen Ticks sind 116844, die Tester-Ticks im genauesten Modus sind 5918. Das sind bescheidene 20 Mal weniger.


SZY Die Widerlegung der Hypothese, dass die gegebene Situation durch das Überspringen identischer Häkchen durch den Prüfer entstanden ist

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

Nur 4 identische Zecken konnten übersehen werden.

 
Übersetzung von MqlTick in String

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: Preis_Vergleich

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));
}
Ergebnis
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:
Übersetzen von MqlTick in String
Ergebnis

Unleserlich:

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:

Unleserlich:

Das verstehe ich nicht. Ich selbst verwende es zum Drucken einfacher Strukturen, Typen und Arrays.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

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);
}

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

Es hängt alles von den Zielen ab.
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes" verschoben.