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

 
ALXIMIKS:


...

4) pourquoi faut-il passer par les pauses ???

...


О ! Pouvez-vous me montrer comment ne pas les traverser ?

Bien sûr, la question est intéressante : est-il préférable d'ajouter OrderProfit() + OrderCommission() + OrderSwap() qui totalisent 0 et ne changent rien, ou devons-nous faire si pour chaque commande ?

 
Example2:


Peu importe comment le reconstruire, tant qu'il fonctionne.


Il y a une certaine différence dans certains cas. Si for (int i = 0 ; i < OrdersTotal() ; i++), la fonction OrdersTotal() est appelée à chaque boucle, et si for (int i = OrdersTotal()-1 ; i>=0 ; i--), alors la fonction OrdersTotal() est appelée une seule fois. Je n'ai pas expérimenté la vitesse d'exécution dans mql. Une fois, en php, la fonction count() a fonctionné pendant 17 secondes dans une boucle avant et 0,01 seconde dans une boucle arrière.
 
Mesure de la vitesse du cycle avant et arrière. 100 commandes, le cycle inverse est 5 fois plus rapide. Mais il n'y a jamais autant de commandes, 10 au maximum. S'il y a 10 commandes, la vitesse est 3 fois plus rapide. Il est palpable de choisir le cycle inverse.
 
Integer:
Mesure de la vitesse du cycle avant et arrière. 100 commandes, le cycle inverse est 5 fois plus rapide. Mais il n'y a jamais autant de commandes, 10 au maximum. S'il y a 10 commandes, la vitesse est 3 fois plus rapide. Il est tout à fait judicieux de choisir un cycle inversé.


Pouvez-vous m'indiquer comment normaliser le prix (mon message ci-dessus) ?

 
Example2:


Pouvez-vous me dire comment normaliser le prix (mon message ci-dessus) ?

Il existe une fonction NormalizeDouble().

NormalizeDouble(_High+Point*20,Digits);

Lors de la multiplication, il est préférable de mettre d'abord double, puis int, sinon dans certains cas vous pouvez perdre la partie fractionnaire.

 
if(Line_7 > Lines_1 > Line_6)
{
Alert("Сигнал на покупку");
OrderSend(Symbol(),OP_BUY,Lots_Typ,Ask,5,SL_Typ,TP_Typ);
}
return;}
Est-il possible de définir l'ouverture d'un ordre de cette manière ?
 
Link_x:
Est-il possible de définir l'ouverture d'un ordre de cette manière ?


Non.

C'est ainsi qu'il faut procéder :

if(Line_7 > Lines_1 && Lines_1 > Line_6)
 

J'ai également vérifié la vitesse de calcul des bénéfices en additionnant les bénéfices de tous les ordres et en ne sélectionnant que les ordres au marché :

Prof1+=OrderProfit()+OrderSwap()+OrderCommission();

и

if(OrderType()==OP_BUY || OrderType()==OP_SELL){
 Prof2+=OrderProfit()+OrderSwap()+OrderCommission();
}
La première option est un peu plus rapide, mais pas de manière significative. Le rapport de vitesse est d'environ 1/1.1
 
Integer:

Il existe une fonction NormalizeDouble().

Lors de la multiplication, il est préférable de mettre d'abord double, puis int, sinon vous risquez de perdre la partie fractionnaire dans certains cas.


Maintenant, j'obtiens l'erreur 3 : "Des paramètres incorrects ont été envoyés à la fonction de négociation, par exemple, un mauvais symbole, une opération de négociation non identifiée, une tolérance de prix négative, un numéro de ticket inexistant, etc. La logique du programme doit être modifiée".

 
Example2:


J'obtiens maintenant l'erreur 3 : " Des paramètres incorrects ont été envoyés à la fonction de transaction, par exemple un mauvais symbole, une transaction non identifiée, une tolérance de prix négative, un numéro de ticket inexistant, etc. La logique du programme doit être modifiée".


Déplacez le curseur jusqu'à la première parenthèse ouvrante après OrderSend, supprimez cette parenthèse, saisissez à nouveau, cela ouvrira une invite de type de paramètre, vérifiez que tous les paramètres sont du bon type.