Fehler, Irrtümer, Fragen - Seite 661

 

Gibt es eine interne Begrenzung der Stringlänge(String-Typ), oder wie viel freier Speicher ist vorhanden und wie viel kann in den String gepackt werden?

// Diese Frage bezieht sich auf das Schreiben von Programmen für OpenCL.

Bitte geben Sie die richtige Antwort auch in der Dokumentation an, in den FAQ gibt es keinen Hinweis darauf.

 
MetaDriver:

Gibt es eine interne Begrenzung der Stringlänge(String-Typ), oder wie viel freier Speicher ist vorhanden und wie viel kann in den String gepackt werden?

// Diese Frage bezieht sich auf das Schreiben von Programmen für OpenCL.

Bitte geben Sie auch die richtige Antwort in der Dokumentation an, da es in den FAQ keinen Hinweis darauf gibt.

Ohne Zeilenvorschubzeichen ist "\r\n" etwas weniger als 32768, grob gesagt passen da 32000 Zeichen rein,

Und mit einem Zeilenvorschub, bis der Speicher voll ist, habe ich immerhin 2 000 000 in den Strang geschoben, meine Hand wurde müde, weiter zu schaufeln :)

 
Urain:

Ohne den Zeilenvorschub sind es etwas weniger als 32768, also etwa 32.000 Zeichen,

aber mit dem Zeilenvorschub habe ich genug Speicher für jetzt, zumindest habe ich 2.000.000 in die Schnur geschoben, mein Arm ist müde vom Schieben :)

Vielen Dank! Zwei Millionen werden für mich zunächst ausreichen.

// Ich bin nur verwirrt: Was zum Teufel hat die String-Übersetzung damit zu tun? Es ist nur ein Symbol, nicht schlechter oder besser als die anderen.

// Nein, ich glaube dir, es ist nur so, dass ich normalerweise verstehe, wie die Dinge funktionieren, aber hier ist es irgendwie seltsam und überraschend...

// Womit haben Sie es gemessen? War es nicht eine Dateifunktion?

:)

 
MetaDriver:

Danke, das freut mich! Zwei Millionen werden mir zum ersten Mal reichen.

// Ich bin nur verwirrt: Was zum Teufel hat die String-Übersetzung damit zu tun? Es ist nur ein Symbol, nicht schlechter oder besser als die anderen.

// Nein, ich glaube dir, es ist nur so, dass ich normalerweise verstehe, wie die Dinge funktionieren, aber hier ist es irgendwie seltsam und überraschend...

// Womit haben Sie es gemessen? Nicht zufällig mit der Dateifunktion?

:)

Höchstwahrscheinlich handelt es sich um eine interne Darstellung der Zeichenkette; auf \r\n folgt wahrscheinlich die Zuweisung eines neuen (zusätzlichen) Arrays zur Speicherung von Informationen.

Ich weiß es nicht genau, fragen Sie MQ.

SZY natürlich für die Kontrolle in eine Datei gedumpt, aber zuerst die Zeichenfolge gebildet wird, überprüft seine Länge über Len, na ja, ich erinnere mich jetzt nicht, es war vor langer Zeit, aber alles war in Ordnung.

ZZZI Und ich überprüfte die gelesenen 10 Zeichen aus der gespeicherten Zeichenfolge, ohne die Übersetzung von mehr als ~32700 nicht in die Variable zu schreiben.

 
Urain:

Dabei handelt es sich höchstwahrscheinlich um eine interne Zeichenkettendarstellung, wobei auf \r\n wahrscheinlich ein neues (zusätzliches) Array zur Speicherung von Informationen folgt.

Ich weiß es nicht genau, fragen Sie MQ.

Nun, natürlich zu kontrollieren, um eine Datei zurückgesetzt, aber zuerst die Zeichenfolge gebildet wird, überprüft seine Länge durch Len, na ja, ich erinnere mich jetzt nicht, es war eine lange Zeit her, aber alles war in Ordnung.

ZZZY Und lesen von 10 Zeichen aus dem gespeicherten String, ohne Übersetzung mehr als ~32700 nicht in die Variable schreiben.

In Ordnung, danke, Nicholas. Und übrigens, alles Gute zum Geburtstag für Sie...!



--

Was hat der Genosse Stringo zu sagen?

 
Die maximale Zeilenlänge beträgt 1073741816 Zeichen, aber in x86 (32 Bit) ist nicht genug Speicher für diese Anzahl von Zeichen vorhanden.
 
Valmars:
Wir müssen nur die Computerzeit rechtzeitig synchronisieren, sonst können wir auch Geschäfte verlieren.

Das war's, ich hab's. Dann habe ich Sie missverstanden. )) Um immer die gesamte Historie korrekt zu erhalten, kann die Synchronisation wie folgt durchgeführt werden:

//+------------------------------------------------------------------+
//| МАКСИМАЛЬНОЕ_ВРЕМЯ                                               |
//+------------------------------------------------------------------+
datetime ChoiceTimeFunction()
  {
   datetime synchro=NULL;
//---
   synchro=(datetime)fmax((double)TimeTradeServer(),(double)TimeLocal());
//---
   if(!MQL5InfoInteger(MQL5_TESTING) || !MQL5InfoInteger(MQL5_OPTIMIZATION) || !MQL5InfoInteger(MQL5_VISUAL_MODE))
     {
      Print("synchro_time: ",synchro,"; TimeTradeServer(): ",TimeTradeServer(),"; TimeLocal(): ",TimeLocal()); return(synchro);
     }
//---
   synchro=TimeCurrent()+Milliseconds_Ahead;
//---
   Print("synchro_time tm+ml_ahead: ",synchro,"; TimeCurrent(): ",TimeCurrent(),"; Milliseconds_Ahead: ",Milliseconds_Ahead); return(synchro);
  }
Für den Prüfer gibt es nur eine Krücke und nicht für alle Fälle. Wir warten, bis sie es in Ordnung bringen.
 
tol64:

Das war's, ich hab's. Dann habe ich Sie missverstanden. )) Um immer die gesamte Historie korrekt zu erhalten, kann die Synchronisation wie folgt durchgeführt werden:

Für den Prüfer bleibt nur eine Krücke, und zwar nicht für alle Fälle. Wir warten darauf, dass sie es in Ordnung bringen.

Nein, du hast es richtig verstanden. Die Serverzeit hängt nicht von der Zeitzone des Computers ab, sie ist für alle gleich und entspricht der zuletzt in der "Market Watch" festgelegten Zeit.

Wenn der Markt auf einem bestimmten Server geschlossen wird (der Handel endet), sollten keine Stopps ausgelöst werden, bis der nächste Markt in einer neuen Woche wieder geöffnet wird. In Ihrem Fall scheint dies nicht der Fall zu sein. Es kommen bereits keine Kurse mehr im Terminal an, aber sie werden noch auf dem Server verarbeitet, und die gesetzten Stopps werden ausgelöst. Bei einigen Maklerunternehmen werden Stopps nicht durch den Markt, sondern durch den im Stopp festgelegten Kurs ausgelöst. Es handelt sich nicht um einen Marktmechanismus, sondern um einen "Küchenmechanismus".

Was ich über mögliche fehlende Trades gesagt habe, nun, wenn Ihre Uhr 2 Minuten hinterher ist, dann werden Trades, die in diesen letzten 2 Minuten gemacht wurden, nicht in die Historie fallen, weil die Serverzeit mit der lokalen Zeit berechnet wird und auch für die gleichen 2 Minuten nachhinken wird.

Was den Tester betrifft, so ist nicht klar, was ihn stört, denn all dies wird dort simuliert, und die Ortszeit ist gleich der Serverzeit.

 
MetaDriver:

OK, danke Nikolai, und übrigens, alles Gute zum Geburtstag für Sie...!

Ich habe es ausgegraben,

Skype und mitten in der Nacht werden Sie an den Geburtstag eines Bekannten erinnert (als Werbung :)

Danke für den Kuchen, er ist sehr schön, aber die Kerzen sind etwas schwer zu verdauen :o)

 
Valmars:

Nein, da haben Sie recht. Die Serverzeit ist unabhängig von der Zeitzone des Rechners, sie ist für alle gleich und entspricht der zuletzt in der 'Market Watch' erfassten Zeit.

Wenn der Markt auf einem bestimmten Server geschlossen wird (der Handel endet), sollten keine Stopps ausgelöst werden, bis der nächste Markt in einer neuen Woche wieder geöffnet wird. In Ihrem Fall scheint dies nicht der Fall zu sein. Es kommen bereits keine Kurse mehr im Terminal an, aber sie werden noch auf dem Server verarbeitet, und es werden Stopps ausgelöst. Bei einigen Maklerunternehmen werden Stopps nicht durch den Markt, sondern durch den im Stopp festgelegten Kurs ausgelöst. Es handelt sich nicht um einen Marktmechanismus, sondern um einen "Küchenmechanismus".

Nein, dort auf dem Server (MQ-Demokonto) hat alles korrekt funktioniert. Das heißt, die Stopps wurden ausgelöst, als ich nicht verbunden war. Aber als ich die Verbindung herstellte, war der Markt bereits geschlossen. Im Market Watch-Fenster wurde die Zeit des letzten Ticks vor der Unterbrechung der Verbindung aufgezeichnet. Als ich die Historie der Trades anforderte, indem ich TimeCurrent() als zweiten Wert angab, erhielt ich nicht die gesamte Historie. Obwohl die Hilfe für TimeCurrent() das sagt:

... Der Zeitwert wird auf dem Handelsserver gebildet und hängt nicht von den Zeiteinstellungen auf dem Computer des Benutzers ab.

Das heißt, ich verstehe, dass diese Funktion den Wert des letzten Eintreffens der Notierung eines der Instrumente im Fenster Market Watch vom Server zurückgeben muss, auch wenn die Verbindung unterbrochen wurde und die Verbindung hergestellt wurde, als der Markt bereits geschlossen war. In meinem Fall ist das nicht passiert, und ich habe nicht die ganze Geschichte mitbekommen. Ich weiß es nicht, es wird in der Hilfe nicht erwähnt.

Und was ich über mögliche verpasste Geschäfte sagte, nun, wenn Ihre Uhr 2 Minuten hinterher ist, werden die Geschäfte, die in diesen letzten 2 Minuten getätigt wurden, nicht in die Geschichte eingehen, weil die Serverzeit mit der lokalen Zeit berechnet wird und auch um die gleichen 2 Minuten hinterherhinken wird.

In diesem Fall können Sie, wenn Sie die gesamte Historie haben möchten, einfach eine größere Zahl für einen Tag im Voraus hinzufügen und es wird garantiert, dass alle Angebote ausgewählt werden. :)

Wie für den Tester, ist es nicht klar, was nicht für Sie, weil es alle simuliert und die lokale ist gleich dem Server.

Aber in der Testversion gibt es einen Fehler mit der Funktion HistoryDealsTotal(), der im Visualisierungsmodus auftritt. Die Zeit wird dort korrekt modelliert. In manchen Fällen hilft nur eine Krücke.

Grund der Beschwerde: