Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1948

 
Vitaly Muzichenko #:

Sie müssen die Kosten des Artikels berücksichtigen

Ich kann Ihnen den Code geben, aber es wird lange dauern, ihn zu verstehen, er ist umfangreich und berücksichtigt auch das maximal mögliche Los auf der Marge

Wenn ich es nicht schaffe, werde ich Fragen stellen))) Natürlich müssen Sie den Punktwert berücksichtigen und die Formel ist keine 2-Stufen-Formel. Es fällt mir schwer, die Begriffe nicht vollständig zu verstehen, und die Überprüfung der Richtigkeit der Annahmen kostet Zeit))) Der Wert des Kontrakts = der Wert eines Lots in Geld Tag berechnet))))

 

Guten Tag, bitte beraten Sie, wie man einen Wert aus einer Liste von Konstanten in Form von Text zurückgeben.

Beispielsweise gibt die Funktion HistoryDealGetInteger bei der Abfrage des Ereignisses den int-Wert aus der ListeENUM_DEAL_TYPE zurück. Wie können wir aus der zurückgegebenen Nummer die Information erhalten, dass es sich um "DEAL_TYPE_CREDIT - Kreditabgrenzung" handelt? Nach der Fehlersuche wird dieser Wert natürlich nicht mehr benötigt, int reicht aus, um das Ereignis zu verarbeiten, aber während der Fehlersuche ist überhaupt nicht klar, was die von der Funktion zurückgegebenen Zahlen 3 oder 5 bedeuten.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Свойства сделок - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Кирилл Якимов #:

Guten Tag, könnten Sie mir bitte sagen, wie man einen Wert als Text aus einer Liste von Konstanten zurückgibt.

Beispielsweise gibt die Funktion HistoryDealGetInteger bei der Abfrage des Ereignisses den int-Wert aus der ListeENUM_DEAL_TYPE zurück. Wie können wir aus der zurückgegebenen Nummer die Information erhalten, dass es sich um "DEAL_TYPE_CREDIT - Kreditabgrenzung" handelt? Nach der Fehlersuche wird dieser Wert natürlich nicht mehr benötigt, int reicht aus, um das Ereignis zu verarbeiten, aber während der Fehlersuche ist überhaupt nicht klar, was die von der Funktion zurückgegebenen Zahlen 3 oder 5 bedeuten.

string s = EnumToString((ENUM_DEAL_TYPE) x)

 
Maxim Kuznetsov #:

string s = EnumToString((ENUM_DEAL_TYPE) x)

Vielen Dank, das war sehr hilfreich.
 

Können Sie mir bitte sagen, wie ich das Problem lösen kann:

1) Ich habe die Historie nicht geladen, im Chart-Fenster während des Online-Prozesses hatte ich Zeit, 70 000 Minuten-Balken zu laden. Ich lade meinen Expert Advisor in den Strategy Tester und gerade, wenn ich die Mindestanzahl von Balken für ein bestimmtes Muster geschrieben habe, antwortet er mit "nicht genug Balken für die Analyse". Ich drucke iBars aus und es werden 1200 Balken angezeigt. Ich habe die Geschichte geladen (8 000 000 Balken). Neustart, "9999999999" Balken in Fenster und Verlauf. Nova schreibt "nicht genug Geschichte". Drucken von iBars, wieder 1200. Was ist das und wie kann man es lösen?

2) Wie kann ich in der Mehrwährungsanalyse erzwingen, dass der Indikator neue eingehende Ticks für andere Währungspaare nicht verpasst, wenn die Kurse im aktuellen Chart plötzlich eingefroren sind und OnTick die Prüfung nicht aufruft? Ich habe OnTimer ausprobiert, aber es funktioniert nicht im Testgerät

 
In diesem Skript experimentiere ich mit der Größenänderung von dynamischen Arrays, die unterschiedliche Indizierungsrichtungen haben - um zu verstehen, auf welcher Seite neue Zellen erscheinen, wenn man die Arraygröße erhöht
void OnStart()
  {
   
   int a[], b[], size = 5, new_size = size + 5;
   
   if( ArraySize( a ) != size )
     ArrayResize( a, size, 0 );
   
   if( ArraySize( b ) != size )
     ArrayResize( b, size, 0 );
   
   if( ArrayGetAsSeries( a ) )
     ArraySetAsSeries( a, false );
   
   if( !ArrayGetAsSeries( b ) )
     ArraySetAsSeries( b, true );
   
   for( int i = 0; i < size; i++ )
     {
      a[i] = i;
      b[i] = i;
     };
   
   ArrayResize( a, new_size, 0 );
   ArrayResize( b, new_size, 0 );
   
   for( int i = 0; i < new_size; i++ )
     {
      Alert( "a", i, " ", a[i] );
      Alert( "b", i, " ", b[i] );
      Alert(" ");
     };
   
  }

Und hier ist das Ergebnis


Es stellt sich heraus, dass das Array b[] (das eine umgekehrte Indexierung hat) seine Werte irgendwie dupliziert, nachdem die Größe

erhöht wurde. Übersehe ich etwas oder habe ich einen Fehler gemacht?
 
Alexandr Sokolov Indizierungsrichtungen haben - um zu verstehen, auf welcher Seite neue Zellen nach der Erhöhung der Array-Größe erscheinen

Und dies ist das Ergebnis


Es stellt sich heraus, dass Array b[] (die umgekehrte Indizierung hat) hat irgendwie doppelte Werte nach Erhöhung der Größe

Warum? Übersehe ich etwas oder habe ich einen Fehler gemacht?

In jedem Fall können wir uns nicht auf die Werte in den neuen Array-Zellen verlassen - es handelt sich um nicht initialisierte Variablen, die jeden beliebigen Unsinn enthalten können.

 
Alexandr Sokolov Indizierungsrichtungen haben - um zu verstehen, auf welcher Seite neue Zellen erscheinen, nachdem die Array-Größe erhöht wurde

Und dies ist das Ergebnis


Es stellt sich heraus, dass Array b[] (das eine umgekehrte Indizierung hat) irgendwie doppelte Werte hat, nachdem die Größe erhöht wurde

Warum? Übersehe ich etwas oder habe ich einen Fehler gemacht?

Sie müssen das Feld umdrehen, nachdem es gefüllt wurde.

 
JRandomTrader #:

In jedem Fall können wir uns nicht auf die Werte in den neuen Array-Zellen verlassen - diese sind nicht initialisierte Variablen, die jeden beliebigen Müll enthalten können.

Richtig, aber es gibt 2 Abers
1) Die Spiegelung wird bei jeder anderen Größe beobachtet, nicht nur, wie in meinem Beispiel - 5
2) Wenn ein Array eine umgekehrte Indizierung hat, dann sollten neue Zellen am Anfang des Arrays erscheinen - was nicht der Fall ist

 
Alexey Viktorov #:

Sie müssen das Feld nach dem Füllen umdrehen.

Daran habe ich auch gedacht - zumindest sehe ich im Moment keine andere Lösung

Grund der Beschwerde: