Geschichte ankreuzen - Seite 16

 
Karputov Vladimir:

Hier ist, worum gebeten wurde:

Der Übergang nach 24 Stunden ist korrekt.
Testmethode: Bei eingeschaltetem Terminal habe ich die Tick-History-Dateien gelöscht. Dann führte ich das Skript zweimal aus (da es keinen Verlauf gab, initialisierte der erste Durchlauf des Skripts das Laden des Verlaufs).

Ja, danke, das habe ich auch gemacht - hat geholfen. Allerdings ist das Verhalten sehr seltsam.
 

Die Wahrheit ist, dass das seltsame Verhalten dort nicht aufhört. Ich habe beschlossen, zwei Abfragezeitpunkte derselben Geschichte zu vergleichen.

Der erste Moment war gestern, als ich über den Ankunftsfehler von Freitag auf Montag schrieb:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Geschichte ankreuzen

Tapochun, 2015.10.19 08:48

Ein wenig später sieht das Bild so aus. Modus ALL 3000 ticks:

2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2774 2015.10.16 23:59:05: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2775 2015.10.16 23:59:05: spread = 72, ask = 1.54428, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2776 2015.10.16 23:59:06: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54356
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2777 2015.10.16 23:59:06: spread = 75, ask = 1.54431, bid = 1.54356, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2778 2015.10.16 23:59:07: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54357
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2779 2015.10.16 23:59:07: spread = 74, ask = 1.54431, bid = 1.54357, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2780 2015.10.16 23:59:10: spread = 0, ask = 0.00000, bid = 0.00000, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2781 2015.10.19 09:44:41: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2782 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2783 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2784 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2785 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 1.54480
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2786 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
2015.10.19 11:46:33.144 test_CopyTicks_1178 (GBPUSD,M5) OnStart: #2787 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 1.54480

Lücke in der Geschichte. Im INFO-Modus - ähnlich.

Beachten Sie die Zecken, die ab 9.44.41 Uhr eintreffen. Jetzt Geschichte für das gleiche Symbol, zur gleichen Zeit, im gleichen Modus (ALL) nur heute angefordert:

QK      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289463 2015.10.19 09:44:41: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
LN      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289464 2015.10.19 09:44:41: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DO      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289465 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
ES      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289466 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
HR      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289467 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
EG      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289468 2015.10.19 09:44:42: spread = 19, ask = 1.54499, bid = 1.54480, last = 0.00000
DI      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289469 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480
DH      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289470 2015.10.19 09:44:42: spread = 18, ask = 1.54498, bid = 1.54480, last = 0.00000
IM      0       13:04:51.698    test_CopyTicks_1178 (GBPUSD,M5) OnStart: #289471 2015.10.19 09:44:42: spread = 0, ask = 0.00000, bid = 0.00000, last = 1.54480

Die Liefermethode ist unterschiedlich. Und es fehlen eindeutig Millisekunden.

Und wie man in dieser Situation Zecken analysiert!

 
Renat Fatkhullin:

Das ist richtig.

Ich habe genau darauf hingewiesen - es gibt keine Struktur oder Logik beim Ausfüllen der Häkchen. Jedes Preisfeld ist unabhängig von den anderen. Was vom Lieferanten kommt, wird übersetzt.

Renat, es stellt sich heraus, dass dieselben Zecken je nach Zeitpunkt der Anfrage und auf unterschiedliche Weise von einem Anbieter kommen können!

Hängt das Format des Verlaufs von dem Server ab, mit dem Sie verbunden sind?

 
Tapochun:

Dies wird für die nächste Version versprochen, und ich bin sicher, dass es seine Chips haben wird.

Es wäre gut, wenn ohne "Chips", und in der Regel ... und müde von diesen Tabellen, die 99% Simulation Qualität sagen ... und der echte kommt nicht einmal in die Nähe davon :) Für mich sollte es so etwas im Prinzip nicht geben, sonst ist es kein Tester, sondern ein Spielzeug. Und aus Kneipenschließungsstrategien kann man nicht viel machen...

 
Maxim Dmitrievsky:

Es wäre schön, wenn es keine "Tricks" gäbe und alles in Ordnung wäre... aber ich habe diese Diagramme satt, in denen 99% Modellierqualität stehen... und der echte kommt nicht einmal in die Nähe davon :) Für mich sollte es so etwas im Prinzip nicht geben, sonst ist es kein Tester, sondern ein Spielzeug. Und aus Kneipenschließungsstrategien kann man nicht viel machen...

Ohne Chips passiert das selten auf einmal. Auf diese Zeckengeschichte haben wir lange gewartet, und wir wollen sie so schnell wie möglich fertigstellen. Ich möchte, dass es sowohl in der Testversion als auch auf dem echten Konto bereit ist. Leider gibt es nicht viele Rückmeldungen. Ich hoffe, dass die Arbeiten zur Anpassung an die neue Situation voranschreiten.

 
Karputov Vladimir:

Bitte spezifizieren Sie das COPY_TICKS_INFO-Flag für den Tick-Empfang (nur Bid und Ask) - können Bid und Ask immer noch den Wert "0" haben oder werden Bid und Ask im COPY_TICKS_INFO-Modus keine Nullen enthalten und der Tick-Fluss wird demim Terminal im Fenster "Market Watch", Registerkarte "Ticks", ähnlich sein?


Das Problem wird mit dem Build 1200 gelöst:

MQL5: Erweitertes Format der MqlTick-Struktur. Sie enthält nun die Ankunftszeit des Ticks in Millisekunden sowie Flags, mit denen festgestellt werden kann, welcher Parameter des Ticks sich geändert hat.
struct MqlTick
  {
   datetime     time;          // Время последнего обновления цен
   double       bid;           // Текущая цена Bid
   double       ask;           // Текущая цена Ask
   double       last;          // Текущая цена последней сделки (Last)
   ulong        volume;        // Объем для текущей цены Last
   long         time_msc;      // Время последнего обновления цен в миллисекундах
   uint         flags;         // Флаги тиков
  };
Bei jedem Tick werden immer alle Parameter ausgefüllt, unabhängig davon, ob sich die Daten seit dem vorherigen Tick geändert haben. Auf diese Weise haben Sie immer einen aktuellen Stand der Preise zu jedem Zeitpunkt, ohne in der Tick-Historie nach früheren Werten suchen zu müssen. Bei einem Tick könnte sich zum Beispiel nur der Geldkurs geändert haben, aber die Struktur enthält neben dem neuen Kurs auch andere Parameter: den vorherigen Briefkurs, das Volumen usw. Um herauszufinden, welche Daten sich mit dem aktuellen Tick genau geändert haben, analysieren Sie die Flaggen:

  • TICK_FLAG_BID - Tick verändertes Preisgebot
  • TICK_FLAG_ASK - Tick hat den Briefkurs verändert
  • TICK_FLAG_LAST - Tick veränderter Preis des letzten Geschäfts
  • TICK_FLAG_VOLUME - Tick hat Lautstärke geändert
  • TICK_FLAG_BUY - Tick ist als Ergebnis eines Kaufgeschäfts aufgetreten
  • TICK_FLAG_SELL - der Tick ist das Ergebnis eines Verkaufsgeschäfts

Die Struktur MqlTick wird in zwei Methoden verwendet:

  • CopyTicks - die Methode unterstützt nicht das alte Strukturformat. Zuvor kompilierte EX5-Dateien, die das alte Tick-Format verwenden, geben beim Aufruf der Funktion CopyTicks den Fehler 4006 (ERR_MQL_INVALID_ARRAY) zurück.
  • SymbolInfoTick - Methode unterstützt sowohl das alte als auch das neue Strukturformat.
 

Also:

MetaTrader 5 x64 build 1192 started (MetaQuotes Software Corp.)
...
authorized on MetaQuotes-Demo through Access Point Asia (ping: 556.27 ms)

und die aktualisierte MqlTick-Struktur:

Aktualisierte MqlTick-Struktur

 
Karputov Vladimir:

Also:

und aktualisierte MqlTick-Struktur:


Und wie kann man die Ankunft einer neuen Zecke im Terminal richtig verfolgen? Zum Beispiel im Testgerät.

"Die Funktion OnTick() ist kein Handler für jeden Tick, sondern benachrichtigt einen Expert Advisor über Veränderungen auf dem Markt. Änderungen können stapelweise erfolgen: mehrere Ticks können gleichzeitig auf dem Terminal eintreffen, aber die Funktion OnTick() wird nur einmal aufgerufen, um den Expert Advisor über die neueste Marktbedingung zu informieren.

 
Maxim Dmitrievsky:

Wie lässt sich die Ankunft einer neuen Zecke im Terminal korrekt verfolgen? Zum Beispiel im Testgerät.

"Die Funktion OnTick() ist kein Handler für jeden Tick, sondern benachrichtigt den Expert Advisor über Veränderungen im Markt. Änderungen können stapelweise erfolgen: Das Terminal kann mehrere Ticks gleichzeitig empfangen, aber die Funktion OnTick() wird nur einmal aufgerufen, um den Expert Advisor über die neueste Marktbedingung zu informieren".

Wenn Sie jeden Tick verfolgen wollen, müssen Sie dies im Indikator tun. Ein Indikator verarbeitet, anders als ein EA, jeden Tick.

Hinzugefügt: jetzt ist es möglich, auch alle Ticks in EA zu analysieren - es ist nur notwendig, Checks einzugeben (z.B. um CopyTicks-Anfragen mit einer Tiefe von 5 Ticks zu analysieren).

 

Build 1192. Windows 10 x32.

Ich habe den Tick-History-Ordner des MetaQuotes-Demo-Servers vorsorglich komplett gelöscht. Indikator verwenden

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property indicator_chart_window
#property indicator_plots 0
//--- input parameter
input int   InpShowTicks=500;    // клубина истории тиков
//--- parameters
MqlTick     arr_mql_tick[];      // массив структур хранящий тики
bool        bingo=false;         // false - скачано тиков меньше запрошенного
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Comment("");
   ResetLastError();
//--- новый размер массива структур тиков
   if(ArrayResize(arr_mql_tick,InpShowTicks)==-1)
     {
      Print("Error OnInit #1",GetLastError());
      return(INIT_FAILED);
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int count;
   string text="";
   if(bingo)
      return(rates_total);
   int copied=CopyTicks(_Symbol,arr_mql_tick,COPY_TICKS_INFO,0,InpShowTicks);
   if(copied==InpShowTicks)
      bingo=true;
   text="Запрошено "+IntegerToString(InpShowTicks)+" тиков, скачано "+IntegerToString(copied);
   Comment(text);
   count++;
   return(rates_total);
  }
//+------------------------------------------------------------------+

Ich habe die Zecken beim Herunterladen überprüft. Bei einigen Instrumenten werden 500 Ticks beim ersten oder zweiten Tick heruntergeladen, und sie laden nicht mehr als 200 Kb herunter (ich ziehe die Instrumente einfach per Drag & Drop von Market Watch auf ein Diagramm).

Aber in einigen Instrumenten geschehen Wunder: die Geschichte der Ticks will mir nicht die notwendigen 500 Ticks geben, aber das Terminal lädt etwa 20 Mb der Geschichte (Geschichte für 10 und 9 Monate).

Dateien:
test.mq5  3 kb