Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 933

 
Yevhenii Levchenko:
Comment définir un filtre temporel (par heures) pour le trading EA ? L'option suivante fonctionnera-t-elle ?

YOU google (limitation dans le temps de l'EA - par exemple) - il peut y avoir des caractéristiques spéciales, par exemple des enchères de 22h00 à 04h00. Dans les polices de Kim I.V. Sujet : Seules des polices utiles de Kim - jetez-y un coup d'œil.

Voici une option :

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:

VOUS le recherchez sur Google - il peut y avoir des caractéristiques spéciales, par exemple des enchères de 22h00 à 04h00. Dans le f.i.v. de Kim Sujet : Seuls les f.i.v. utiles de Kim - jetez-y un coup d'œil.

Voici une option :

Wow, quel thème cool ! Merci !


Et ce que j'ai fait ne marchera pas ?
 
Yevhenii Levchenko:

Wow, quel thème cool ! Merci !


Et ce que j'ai fait ne marchera pas ?

Ouais, je sais pas - préparez-le et utilisez-le, trouvez ce qui est bon. Les bicyclettes ont toutes été inventées, IMHO.

 
Yevhenii Levchenko:
Comment puis-je définir le filtre temporel (par heures) pour le trading EA ? L'option suivante fonctionnerait-elle ?

Nous en avons discuté il y a quelque temps, voici un sujet, mes exemples fonctionnent tous, je l'utilise, tout fonctionne dans MT4https://www.mql5.com/ru/forum/317351.


Yevhenii Levchenko:

Quelles sont les spécificités de l'utilisation de Symbol() et _Symbol ?

Le code suivant fonctionnerait-il correctement pour vérifier la présence d'ordres pour le symbole courant ?

Non, Symbol() est une ancienne méthode pour obtenir le nom d'un symbole, les dernières versions pour la compatibilité MQL4 - MQL5 ont ajouté _Symbol.

Si vous écrivez du code à partir de zéro, utilisez _Symbol, si vous voulez porter le code vers MQL5, vous aurez moins à le modifier.

 
Igor Makanu:

Nous en avons discuté il y a quelque temps, voici un sujet, mes exemples fonctionnent tous, je l'utilise, tout fonctionne dans MT4https://www.mql5.com/ru/forum/317351.


Non, Symbol() est une ancienne méthode pour obtenir le nom d'un symbole, les dernières versions pour la compatibilité MQL4 - MQL5 ont ajouté _Symbol.

Si vous écrivez du code à partir de zéro, utilisez _Symbol, si vous voulez porter le code vers MQL5, vous aurez moins à le modifier.

Merci !

Le code, bien sûr, est beaucoup plus grand que ce que j'ai essayé de prescrire... :) Je vais devoir m'asseoir et trouver une solution...
 
Igor Makanu:

Nous en avons discuté il y a quelque temps, voici un sujet, mes exemples fonctionnent tous, je l'utilise, tout fonctionne dans MT4https://www.mql5.com/ru/forum/317351.


Non, Symbol() est une ancienne méthode pour obtenir le nom d'un symbole, les dernières versions pour la compatibilité MQL4 - MQL5 ont ajouté _Symbol.

Si vous écrivez du code à partir de zéro, utilisez _Symbol, si vous voulez porter le code vers MQL5, vous aurez moins à le modifier.

La différence est différente. _Symbol est une variable prédéfinie et Symbol() est une fonction.

Les deux travaillent ici et là. Tout est exactement pareil. Mais un jour, l'un des développeurs (je ne me souviens plus lequel) a dit qu'il était préférable d'utiliser une fonction.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Quelle est la différence entre Symbol() et _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:

La différence est différente. _Symbol est une variable prédéfinie et Symbol() est une fonction.

Les deux fonctionnent dans les deux sens. Tout est absolument identique. Mais il y a quelque temps, l'un des développeurs (je ne me souviens plus qui exactement) a déclaré qu'il était préférable d'utiliser une fonction.

Je pense que la meilleure façon de l'utiliser, j'ai regardé dans l'aide, il n'y a pas de recommandation précise de la part des développeurs.

En pratique, dans certaines bibliothèques, les développeurs surchargent la méthode Symbol() dans les méthodes de classe. Dans MQL5, j'ai également surchargé la méthode Symbol() pour les TF personnalisés dans ma classe ..... Si c'est pratique, je l'utilise de cette façon, je ne vois aucune offense aux axiomes du livre ))))

SZZ : Je pense que c'est une religion... La fonction iClose() ne doit pas être utilisée - "c'est un faux !" (С)

puis voici une nouvelle tendance _Symbol est pire que Symbol() ...j'ai mesuré la vitesse juste au cas où, aucune différence, même travail

#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:

Je pense que vous devriez utiliser ce qui est le plus pratique. J'ai regardé dans la référence, il n'y a pas de recommandation définitive des développeurs.

En pratique, dans certaines bibliothèques, les développeurs surchargent la méthode Symbol() dans les méthodes de classe, j'ai également surchargé la méthode Symbol() pour le TF personnalisé dans MQL5 ..... Si c'est pratique, je l'utilise de cette façon, je ne vois aucune offense aux axiomes du livre ))))

SZZ : Je pense que c'est une religion... La fonction iClose() ne doit pas être utilisée - "c'est un faux ! (С)

puis voici une nouvelle tendance _Symbol est pire que Symbol() ...j'ai mesuré la vitesse juste au cas où, aucune différence, même travail

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 :

Comme le dit le proverbe, ce que vous achetez, vous le vendez. La recommandation n'était pas dans la documentation, mais de bouche à oreille sur le forum.

 
Igor Makanu:

Pourquoi la dernière ligne ne comporte pas de barre oblique et est-il possible de renvoyer une valeur à partir d'une macro ?

#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;} 
Raison: