Testen von 'CopyTicks' - Seite 17

 
fxsaber:
Ist die Lautstärke des Tickbars ein Rudiment? Ein Indikator, der im Prinzip an der Börse nichts bedeutet. Sie können es nicht bewusst einsetzen. Das ist Blödsinn.

Eigentlich ist das Tickvolumen an der Börse die Anzahl der Flipper. Das heißt, die tatsächliche Anzahl von Geschäften.

 
Slawa:

Eigentlich ist das Tickvolumen an der Börse die Anzahl der Flipper. Das heißt, die tatsächliche Anzahl von Geschäften.

Der Balken ändert sich also nicht, wenn ein Geschäft eingeht, das mit dem vorherigen völlig identisch ist.
 
fxsaber:
Der Balken ändert sich also nicht, wenn ein Geschäft eingeht, das mit dem vorherigen völlig identisch ist.
Tick und reale Volumina ändern sich
 
Der Expert Advisor schreibt frische History Ticks und deckt den N-third Bug in CopyTicks auf
#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

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)(Tick.time_msc %1000) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

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

int AddFreshTicks( MqlTick &Ticks[], const string Symb = NULL, const uint flags = COPY_TICKS_ALL )
{
  int Res = 0;
  const int Amount = ArraySize(Ticks);
  
  MqlTick NewTicks[];  
  const int NewAmount = (Amount == 0) ? CopyTicks((Symb == NULL)? Symbol() : Symb, NewTicks, flags) :
                                        CopyTicks((Symb == NULL)? Symbol() : Symb, NewTicks, flags, Ticks[Amount - 1].time_msc);
  
  if (NewAmount > 0)
  {
    if (Amount > 0)
    {
      // Взяли крайнее время из предыдущей истории
      const long LastTime = Ticks[Amount - 1].time_msc;
      
      int Count = 1;
      
      // Находим (Count) в предыдушей истории количество тиков со временем LastTime
      for (int i = Amount - 2; i >= 0; i--)
      {
        if (Ticks[i].time_msc < LastTime)
          break;
          
        Count++;
      }

      if ((Count < Amount) && (Count < NewAmount))      
      {
        // Если Count-тик c LastTime-временем в новой истории не равен самому последнего тику в старой истории, выводим в журнал
        if (_R(Ticks[Amount - 1]) != NewTicks[Count - 1]) // https://www.mql5.com/ru/code/16280
          Print(TOSTRING2(TickToString(Ticks[Amount - 1])) + "\n" +
                TOSTRING2(TickToString(NewTicks[Count - 1])) + "\n" + TOSTRING2(TickToString(NewTicks[Count])) + "\n");              

        Res = ArrayCopy(Ticks, NewTicks, Amount, Count);
      }
    }
    else
      Res = ArrayCopy(Ticks, NewTicks);
  }
  
  return(Res);
}

void OnTick( void )
{
  static MqlTick PrevTicks[];
  
  // Дописываем свежие тики
  AddFreshTicks(PrevTicks);
}

Dieses Mal habe ich ausführliche Kommentare geschrieben, so dass das Ergebnis klar sein sollte

2016.09.22 12:20:03.762 Test8 (RTS-12.16,M1)    TickToString(NewTicks[Count]) =  time = 2016.09.22 12:19:53.233 bid = 0.0 ask = 0.0 last = 98560.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_BUY
2016.09.22 12:20:03.762 Test8 (RTS-12.16,M1)    TickToString(NewTicks[Count-1]) =  time = 2016.09.22 12:19:51.968 bid = 0.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09.22 12:20:03.762 Test8 (RTS-12.16,M1)    TickToString(Ticks[Amount-1]) =  time = 2016.09.22 12:19:51.968 bid = 98550.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09.22 12:20:02.504 Test8 (RTS-12.16,M1)    
2016.09.22 12:20:02.504 Test8 (RTS-12.16,M1)    TickToString(NewTicks[Count]) =  time = 2016.09.22 12:19:51.968 bid = 98550.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09.22 12:20:02.504 Test8 (RTS-12.16,M1)    TickToString(NewTicks[Count-1]) =  time = 2016.09.22 12:19:51.813 bid = 98550.0 ask = 0.0 last = 0.0 volume = 0 TICK_FLAG_BID
2016.09.22 12:20:02.504 Test8 (RTS-12.16,M1)    TickToString(Ticks[Amount-1]) =  time = 2016.09.22 12:19:51.813 bid = 98550.0 ask = 98560.0 last = 0.0 volume = 0 TICK_FLAG_BID
Das Problem besteht nicht nur bei COPY_TICKS_ALL, sondern auch bei anderen Modi (LAST, INFO).
 
fxsaber:
Der Expert Advisor hat das Schreiben von neuen History Ticks abgeschlossen und den neunten Fehler in CopyTicks gefunden.

Diesmal habe ich ausführliche Kommentare geschrieben, so dass das Ergebnis klar sein sollte

Das Problem betrifft nicht nur den Modus COPY_TICKS_ALL, sondern auch andere Modi (LAST, INFO).

Versucht, Zecken über From == 0 hinzuzufügen. Funktioniert nicht! - Bugs in CopyTicks.

Sehr geehrte Entwickler, ich benötige diese Funktion (um neue Verlaufsdaten hinzuzufügen) sehr dringend. Lassen Sie es vorerst zurückhaltend sein, aber es wird funktionieren. Bitte schreiben Sie hier die funktionierende Version.

Sie müssen Fehler in CopyTicks für eine lange Zeit beheben und nicht ein Build. Wie andere CopyTicks verwenden - das verstehe ich nicht. Offensichtlich verwenden sie sie überhaupt nicht. Es fehlt ihnen an Phantasie.

 

Sie sollten klar angeben, was genau Sie als Fehler betrachten.

 
Renat Fatkhullin:

Sie sollten klar angeben, was genau Sie als Fehler betrachten.

Er antwortete sehr deutlich im Code. Ich habe einen Antrag an den Service Desk gestellt, wo ich noch mehr Details aufgeschrieben habe.
 
fxsaber:
Diese Frage wird durch den Code sehr deutlich beantwortet. Ich habe eine Anfrage an das Service Desk gestellt, in der ich alles detailliert beschrieben habe.

Der Fehler liegt darin, dass im neu gewonnenen Tick-Array die ersten Einträge Nullen für Bid, Ask oder Last enthalten, während im vorherigen Array die gleichen Ticks am Ende des Arrays keine Nullen enthalten, sondern die damals aktuellen Werte von Bid, Ask und Last

Dieser Fehler in CopyTicks wurde behoben, nachdem der Build veröffentlicht wurde. Nun enthalten die ersten Tick-Einträge nach dem Aufruf von CopyTicks keine Nullen, sondern die aktuellen Werte von Bid, Ask und Last zum gewünschten Zeitpunkt.

Leider wurden die Korrekturen nicht in den aktuellen Build aufgenommen.

 
Slawa:

Der Fehler besteht darin, dass im neu erhaltenen Tick-Array die ersten Einträge Nullen für Geld-, Brief- oder letzte Werte enthalten, während im vorherigen Array die gleichen Ticks am Ende des Arrays keine Nullen enthalten, sondern die aktuellen Werte für Geld-, Brief- und letzte Werte

Dieser Fehler in CopyTicks wurde bereits nach der Veröffentlichung des Builds behoben. Jetzt enthalten die ersten Ticks-Datensätze nach dem Aufruf von CopyTicks keine Nullen, sondern die aktuellen Werte von Bid, Ask und Last zum gewünschten Zeitpunkt

Ich kann Sie nicht verstehen. Sie sagen also, dass Sie Ihr eigenes internes Format für die Speicherung der Geschichte haben. Und CopyTicks nimmt bei jeder Anfrage ein Stück davon und erzeugt seine eigene Sequenz von MqlTick? Die gleichen Flags werden von CopyTicks berechnet, aber nicht in der Historie gespeichert? Ein Pad, das auch etwas berechnet, und nicht nur in ein benutzerfreundliches Format umwandelt.

Ich brauche keine CopyTicks, um dort etwas zu füllen, je nach dem Zeitpunkt der Anfrage. Ich möchte nur die Geschichte unverfälscht wiedergeben. Und fügen Sie es ohne Probleme hinzu.

Leider gibt es im aktuellen Build keine Korrekturen.

Bitte veröffentlichen Sie den Beta-Build auf Ihrem Server. Ich bin sicher, dass ich noch mehr Ungereimtheiten finden werde. Lasst uns diese CopyTicks lecken, damit sie endlich vertrauenswürdig werden!

 
fxsaber:
Der Expert Advisor vervollständigt die frischen historischen Ticks und identifiziert den N-ten CopyTicks-Fehler
Wenn Sie NUR Band (COPY_TICKS_TRADE - time_msc, last, volume und flags) benötigen, dann ist diese Lösung vollständig geeignet - keine Bugs entdeckt.