[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 381

 
double MarketInfo( string symbol, int type) 

Ceci est de l'aide, mais est-il possible d'utiliser NULL comme symbole, afin de "surveiller" uniquement l'instrument sur lequel l'EA fonctionne ?

C'est juste que nous prévoyons plusieurs EA du même type sur différentes paires.

Par exemple, comme ceci :

MarketInfo(NULL,MODE_ASK)
 
moskitman:

Cela vient de l'aide, mais est-il possible d'utiliser NULL comme symbole pour "surveiller" uniquement l'instrument sur lequel l'EA est exécuté ?

Comme ceci, par exemple :

Il semble que le NULL ne fonctionne pas.

Mais Symbol() fonctionnera =)

 

Bon après-midi. J'ai la question suivante. Lelivre MQL4situé à l'adresse MQL4.community, dans la section "Simple MQL Programs ", contient un exemple de tradingexpert.mq4 avec le contenu suivant (voir fichier joint). Les variables externes extern double StopLoss =200 et extern double TakeProfit =39 sont déclarées dans le bloc 1-2. Les appels des blocs 8-9 des fonctions New_Stop(StopLoss) et New_Stop(TakeProfit) sont utilisés pour calculer les paramètres SL et TP. Une description de la fonction se trouve dans le bloc 11-12.

Question: Le paramètre formel de la fonction New_Stop est de type int(int Parametr), alors que les paramètres passés dans l'appel de fonction New_Stop(StopLoss)(New_Stop(TakeProfit)) sont de type double... Dans le livre MQL4, trouvé sur MQL4.community dans la section "Language Basics", sous-section "Functions", "Function Properties" dit "Le nombre, le type et l'ordre des paramètres passés dans un appel de fonction doivent correspondre au nombre, au type et à l'ordre des paramètres formels passés dans la description de la fonction (l'exception est un appel de fonction qui a des paramètres par défaut - voir Appel de fonction et Description de fonction et Opérateur de retour. Comment expliquer cette contradiction : selon ce dernier, en déclarant les variables StopLoss et TakeProfit, j'aurais dû indiquer le type int, et non double(le compilateur ne donne aucune erreur) ?

Afin de ne pas encombrer le forum, merci d'avance pour la réponse.

Dossiers :
 

Bonjour, pouvez-vous me donner un indice... J'ai cherché sur la moitié de l'internet, et les informations varient

L'essence du conseiller expert est d'ouvrir des positions sur différents instruments. "Dans la réalité, cela fonctionne et montre les prix actuels, mais je ne peux pas le faire passer par l'histoire...". La fonction renvoie zéro.

Je veux afficher la cotation actuelle pour deux devises : EURUSD et EURCHF, par exemple.

J'appelle la cotation actuelle avec cette fonction (je suis l'historique lorsque le graphique EURUSD est actif) :

MarketInfo("EURUSD",MODE_BID) ---> obtenir le prix actuel

MarketInfo("EURCHF ",MODE_BID) ---> renvoie zéro

J'ai trouvé sur ce forum que MarketInfo ne fonctionne pas sur l'historique, utilisez "iClose".

Mais lorsque j'appelle quote en utilisant le

iClose("EURUSD",PERIOD_M1,0) ---> J'obtiens le prix actuel

iClose("EURCHF",PERIOD_M1,0) ---> il renvoie zéro

Comment puis-je obtenir les cours actuels pour différents instruments dans le testeur de stratégie? Merci.

 
faton:

Le testeur MT4 n'est pas multi-devises. En d'autres termes, seuls les EA à monnaie unique peuvent être testés.

 
moskitman:

Le testeur MT4 n'est pas multi-devises. En d'autres termes, seuls les EA à monnaie unique peuvent être testés.


merci
 
faton:

merci

Plus précisément, testez sur un outil et vous pourrez utiliser d'autres outils pour l'analyse.
 
sergeev:


merci pour votre aide !))
 
DhP:

Ou du moins, c'est ce qu'il semble :

merci pour vos commentaires ! !! très utiles !
 
7777877:

Bon après-midi. J'ai la question suivante. Lelivre MQL4situé à l'adresse MQL4.community, dans la section "Simple MQL Programs ", contient un exemple de tradingexpert.mq4 avec le contenu suivant (voir fichier joint). Les variables externes extern double StopLoss =200 et extern double TakeProfit =39 sont déclarées dans le bloc 1-2. Les appels des blocs 8-9 des fonctions New_Stop(StopLoss) et New_Stop(TakeProfit) sont utilisés pour calculer les paramètres SL et TP. Une description de la fonction se trouve dans le bloc 11-12.

Question: Le paramètre formel de la fonction New_Stop est de type int(int Parametr), alors que les paramètres passés dans l'appel de fonction New_Stop(StopLoss)(New_Stop(TakeProfit)) sont de type double... Dans le livre MQL4, trouvé sur MQL4.community au chapitre "Language Fundamentals" dans la section "Functions", sous-section "Function Properties" dit "Le nombre, le type et l'ordre des paramètres passés dans un appel de fonction doivent correspondre au nombre, au type et à l'ordre des paramètres formels passés dans la description de la fonction (l'exception est un appel de fonction qui a des paramètres par défaut - voir Appel de fonction et Description de fonction et Opérateur de retour. Comment expliquer cette contradiction : selon ce dernier, lors de la déclaration des variables StopLoss et TakeProfit, j'aurais dû déclarer le type int, et non double(le compilateur n'a pas généré d'erreur) ?

Merci d'avance pour la réponse, pour ne pas encombrer le forum.

Les paramètres externes (extern double StopLoss =200 ; extern double TakeProfit =39 ; ), en principe, devraient être de type entier (plus exactement, selon l'idée de l'auteur - c'est une valeur en points). Lors de l'appel de la fonction, la conversion implicite de type est utilisée. Le type à virgule flottante est converti en type entier avec perte de précision. Dans ce cas, cela n'a pas d'importance : la taille du stop et du profit, comme prévu, est définie en pips - c'est toujours un nombre entier.

À mon avis, le code d'exemple est mal écrit.

L'utilisation de la valeur absolue des constantes est un style très mauvais et erroné, avec des noms mnémotechniques.

         if (OrderType()>1)                     // Попался отложенный
           {
 

La pire implémentation de l'énumération d'ordre : il est difficile de penser à une implémentation plus "retardée". Elle semble être délibérément lente : calculs supplémentaires, appels de fonction inutiles - l'opération la plus coûteuse en termes de temps, et à chaque itération de la boucle. Et ce, malgré le fait que le nombre d'ordres ne change pas à l'intérieur de la boucle.

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров: