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

 
Leanid Aladzyeu:

Voici le code :

if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)

Vous n'envisagez pas la possibilité que OrderStopLoss() soit égal à zéro. Et dans tous les cas, le zéro sera inférieur à l'expressionAsk+(TrailingStop+TrailingStep)*Point, et la condition renverra faux.

 
if((OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)||OrderStopLoss()==0)
Essayez-le et voyez si ça marche. Je ne suis pas vraiment entré dans le code.
 

Merci àVitalii Ananev,Vladimir Zubov!

Je suis en train d'écrire un EA basé sur l'indicateur RSI. Le principe de l'EA sera d'ouvrir des ordres par l'indicateur mais il fermera aussi par le même indicateur (je ne connais pas le prix de clôture).

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrdreClose(ticket,Lot,Ask,Slippage,Blue) ;

retour(0) ;

Cette condition n'est pas remplie. Pourquoi ? (Il ouvre et ferme immédiatement l'ordre, et ainsi de suite dans la boucle).

Voici la question principale. Mon conseiller-expert travaillera avec un grand nombre d'ordres et j'ai besoin de calculer le prix moyen, haut et bas de tous les ordres sur le marché, comment trouver les prix de clôture de tous les ordres pour obtenir un profit total et d'autres opérations similaires ?

 
Leanid Aladzyeu:

Comme indiqué dans la référence donne une erreur.

Oui !? Et quel type d'erreur vous donne-t-il ? Que dit le compilateur ?

 
Leanid Aladzyeu:

Merci àVitalii Ananev,Vladimir Zubov!

Je suis en train d'écrire un EA basé sur l'indicateur RSI. Le principe de l'EA sera d'ouvrir des ordres par l'indicateur mais il fermera aussi par le même indicateur (je ne connais pas le prix de clôture).

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrdreClose(ticket,Lot,Ask,Slippage,Blue) ;

retour(0) ;

Cette condition n'est pas remplie. Pourquoi ? (Il ouvre et ferme immédiatement l'ordre, et ainsi de suite dans la boucle).

Voici la question principale. Mon conseiller expert travaillera avec un grand nombre d'ordres et j'ai besoin de calculer le prix moyen, le prix le plus élevé et le prix le plus bas pour tous les ordres sur le marché.

Le prix de clôture d'une position ne sera pas connu avant que la position ne soit fermée. Ensuite, vous pouvez trouver le prix de clôture dans l'historique des transactions avec la fonction OrderClosePrice().

Il ouvre et ferme immédiatement la position, car la condition de fermeture est remplie. Vérifiez la logique de la condition de fermeture. Essayez de l'écrire de cette façon pour commencer :

if(OrderType()==OP_BUY && (irsa <=20 || irsa >=40))
{
  OrderClose(ticket,Lot,Ask,Slippage,Blue);

 return(0); 
}

Lire la référence sur la priorité des calculs des expressions logiques.

"Vous devez calculer le prix moyen, haut et bas de tous les ordres sur le marché" - Je suis désolé, de quel prix parle-t-on ? Le prix de l'ordre ouvert ? Le prix actuel d'une paire de devises ? Le prix auquel le profit total de toutes les positions ouvertes sera atteint sans aucune perte ?

 
Tapochun:

Oui !? Et quel type d'erreur donne-t-il ? Que dit le compilateur ?

Désolé, pas d'erreur, mais la méthode de l'échantillon ne fonctionne pas pour moi (j'obtiens des erreurs avec le chalutage).
 
Vitalii Ananev:

Le prix de clôture de la position ne sera pas connu avant la fermeture de la position. La fonction OrderClosePrice() peut alors être trouvée dans l'historique des transactions.

Il ouvre et ferme immédiatement les positions, car la condition de fermeture est remplie. Vérifiez la logique de la condition de fermeture. Essayez de l'écrire de cette façon pour commencer :

Lisez l'aide sur la priorité des calculs des expressions logiques.

Eh bien, comment être dans par exemple avec une grille, il faut un total TP ou (et) le prix total.

Peut-être qu'il y a un ou plusieurs tampons où le prix doit être sauvegardé ou peut-être que l'indicateur lui-même a un tampon où le prix ouvert du dernier ordre est sauvegardé (et de là vous pouvez prendre et sauvegarder le prix dans notre tampon global).

 
Leanid Aladzyeu:

Si nous définissons une grille, nous aurons besoin d'un TP total ou (et) d'un prix total.

Il y a peut-être un ou plusieurs tampons pour sauvegarder le prix ou dans l'indicateur lui-même il peut y avoir un tampon où le prix d'ouverture du dernier ordre est stocké (et de là nous pouvons le prendre et le sauvegarder dans notre tampon global).

Je vous recommande de commencer à étudier la langue avec le manuel Kovalev (vous pouvez le trouver sur notre site). Il est, bien sûr, un peu dépassé, mais en combinaison avec la documentation, il sera correct !
 
Leanid Aladzyeu:

Merci àVitalii Ananev,Vladimir Zubov!

Je suis en train d'écrire un EA basé sur l'indicateur RSI. Le principe de l'EA sera d'ouvrir des ordres par l'indicateur mais il fermera aussi par le même indicateur (je ne connais pas le prix de clôture).

if(OrderType()==OP_BUY && irsa <=20 || irsa >=40 )

OrdreClose(ticket,Lot,Ask,Slippage,Blue) ;

retour(0) ;

Cette condition n'est pas remplie. Pourquoi ? (Il ouvre et ferme immédiatement l'ordre, et ainsi de suite dans la boucle).

Voici la question principale. Si votre EA doit travailler avec un grand nombre d'ordres et que vous devez calculer le prix moyen, le prix haut et le prix bas de tous les ordres sur le marché, comment trouver le prix de clôture de tous les ordres pour réaliser un profit total et d'autres opérations similaires ?

Vous essayez de fermer un ordre d'achat sur une ascendance, si vous ne comprenez pas les choses élémentaires - lisez la documentation.

Ou êtes-vous habitué à la règle du pouce ?

 
Leanid Aladzyeu:

Si nous établissons une grille, par exemple, nous aurons besoin d'un TP total ou (et) d'un prix total.

Il y a peut-être un ou plusieurs tampons pour sauvegarder le prix ou dans l'indicateur lui-même il peut y avoir un tampon où le prix d'ouverture du dernier ordre est stocké (et de là nous pouvons le prendre et le sauvegarder dans notre tampon global).

Vous devez calculer le prix moyen ouvert pour toutes les positions. Et sur cette base, calculez le Take Profit total pour toutes les positions. Le prix ouvert des positions est connu (OrderOpenPrice()). Additionnez tout et divisez par le nombre de postes ouverts.
Raison: