Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 8

 
gyfto:

De mon point de vue, je pense que Close[] peut être passé dans la boucle de Bars-1 à 0, et vous pouvez rassembler ce tableau dans dll et travailler avec lui là. Je ne l'ai pas encore essayé, mais c'est pour bientôt.

Vous n'avez pas besoin de passer le tableau lui-même. Il suffit de lui passer un pointeur et sa taille.

https://docs.mql4.com/ru/array/ArrayCopySeries

https://docs.mql4.com/ru/array/ArrayCopyRates

 

Les gars, s'il vous plaît, donnez-moi une condition simple "si leprix actuel> le prix d'ouverture de la barre, alors exécuter l'action". Je n'ai pas encore travaillé avec des barres. Et mon cerveau ne peut pas aller jusqu'à 4:49

 
oDin48:

Les gars, s'il vous plaît, donnez-moi une condition simple "si le prix actuel > le prix de la barre ouverte, alors exécuter l'action". Je n'ai pas encore travaillé avec des barres. Et mon cerveau ne peut pas aller jusqu'à 4:49



if(Close[0]>Open[0])
    {
  //Ваше действие
    }
 
Bonjour à tous .... comment peut-on raccourcir l'expression suivante : if(a>b && a>c && a>d)
 

Salutations !

Je ne sais pas où demander mieux, mais j'ai décidé de ne pas créer un nouveau sujet après tout. J'ai essayé de trouver un conseiller expert dans CodeBase et il semble y en avoir suffisamment, mais comme je ne suis pas un expert en mql, je me suis rendu compte que je ne serai pas en mesure d'allouer les fonctions dont j'ai besoin. Savez-vous s'il existe un simple EA qui garderait la trace des ordres déjà ouverts (et des ordres nouvellement ouverts) et si l'un d'entre eux se ferme (par stop, tout d'abord), alors un nouvel ordre en attente est créé avec les paramètres d'un ordre fermé (prix, prise, stop) ?

Et une dernière question. Nous avons l'indicateur i-SignalOfTrade. Comme les terminaux mobiles ne fournissent pas de notifications sonores des événements, cet indicateur peut être très utile. Mais il possède des fonctions supplémentaires qui ne peuvent pas être désactivées si vous tradez par vous-même - il vous informe d'événements tels que la création et la modification d'ordres en attente, etc. C'est-à-dire la notification d'actions dont vous êtes déjà au courant. Je vous serais reconnaissant si vous pouviez m'aider à les désactiver (ou peut-être existe-t-il un autre indicateur similaire), j'ai seulement besoin de laisser la notification du déclenchement de l'ordre en attente, du déclenchement du take et du stop.

 
i999i:
Bonjour à tous, .... comment puis-je abréger l'expression suivante : if(a>b && a>c && a>d)

Vous pourriez écrire if((b-a)*(c-a)*(d-a)>0), mais pas nécessairement plus rapidement. Le ET logique est une multiplication binaire, c'est juste une autre notation de la même expression, la seule différence est la taille des types de variables. a>b est une variable booléenne, 4 octets, tandis que b-a, s'ils sont doubles, alors la différence sera double (8 octets), et cette multiplication est au moins 2 fois plus longue.

Zhunko:

Vous n'avez pas besoin de passer le tableau lui-même. Il suffit de lui passer un pointeur et sa taille.


Un conseil inestimable.

gyfto:

a>b est une variable booléenne, 4 octets

Laissez-moi vous expliquer. Vous pouvez réécrire votre expression comme if(((a>b)*(a>c)*(a>d)==1), car les expressions entre parenthèses prennent les valeurs 0 ou 1 (et elles sont, à leur tour, définies dans define dans le précompilateur comme false et true).
 
gyfto:

Vous pouvez écrire if((b-a)*(c-a)*(d-a)>0), mais pas nécessairement plus rapidement. Le ET logique est une multiplication binaire, c'est juste une autre notation de la même expression, la seule différence est la taille des types de variables. a>b est une variable booléenne, 4 octets, et b-a, s'ils sont doubles, alors la différence sera double (8 octets), et cette multiplication est au moins 2 fois plus longue.


Un conseil inestimable.


gyfto:

Vous pouvez écrire if((b-a)*(c-a)*(d-a)>0), mais il n'est pas sûr que cela fonctionne plus rapidement. Le ET logique est une multiplication binaire, c'est juste une autre notation de la même expression, la seule différence est la taille des types de variables. a>b est une variable booléenne, 4 octets, et b-a, s'ils sont doubles, alors la différence sera double (8 octets), et cette multiplication est au moins 2 fois plus longue.


Un conseil inestimable.

merci pour l'astuce .... existe-t-il un autre moyen de calculer la plus petite et la plus grande valeur à partir de a,b,c ?
 
i999i:

Merci pour l'astuce .... existe-t-il un autre moyen de calculer la plus petite et la plus grande valeur à partir de a,b,c ?


MathMax(MathMax(a,b),c) et vice versa MathMin. Si quatre valeurs, alors int max = MathMax(MathMax(x1, x2), MathMax(x3, x4)). Si les valeurs sont une cargaison, formez également un tableau via ArrayMaximum.
 
gyfto:

MathMax(MathMax(a,b),c) et vice versa MathMin. Si quatre valeurs, alors int max = MathMax(MathMax(x1, x2), MathMax(x3, x4)). Si vous avez besoin de former un tableau à travers ArrayMaximum aussi.
.

vous devrez utiliser ArrayMaximum, il y a des dizaines de valeurs ....a ArrayMaximum sera plus rapide que ceci - a>b && a>c && a>d
 
i999i:

merci pour le conseil .... y a-t-il un autre moyen de calculer la plus petite et la plus grande valeur de a,b,c ?


D'abord, dites-moi pourquoi vous en avez besoin. Vous devez en connaître la raison. Est-ce juste pour le plaisir et l'intérêt, ou y a-t-il un but derrière tout cela ?