Questions des débutants MQL5 MT5 MetaTrader 5 - page 926

 
Seric29:
Quel opérateur peut être utilisé à partir duquel 2 résultats peuvent être retournés ? J'utilise l'instruction if pour trouver cette condition, mais elle ne peut pas renvoyer des résultats multiples, auquel cas je dois écrire la même condition 2 fois, donc j'écris avec cette question.

Les conditions vérifiées ne sont pas très claires, mais peut-être que l'interrupteur fonctionnera pour vous. Et à VRAI assigner les valeurs dont vous avez besoin.

 
Existe-t-il une fonction permettant de permuter les valeurs de deux variables ?
 
pivomoe:
Existe-t-il une fonction permettant de permuter les valeurs de deux variables ?

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

Caractéristiques du langage mql5, subtilités et astuces

fxsaber, 2018.08.26 19:02

La partie anglaise du forum a montré
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }

 
Artyom Trishkin:

Merci. Je vais devoir me familiariser avec ces définitions.

 
Bonjour, Pourquoi la fonction Bars() a des valeurs différentes lorsqu'elle est appelée par l'indicateur et par l'expert et COMMENT FAIRE LA CORRESPONDANCE ?
 
Tango_X:
Bonjour, Pourquoi la fonction Bars( ) a des valeurs différentes lorsqu'elle est appelée depuis l'indicateur et l'Expert Advisor et comment faire correspondre les deux ?

Afficher le code de l'EA et de l'indicateur.

 
Alexey Viktorov:

Afficher le code de l'EA et de l'indicateur.

Il suffit d'appeler la fonction Bars(_Symbol,_Period)

 
Tango_X:

Il suffit d'appeler la fonction Bars(_Symbol,_Period)

Dois-je demander une impression du résultat séparément ?

Je ne vois pas de différence. Bien que dans le testeur cette variante n'est pas exclue en raison de la disponibilité de l'histoire sur laquelle je sais peu, seulement des souvenirs vagues de ce que j'ai lu il ya quelque temps. Après tout, il s'avère que le nombre total de barres disponibles. Mais si vous demandez de temps en temps, il ne peut y avoir aucune différence.

 
Alexey Viktorov:
L'instruction if ne renvoie aucune valeur.

Il existe deux options pour attribuer des valeurs à certaines variables dans une fonction séparée :

1. Les variables doivent être visibles dans toutes les parties du programme. C'est-à-dire qu'ils doivent être déclarés au niveau de la variable globale (au début du code).

2. Pour passer les variables déclarées localement à la fonction utilisateur par référence. C'est-à-dire, mettez & avant le nom de la variable

Cela signifie que si une condition est vraie, deux actions identiques doivent être exécutées, par ex.

        if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);
}

J'ai déclaré des variables et rien n'est fait sauf cette actionPrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP] ; ou cette actionPrice_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP] ; comment lui faire effectuer 2 actions identiques avec les deux niveaux supérieur et inférieur par condition. Quelqu'un peut-il me dire comment l'écrire plus court ?

 
Konstantin Nikitin:

Les conditions vérifiées ne sont pas très claires, mais peut-être que l'interrupteur fonctionnera pour vous. Et à VRAI, attribuez les valeurs que vous voulez.

 if
        (Bar_Op[qt+2]>=Bar_Lo[qt+1]&&Bar_Cl[qt+2]<=Bar_Hi[qt+1]&& 
        Bar_Cl[qt+2]>=Bar_Lo[qt+1]&&Bar_Op[qt+2]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+3]>=Bar_Lo[qt+1]&&Bar_Cl[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+3]>=Bar_Lo[qt+1]&&Bar_Op[qt+3]<=Bar_Hi[qt+1]&&
        Bar_Op[qt+4]>=Bar_Lo[qt+1]&&Bar_Cl[qt+4]<=Bar_Hi[qt+1]&&
        Bar_Cl[qt+4]>=Bar_Lo[qt+1]&&Bar_Op[qt+4]<=Bar_Hi[qt+1])
         {
          int iHgCL=iHighest(_Symbol,PERIOD_D1,MODE_CLOSE,4,qt+1); int iHgOP=iHighest(_Symbol,PERIOD_D1,MODE_OPEN,4,qt+1);
         Price_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP];//провести нижний уровень
         int iLwCL=iLowest(_Symbol,PERIOD_D1,MODE_CLOSE,3,qt+1); int iLwOP=iLowest(_Symbol,PERIOD_D1,MODE_OPEN,3,qt+1);
         Price_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP];//провести верхний уровень я перепутал записи местами и условие перевёрнуто задом на перёд но для примера вопроса пойдёт

         string Line_TR="Ln_TRUr"+DoubleToString(qt,0);
         vs_Line_TR( Line_TR, iTime(_Symbol,PERIOD_D1,qt+2),  Price_UrNij, iTime(_Symbol,PERIOD_D1,qt), Price_UrNij, clrGreen, DRAW_LINE, 2, false, false);

Vous devez exécuterPrice_UrNij = Bar_Cl[iHgCL]>Bar_Op[iHgOP] ? Bar_Cl[iHgCL]:Bar_Op[iHgOP] ; etPrice_UrVerh = Bar_Cl[iLwCL]<Bar_Op[iLwOP] ? Bar_Cl[iLwCL]:Bar_Op[iLwOP] ;.