Vérifiez - qu'est-ce que j'ai fait de mal ? - page 6

 
Nikolai Semko #:

Oui, Natalia - c'était juste un mème "Quand ils vous paient pour une ligne de code".

C'est le genre d'humour des programmeurs.


Vous n'avez pas besoin d'une fonction dans votre cas.

Vous avez juste besoin de former les variables Volume1 ... Volume10 forme d'abord un tableau Volume[10]
et utilise ensuite l'indice n pour faire référence à ses éléments volume[n].
Ne vous inquiétez pas - presque tous les programmeurs sont passés par là.
L'essentiel est que vous aimiez vraiment la programmation. Je peux le sentir.
Vous irez donc loin.

Dis-moi comment l'écrire joliment. Je ne veux pas dupliquer les tableaux de code.
Le conseiller expert utilise 2 indicateurs.
et les conditions d'ouverture de l'ordre ressemblent maintenant à ceci :

if (Indicator1 > 0 && Indicator2 > 0)
{
OrderSend
}


Mais je voudrais ajouter un filtre dans les paramètres
Utiliser ou non 1 ou 2 indicateurs
Seulement je ne sais pas comment l'implémenter plus correctement.
Cela ressemblerait à quelque chose comme ça :

if (Indicator1 && Indicator1 > 0)
{
if (Indicator2 && Indicator2 > 0) || (Indicator2 == false)
{
///
}
}



if (Indicator2 && Indicator2 > 0)
{
if (Indicator1 && Indicator1 > 0) || (Indicator1 == false)
{
///
}
}
pour que je puisse désactiver un indicateur ou le deuxième indicateur dans les paramètres.
Je n'arrive pas à trouver comment le faire sans copier beaucoup de code. .....
 
Natalya Smirnova #:

Veuillez me conseiller sur la manière de l'écrire joliment. Afin de ne pas dupliquer les tableaux de codes.
L'Expert Advisor utilise 2 indicateurs.
et les conditions d'ouverture de l'ordre ressemblent maintenant à ceci :


Mais je voudrais ajouter le filtre
Utiliser ou non 1 ou 2 indicateurs
Seulement je ne sais pas comment l'implémenter plus correctement.
Cela ressemblerait à ceci :

Que je pouvais désactiver un indicateur ou l'autre dans les paramètres.
Je n'arrive pas à trouver comment le faire sans copier beaucoup de code. .....

J'ai écrit un peu à ce sujet ici : https://www.mql5.com/ru/forum/6343/page1384#comment_26447195.

 
JRandomTrader #:

J'ai écrit un peu sur le sujet ici : https://www.mql5.com/ru/forum/6343/page1384#comment_26447195.

Merci, je vais faire des recherches.
 

Natalya Smirnova #:

afin que je puisse désactiver un indicateur ou le deuxième indicateur dans les paramètres.
Je n'arrive pas à trouver comment le faire sans copier beaucoup de code......


input bool indicator_1 = true;
input bool indicator_2 = true;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool F_1()
    {
     if(!indicator_1)
          return true;
// выполнение условий

//---
     return false;
    }
bool F_2()
    {
     if(!indicator_2)
          return true;
// выполнение условий

//---
     return false;
    }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart(void)
    {
     if(F_1 && F2) /* работаем */ ;
    }

Écrivez la condition du code dans la fonction et si elle ne doit pas être vérifiée, alors la condition est remplie. Renvoie VRAI.

 
Natalya Smirnova #:

Veuillez me conseiller sur la manière de l'écrire joliment. Afin de ne pas dupliquer les tableaux de codes.
L'Expert Advisor utilise 2 indicateurs.
et les conditions d'ouverture de l'ordre ressemblent maintenant à ceci :


Mais je voudrais ajouter le filtre
Utiliser ou non 1 ou 2 indicateurs
Seulement je ne sais pas comment l'implémenter plus correctement.
Cela ressemblerait à ceci :

Que je puisse désactiver un indicateur ou le deuxième indicateur dans les paramètres.
Je n'arrive pas à trouver comment le faire sans copier beaucoup de code. .....

Cependant, la variable pour la condition d'utilisation et la variable pour la valeur de sortie de l'indicateur doivent être des variables différentes.
Et si les variables de la condition d'utilisation sont ind_1 et ind_2, alors, par exemple, vous pouvez faire ceci :

ind_1 = !(ind_1 && !(Indicator1>0));
ind_2 = !(ind_2 && !(Indicator2>0));
if (ind_1 && ind_2) { OrderSend... };
Juste au cas où : le point d'exclamation signifie l'inversion de la valeur du bool.
 
Nikolai Semko #:

Néanmoins, la variable pour la condition d'utilisation et la variable pour la valeur de sortie de l'indicateur doivent être des variables différentes.
Et si les variables de la condition d'utilisation seront ind_1 et ind_2, alors, par exemple, nous pouvons faire ceci :

ind_1 = !(ind_1 && !(Indicator1>0));

l'abondance de parenthèses et d'inversions dans l'expression logique suggère en quelque sorte que l'on pourrait simplifier...

PS/ architecturalement, c'est une vraie poubelle en général. Si les lectures d'un indicateur peuvent être regroupées sans aucun facteur de trading (indépendamment de l'endroit où vous avez ouvert quoi), alors c'est un indicateur et il n'a rien à voir avec la logique de trading du robot. Il doit être rendu et disponible pour l'analyse.

 
Maxim Kuznetsov #:

L'abondance de parenthèses et d'inversions dans l'expression logique suggère en quelque sorte qu'elle peut être simplifiée...

Peut-être.
Quelles sont les options pour la logique ab
0 0 = 1
0 1 = 1
1 0 = 0
1 1 = 1
Sauf !(a && !b)
Quelqu'un peut-il trouver une logique plus courte...

 
Maxim Kuznetsov #:

PS/ Architecturalement, c'est une scorie. Si les lectures d'un indicateur peuvent être regroupées sans aucun facteur de trading (indépendamment de l'endroit où vous avez ouvert quoi), alors c'est un indicateur et il n'a pas sa place dans la logique de trading d'un robot. Il doit être rendu et disponible pour l'analyse.

Je ne l'ai pas compris.
Je réponds simplement à une question. Pas plus.
 
Nikolai Semko #:
Peut-être.
Quelles sont les options pour la logique ab
0 0 = 1
0 1 = 1
1 0 = 0
1 1 = 1
Sauf !(a && !b)
Quelqu'un peut-il trouver une logique plus courte...

!a || b

:)

 
PapaYozh #:

!a || b

:)

Bien.
Merci :))
Drôle. J'ai essayé d'attacher XOR et j'ai oublié OR.

Donc une version plus courte :
ind_1 = !ind_1 || Indicator1>0;
ind_2 = !ind_2 || Indicator2>0;
if (ind_1 && ind_2) { OrderSend... };
ou version à une ligne avec les originaux ind_1 et ind_2 préservés

if ((!ind_1 || Indicator1>0) && (!ind_2 || Indicator2>0)) { OrderSend... };