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

 
Yevhenii Levchenko:
Wie setzt man einen Zeitfilter (nach Stunden) für den EA-Handel? Wird die folgende Option funktionieren:

YOU google (z.B. zeitliche Begrenzung des EA) - es kann Besonderheiten geben, z.B. Bieten von 22:00 Uhr bis 04:00 Uhr. In Kim I.V.'s fonts Betreff: Nur nützliche Schriften von Kim - schauen Sie mal rein.

Hier ist eine Möglichkeit:

extern int HourStart=2;
// время начала работы советника в часах по времени терминала - может быть от 0 до 23
extern int HourEnd=22;
// время окончания работы советника в часах по времени терминала
// пример - советник начинает работать в 2 часа 0 минут, заканчивает работу в 22, то есть в 22 часа и после советник не выставляет новых ордеров и ждет рабочего времени - 2 часа
extern bool Use_Time=false;

...

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   bool time_trade=false;
   if(Use_Time==false) {time_trade=true;}
   if(Use_Time==true && Hour()>=HourStart && Hour()<HourEnd) {time_trade=true;}

...
   
 
Roman Shiredchenko:

Googeln Sie es - es kann Besonderheiten geben, z.B. das Bieten von 22:00 Uhr bis 04:00 Uhr. In Kim's f.i.v. Thema: Nur nützliche f.i.v.'s von Kim - schauen Sie mal rein.

Hier ist eine Möglichkeit:

Wow, was für ein cooles Thema! Ich danke Ihnen!


Und was ich getan habe, wird nicht funktionieren?
 
Yevhenii Levchenko:

Wow, was für ein cooles Thema! Ich danke Ihnen!


Und was ich getan habe, wird nicht funktionieren?

Ja, keine Ahnung - mach es fertig und benutze es, finde das richtige heraus. Fahrräder sind IMHO alle erfunden worden.

 
Yevhenii Levchenko:
Wie kann ich den Zeitfilter (nach Stunden) für den EA-Handel einstellen? Wäre die folgende Option in Ordnung?

Wir haben dies vor einiger Zeit diskutiert, hier ist ein Thema, meine Beispiele funktionieren alle, ich benutze es, alles funktioniert in MT4https://www.mql5.com/ru/forum/317351


Jewhenii Levchenko:

Was sind die Besonderheiten der Verwendung von Symbol() und _Symbol?

Würde der folgende Code korrekt funktionieren, um das Vorhandensein von Aufträgen für das aktuelle Symbol zu prüfen?

Nein, Symbol() ist ein alter Weg, um Symbolnamen zu erhalten, die neuesten Builds für MQL4 - MQL5 Kompatibilität haben _Symbol hinzugefügt

Wenn Sie Code von Grund auf neu schreiben, verwenden Sie _Symbol, wenn Sie den Code auf MQL5 portieren wollen, müssen Sie ihn weniger bearbeiten.

 
Igor Makanu:

Wir haben dies vor einiger Zeit diskutiert, hier ist ein Thema, meine Beispiele funktionieren alle, ich benutze es, alles funktioniert in MT4https://www.mql5.com/ru/forum/317351


Nein, Symbol() ist ein alter Weg, um Symbolnamen zu erhalten, die neuesten Builds für MQL4 - MQL5 Kompatibilität haben _Symbol hinzugefügt

Wenn Sie Code von Grund auf neu schreiben, verwenden Sie _Symbol, wenn Sie den Code auf MQL5 portieren wollen, müssen Sie ihn weniger bearbeiten.

Ich danke Ihnen!

Der Code ist natürlich viel umfangreicher als das, was ich vorzuschreiben versuchte... :) Wir müssen uns hinsetzen und es herausfinden...
 
Igor Makanu:

Wir haben dies vor einiger Zeit diskutiert, hier ist ein Thema, meine Beispiele funktionieren alle, ich benutze es, alles funktioniert in MT4https://www.mql5.com/ru/forum/317351


Nein, Symbol() ist ein alter Weg, um Symbolnamen zu erhalten, die neuesten Builds für MQL4 - MQL5 Kompatibilität haben _Symbol hinzugefügt

Wenn Sie Code von Grund auf neu schreiben, verwenden Sie _Symbol, wenn Sie den Code auf MQL5 portieren wollen, müssen Sie ihn weniger bearbeiten.

Der Unterschied ist ein anderer. _Symbol ist eine vordefinierte Variable und Symbol() ist eine Funktion.

Beide arbeiten dort und dort. Alles ist genau gleich geblieben. Aber vor einiger Zeit sagte einer der Entwickler (ich weiß nicht mehr welcher), dass es besser sei, eine Funktion zu verwenden.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Was ist der Unterschied zwischen Symbol() und _Symbol

fxsaber, 2019.07.07 14:47

void Func( const string& ) {}

void OnStart()
{
  Func(Symbol()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func(_Symbol);  // OK   
}
 
Artyom Trishkin:

Der Unterschied ist ein anderer. _Symbol ist eine vordefinierte Variable und Symbol() ist eine Funktion.

Beide funktionieren in beide Richtungen. Alles ist absolut identisch. Aber vor einiger Zeit sagte einer der Entwickler (ich weiß nicht mehr genau, wer), dass es besser sei, eine Funktion zu verwenden.

Ich denke, der beste Weg, um es zu benutzen, sah ich durch die Hilfe, gibt es keine eindeutige Empfehlung von den Entwicklern

In der Praxis, in einigen Bibliotheken die Entwickler überschreiben Symbol() in Klasse Methoden, in MQL5 ich auch überschreiben Symbol() Methode für benutzerdefinierte TF in meiner Klasse .... Wenn es bequem ist, benutze ich es so, ich sehe keinen Verstoß gegen die Buchaxiome ))))

SZZ: Ich glaube, es ist bereits eine Religion... Die Funktion iClose() sollte nicht verwendet werden - "es ist eine Fälschung!" (С)

dann hier ist ein neuer Trend _Symbol ist schlechter als Symbol() ... gemessen die Geschwindigkeit nur für den Fall, kein Unterschied überhaupt, gleiche Arbeit

#property strict
//+------------------------------------------------------------------+
#define    test(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
void OnStart()
  {
   Print("test 1:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 2:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 3:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 4:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 5:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 6:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
  }
//+------------------------------------------------------------------+

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

 
Igor Makanu:

Ich denke, Sie sollten das verwenden, was für Sie am bequemsten ist. Ich habe mir die Referenz angesehen, es gibt keine eindeutigen Empfehlungen von den Entwicklern

In der Praxis, in einigen Bibliotheken die Entwickler überschreiben Symbol() in Klasse Methoden, ich auch überschrieben Symbol() Methode für benutzerdefinierte TF in MQL5 .... Wenn es bequem ist, benutze ich es so, ich sehe keinen Verstoß gegen die Buchaxiome ))))

SZZ: Ich glaube, es ist bereits eine Religion... Die Funktion iClose() sollte nicht verwendet werden - "es ist eine Fälschung! (С)

dann hier ist ein neuer Trend _Symbol ist schlechter als Symbol() ... gemessen die Geschwindigkeit nur für den Fall, kein Unterschied überhaupt, gleiche Arbeit

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

Wie das Sprichwort sagt: Was man kauft, kann man auch verkaufen. Die Empfehlung stand nicht in der Dokumentation, sondern wurde durch Mundpropaganda im Forum ausgesprochen.

 
Igor Makanu:

Warum steht in der letzten Zeile kein Schrägstrich, und ist es möglich, einen Wert aus einem Makro zurückzugeben

#define  FOR3(a,b,c,loop) for(int i=0; i<a; i++) \
for(int j=0; j<b; j++) \
for(int k=0; k<c; k++) \
{loop;}