Comment coder ? - page 303

 

Une autre question de débutant

Bonjour, je suis nouveau dans la programmation mais pas dans le trading. Je n'ai rien posté pendant un certain temps et maintenant, depuis que j'ai commencé à développer mon EA, j'ai beaucoup de questions. J'ai commencé par construire un indicateur, et une fois qu'il fera ce que je veux, j'irai plus loin. J'ai lu tous les manuels que j'ai pu trouver, alors maintenant il est temps pour moi de passer au codage.

Désolé, si c'est un mauvais fil de discussion - s'il vous plaît dites-moi où je dois poster ces questions alors.

J'ai 2, probablement, des questions de base pour l'instant, s'il vous plaît :

1. Dans de nombreux indicateurs utilisant des MAs, je vois des lignes vérifiant le nombre de barres sur le graphique. Donc, si j'ai besoin de MA200 et que le graphique n'a que, disons, 100 barres, est-ce que iMA200 fonctionnerait alors ? Je pense que oui - j'ai vérifié et n'importe quelle MA est dessinée sans aucun problème sur n'importe quel graphique, donc je pense que c'est un vieux bug que Metaquotes a corrigé maintenant. Donc, est-il utile de vérifier combien de barres il y a sur le graphique pour dessiner une MA ou utiliser la fonction iMA ?

2. Quelle est la différence entre Close et iClose ? Si je comprends bien, Close ne peut renvoyer que la clôture des barres sur le graphique actuel, et iClose peut renvoyer n'importe quelle clôture de n'importe quelle paire de devises et de n'importe quelle période. Et dans les deux cas, pour obtenir la dernière barre fermée, je dois utiliser l'index [1]. Est-ce que je vois correctement ?

Merci.

 

Je l'ai déjà fait. Voir le surlignage rouge ci-dessous :

//--- Déterminer si l'ordre de vente précédent est rentable

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

si (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

si (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W" ;

return (WinLossPreviousShort) ;

}

si ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L" ;

return (WinLossPreviousShort) ;

}

}

}

Toujours rien.

Je me gratte la tête. Je sais que votre aide est limitée car je n'ai pas collé le code, mais le code ci-dessus vous semble-t-il correct ?

De plus, avec la première ligne ci-dessous, dois-je référencer LastOpenTicket avec () après ?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

 

...

Si vous appelez cette fonction avec le numéro du dernier ticket ouvert comme argument, alors le code après la ligne bleue ne sera jamais exécuté (l'OrderSelect() échoue si le numéro du LastOpenTicket est -1 (ce qui est dans ce moment équivalent au résultat de la fonction LastOpenTicket()), et le code n'arrive pas à exécuter le bloc après la ligne bleue)

crsnape@btinternet.com:
Je l'ai déjà fait. Voir en rouge ci-dessous :

//--- Déterminer si l'ordre de vente précédent est rentable

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

si (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

si (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W" ;

return (WinLossPreviousShort) ;

}

si ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L" ;

return (WinLossPreviousShort) ;

}

}

}

Toujours rien.

Je me gratte la tête. Je sais que votre aide est limitée car je n'ai pas collé le code, mais le code ci-dessus vous semble-t-il correct ?

De plus, avec la première ligne ci-dessous, dois-je référencer LastOpenTicket avec () après ?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
 

Je ne suis pas sûr de comprendre.

si ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

Donc, parce que j'appelle la fonction LastOpenTicket() dans la ligne ci-dessus, le reste de cette fonction n'est pas exécuté et la fonction OrderSelect() échoue. Est-ce que je vous suis bien ?

 

...

Supposons ce qui suit :

- vous n'aviez pas d'ordres précédents

- LastOpenedTicket() a retourné -1 (aucune commande précédente) comme résultat

- vous appelez la fonction avec ce résultat

OrderSelect() échoue car le ticket d'ordre -1 n'existe pas et aucun code derrière la sélection d'ordre n'est exécuté. Même dans le cas où LastOpenTicket est > -1, la "condition de la ligne bleue" selon laquelle LastOpenTicket() == -1 ne peut jamais être vraie puisque la seule façon d'atteindre cette partie du code est lorsque LastOpenTicket est > -1.

C'est pourquoi j'ai suggéré le "3ème état : le "Na", puisqu'en fait vous avez 3 états à cause de l'état de départ "aucun ordre précédent".

crsnape@btinternet.com:
Je ne suis pas sûr de comprendre.

si ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

Donc, parce que j'appelle la fonction LastOpenTicket() dans la ligne ci-dessus, le reste de cette fonction n'est pas exécuté et la fonction OrderSelect() échoue. Est-ce que je vous suis bien ?
 

quelques questions de codage, probablement pour les débutants

Bonjour, je suis nouveau dans la programmation mais pas dans le trading. Je suis en train de construire mon EA mais j'ai commencé par construire un indicateur d'abord, et une fois qu'il fait ce que je veux, je vais aller plus loin. J'ai lu tous les manuels que j'ai pu trouver et maintenant je le code.

J'apprécierais tout conseil - vous avez tous commencé là où je suis maintenant...

J'ai 2, probablement, questions de base pour le moment, s'il vous plaît :

1. Dans certains indicateurs utilisant des MAs, je vois des lignes vérifiant le nombre de barres sur le graphique. Donc, si j'ai besoin de MA200 et que le graphique n'a que, disons, 100 barres, est-ce que iMA200 fonctionnerait alors ? Je pense que oui - j'ai vérifié et n'importe quelle MA est dessinée sans aucun problème sur n'importe quel graphique, donc je pense que c'est un vieux problème que Metaquotes a corrigé maintenant. Donc, est-il utile de vérifier combien de barres il y a sur le graphique pour dessiner une MA ou utiliser la fonction iMA ?

2. Quelle est la différence entre Close et iClose ? Si je comprends bien, Close ne peut renvoyer que la clôture des barres sur le graphique actuel, et iClose peut renvoyer n'importe quelle clôture de n'importe quelle paire de devises et de n'importe quelle période. Et dans les deux cas, pour obtenir la dernière barre fermée, je dois utiliser l'index [1]. Est-ce correct ?

Merci.

 

Comme ceci ?

//--- Déterminer si l'ordre de vente précédent est rentable

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

si (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

si (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W" ;

return (WinLossPreviousShort) ;

}

si (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L" ;

return (WinLossPreviousShort) ;

}

si (LastOpenTicket() == -1)

{

WinLossPreviousShort = "NA" ;

Retourner (WinLossPreviousShort) ;

}

}

}

OU CECI ? change en rouge.

//--- Déterminez si l'ordre de vente précédent est rentable.

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

si (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

si (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W" ;

return (WinLossPreviousShort) ;

}

si (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L" ;

return (WinLossPreviousShort) ;

}

if (LastTicket == -1)

{

WinLossPreviousShort = "NA" ;

retour (WinLossPreviousShort) ;

}

}

}

 

Je ne peux pas utiliser OrderSelect sur un numéro de ticket qui est -1 parce que -1 n'existe pas. Les tickets vont de 0 à plus haut.

Je dois déclarer LastOpenTicket en dehors de la fonction OrderSend, n'est-ce pas ?

 

...

Essayez comme ça :

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

Merci mladen, est-ce que le code ci-dessous équivaut à peu près au vôtre ? J'ai tapé ceci au moment où tu as posté ton dernier ! :-)

EDITED-

//--- Déterminer si l'ordre de vente précédent est rentable

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

si (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

si (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W" ;

return (WinLossPreviousShort) ;

}

si (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L" ;

return (WinLossPreviousShort) ;

}

}

if (LastTicket == -1)

{

WinLossPreviousShort = "NA" ;

retour (WinLossPreviousShort) ;

}

}

Raison: