Comment coder ? - page 6

 

Code d'erreur : 4109

Bonjour à tous :

J'ai écrit un script pour fermer toutes les transactions, y compris les ordres en attente, mais j'ai été déçu après l'avoir testé. Les fonctions : OrderClose, et Orderdelete ne parviennent pas à fermer les transactions. En appelant la fonction GetLastError j'obtiens le code d'erreur : 4109 qui est défini dans le fichier d'en-tête d'erreur comme TRADE_NOT_ALLOWED.

J'ai même essayé d'exécuter les scripts fournis avec la plateforme, mais sans succès.

J'espère que quelqu'un pourra résoudre ce problème.

Merci,

Dossiers :
closeall2.mq4  2 kb
 

Ok, essaye celle-là. Je pense que les variables Lots et Price doivent être des doubles et non des entiers. J'espère que cela vous aidera

//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+
 

Essayez ceci

FX5:
Bonjour tout le monde :

J'ai écrit un script pour fermer toutes les transactions, y compris les ordres en attente, mais j'ai été déçu après l'avoir testé. Les fonctions : OrderClose, et Orderdelete ne parviennent pas à fermer les transactions. En appelant la fonction GetLastError, j'obtiens le code d'erreur 4109 : 4109 qui est défini dans le fichier d'en-tête d'erreur comme TRADE_NOT_ALLOWED.

J'ai même essayé d'exécuter les scripts fournis avec la plateforme, mais sans succès.

J'espère que quelqu'un pourra résoudre ce problème.

Merci,

Dans metatrader, allez dans outils -> options, cliquez sur l'onglet conseiller expert et sélectionnez autoriser le trading en direct, et cliquez sur autoriser les importations de dll, et décochez confirmer les appels. J'ai écrit quelques scripts et j'avais le même problème.

 
firedave:
Ok, essayez celui-là. Je pense que les variables Lots et Price devraient être des doubles et non des entiers. J'espère que cela vous aidera
//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+

C'est peut-être une erreur : pour supprimer plusieurs ordres, il faut commencer par le dernier, car leurs index se décrémentent lors du processus de suppression.

Donc, à la place de " for(int i=0;i=0;i--) ".

 

Merci firedave pour la modification du code. C'était un petit bug auquel je n'avais pas prêté attention.

Crepuscular, merci beaucoup pour l'indice. J'aurais pu passer un siècle avant de trouver la solution. Enfin, j'ai un code qui fonctionne.

 

Michel, c'était une note très intelligente, merci beaucoup.

 

Fonction d' obtention du drawdown maximum

j'aimerais écrire une fonction qui permette d'obtenir le drawdown maximum d'une transaction qui a été fermée. j'ai trouvé deux solutions.

1. calculer le drawdown pendant que la transaction est encore active. enregistrer le nombre dans une variable globale et écrire les données dans un fichier en fonction du numéro de ticket. MT4 devrait toujours être en ligne.

2. obtenir le drawdown en récupérant le plus haut ou le plus bas sur le graphique 1 min. le problème ici est que nous devons avoir l'historique 1 min pour la transaction. (J'utiliserais cette méthode si je pouvais obtenir les barres 1 min nécessaires, si elles n'étaient pas déjà téléchargées).

J'aimerais trouver un moyen plus agréable d'obtenir un drawdown maximal.

Toute contribution est appréciée.

 
harriss:
J'aimerais écrire une fonction qui permette d'obtenir le drawdown maximum d'un trade qui a été fermé. J'ai trouvé deux solutions.

1. calculer le drawdown pendant que la transaction est encore active. enregistrer le numéro dans une variable globale et écrire les données dans un fichier en fonction du numéro de ticket. MT4 devrait toujours être en ligne.

2. obtenir le drawdown en obtenant le plus haut ou le plus bas du graphique 1 min. le problème ici est que nous devons avoir l'historique 1 min pour la transaction. (J'utiliserais cette méthode si je pouvais obtenir les barres 1 min nécessaires, si elles n'étaient pas déjà téléchargées).

J'aimerais trouver un moyen plus agréable d'obtenir un drawdown maximum.

Toute contribution est appréciée.

Salam harriss,

Qu'entendez-vous par "drawdown" ?

Voulez-vous dire la perte maximale d'un des trades fermés a été faite ?

 

drawdown

Ce que j'entends par drawdown, c'est le point le plus bas de la transaction. Par exemple, si la transaction touche le stoploss, alors le stoploss sera le drawdown. Maintenant, si la transaction a fini sur le côté positif et était de -15 pips à un moment donné, alors le drawdown serait de 15. Enfin, si la transaction a clôturé à -15 pips mais était à -30 à un moment donné, le drawdown sera de 30.

 

Comment coder des alertes/alarmes pour les indicateurs ?

Bonjour, j'aimerais en savoir plus sur la façon de coder des alertes.

Je ne suis pas un programmeur mais j'ai la tête sur les épaules et je suis généralement capable de bricoler quelque chose, de le démonter et de le remonter plus près de la façon dont je le veux.

J'ai passé en revue certains des indicateurs avec des alertes et j'ai copié les fonctions générales d'alerte que j'ai vues sur d'autres indicateurs pour lesquels je voulais avoir des alertes. J'ai obtenu des résultats mitigés.

Je remarque que les principales fonctions appelées pour les alertes sont la fonction Alert(), la fonction Comment() et la fonction Playsound(). Jusqu'à présent, je suis plus familier avec la fonction Alert(). Y a-t-il une différence significative entre Alert() et Playsound() par exemple ?

Le problème général que j'ai est que je ne sais pas comment coder les alertes de façon à ce qu'elles soient perceptibles d'une part, mais pas ridiculement distrayantes d'autre part. Par exemple, si j'utilise la fonction Alert() pour certains croisements et que l'indicateur ne s'est pas imprimé de manière définitive sur la barre actuelle, l'alerte peut se répéter encore et encore et encore et j'ai du mal à la désactiver. En général, je dois changer l'intervalle de temps du graphique.

Tout d'abord, existe-t-il un moyen simple de désactiver l'alerte pour la barre actuelle uniquement ?

Deuxièmement, existe-t-il un moyen de coder une alerte de manière à ce qu'elle ne soit pas une nuisance sans fin en introduisant un code qui limite le nombre d'itérations ou donne à l'alerte une durée fixe ? Comment le coder ?

Une solution que je vois est de retarder l'alerte jusqu'à la prochaine barre afin qu'elle ne change pas constamment, mais cela a l'inconvénient de ne pas être opportun.

Pour éviter les alarmes intempestives sur les indicateurs, j'ai utilisé les alertes de prix prédéterminées que l'on peut définir à l'aide de la fenêtre du terminal et cela aide mais ce n'est pas idéal.

Je sais également que les conseillers experts peuvent être créés pour émettre des alertes et qu'il existe un bouton permettant d'activer et de désactiver facilement ces alertes. Le problème que j'ai avec les EA, cependant, est que je remarque qu'un autre programme important que j'exécute en même temps que MetaTrader semble subir des interférences lorsque les Expert Advisors sont activés et s'exécute lentement.

Existe-t-il d'autres solutions à ce problème ?

S'il y a des indicateurs qui ont un code d'alerte qui évite les pièges que j'ai énumérés et qui peut servir de bon exemple de la façon de coder et d'alerter, pourriez-vous m'y renvoyer et/ou le poster ?

Merci beaucoup.

Raison: