Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1228

 
Vladimir Karputov:

Das ist dann schon richtig:

und wenn es sich nicht schließen lässt, sehen Sie in der Protokolldatei nach. Dafür kann es eine Million Gründe geben: Umleitung, Handelsverbot, keine Preise, Nähe der Stopp-Levels...

Ich danke Ihnen. Dann ist es so) :


void CloseSellPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
	{
          if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
            {
             if(m_position.PositionType()==POSITION_TYPE_SELL)
                m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
            }
	}


  }

Ich habe nur Klammern hinzugefügt. Damit die Neulinge nicht verwirrt werden.

 

Hallo. Ich verwende eine solche Zeichenkette oft in einem Programm, um Protokolle in separate Dateien zu schreiben:

StringConcatenate(M,"Начинаем проверять время работы модулей. i=",i); Log.write(M,__FILE__,__LINE__);

Können Sie mir sagen, wie ich diese Zeile kürzen kann? Tatsächlich werden hier nur die Ausgabezeichenfolge selbst und der Name der Variablen, an die ich die Ausgabe mache, geändert.

Ich habe versucht, define zu verwenden

#define  LOG(LogPerem,StrMes) StringConcatenate(M,StrMes,""); LogPerem.write(M,__FILE__,__LINE__);

aber wenn ich es so nenne, wird es nicht mehr funktionieren:

LOG(Log,"i=",i);
 
pivomoe:

Hallo. Ich verwende eine solche Zeichenfolge oft in einem Programm, um Protokolle in separate Dateien zu schreiben:

Können Sie mir sagen, wie ich diese Zeile kürzen kann? Tatsächlich werden hier nur die Ausgabezeichenfolge selbst und der Name der Variablen, an die ich die Ausgabe mache, geändert.

Ich habe versucht, define zu verwenden

aber es so zu nennen, wird nicht mehr funktionieren:

Kennen Sie sich mit dem Präprozessor aus?

Ihr

LOG("i=",i);
entfaltet sich in
StringConcatenate(M,i,""); "i=".write(M,__FILE__,__LINE__);;

und das wird dann an den Compiler weitergegeben.

Das ist nicht einmal lustig. Rezept eins: Lesen Sie Doku, vorzugsweise nicht lokal, denn lokal setzt bereits ein gewisses Verständnis der Terminologie voraus.

Versuchen Sie dies, es könnte helfen: https://metanit.com/cpp/c/3.1.php

С | Препроцессор
  • metanit.com
Препроцессор является обязательным компонентом компилятора языка Си. Препроцессор обрабатывает исходный текст программы до ее непосредственной компиляции. Результатом работы препроцессора является полный текст программы, который передается на компиляцию в исполняемый файл. Для управления препроцессором применяются директивы, каждая из которых...
 
Vladimir Simakov:

Das ist nicht einmal lustig. Es gibt nur ein Rezept: Rauchen Sie die Docks, vorzugsweise nicht die lokalen, denn die lokalen setzen bereits ein gewisses Verständnis der Terminologie voraus.

Versuchen Sie dies, falls es hilft: https://metanit.com/cpp/c/3.1.php

Was meinen Sie mit plötzlich? Hat es Ihnen geholfen? Können Sie meine Zeile mit define verkürzen?


Ich habe eine Code-Zeile in meiner Frage geändert

LOG("i=",i);

zu.

LOG(Log,"i=",i);
 
pivomoe:

Hallo. Ich verwende eine solche Zeichenfolge oft in einem Programm, um Protokolle in separate Dateien zu schreiben:

Können Sie mir sagen, wie ich diese Zeile kürzen kann? Tatsächlich werden hier nur die Ausgabezeichenfolge selbst und der Name der Variablen, an die ich die Ausgabe mache, geändert.

Ich habe versucht, define zu verwenden

aber wenn ich es so nenne, wird es nicht mehr funktionieren:

Ich habe mein Problem durch die Verwendung von Funktionsblättern wie diesem gelöst:

template<typename T1,typename T2,typename T3,typename T4,typename T5,typename T6,typename T7,typename T8,typename T9,typename T10>
void Write(T1 var1,T2 var2,T3 var3,T4 var4,T5 var5,T6 var6,T7 var7,T8 var8,T9 var9,T10 var10,string ffile,int line)
  {
   string Str;
   StringConcatenate(Str,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10);
   write(Str,ffile,line);
  }; 

Nun rufe ich in meinem Programm folgendes auf

   Log.Write("Test1",__FILE__,__LINE__);  
 
pivomoe:

Was meinen Sie mit "plötzlich"? Hat es bei Ihnen funktioniert? Können Sie meine Zeile mit define kürzen?


Ich habe eine Code-Zeile in meiner Frage geändert

zu

LOG("Text"); Ich habe ein Beispiel dafür gegeben, wie dies umgesetzt wird - suchen Sie irgendwo im Forum danach.
 

Guten Tag, hier ist das Problem: Ich habe einen EA, der einen benutzerdefinierten Indikator aufruft, um Daten anzuzeigen, alles funktioniert gut in der Strategie-Tester, aber im realen Handelsmodus, wenn ich den EA starten, wird der Indikator nicht angezeigt. Im Protokoll schreiben benutzerdefinierte Indikator erfolgreich geladen, es scheint zu rascheln, sendet Textnachrichten, aber auf dem Chart in der Liste der Indikatoren ist es auch nicht. Wenn ich sie jedoch auf das Diagramm ziehe, werden die Daten übernommen und alles wird normal angezeigt. Der Indikator befindet sich im Ordner Indicators, in der Funktion iCustom(NULL,0, "Indikatorname",Count). Ich habe auch versucht, #resource "\\\Indicators\\\\indicator name.ex5", iCustom(NULL,0,"::Indicators\\\indicator name.ex5",Count) hinzuzufügen, aber es hat nichts gebracht. Was ist der Grund dafür?

 

Gibt es eine Einstellung, um die aktuellen Werte der Indikatorpuffer zu entfernen?


 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 

Sehr geehrte Fachleute, könnten Sie mir bitte mitteilen, ob es möglich ist, die Werte des RSI für einen Wochenzeitraum im Code des Advisors zu erhalten, aber die Werte für die Woche zu berechnen, die nicht am Montag beginnt, sondern zum Beispiel am Mittwoch (d.h. die Woche von Mittwoch bis zum nächsten Mittwoch). Soweit ich weiß, ist das mit iRSI nicht möglich?

Bislang sehe ich nur eine Möglichkeit, den Code für die Berechnung selbst zu schreiben. Gibt es eine einfachere Lösung oder eine fertige Lösung?