T-G: Oui, mais le point de la question est que l'ordre précédent a été fermé avec un moins. La fonction n'a pas le temps de le montrer, d'abord l'ordre est ouvert après quelques ticks et seulement alors la fonction montre la dernière perte mais l'ordre a déjà été ouvert.
Je l'ai fait et une fois de plus, il a dit qu'il n'avait pas le temps de vérifier. Il a d'abord fait comme s'il n'y avait pas d'orignal, puis il s'est rendu compte qu'il y avait un orignal.
Pourquoi ne pas utiliser le paramètre Expiration de l'ordre en attente.
Il est bien sûr possible que ce paramètre ne puisse pas être utilisé.
Sur certains serveurs commerciaux, le délai d'expiration des ordres en attente peut être interdit. Dans ce cas, une erreur 147 (ERR_TRADE_EXPIRATION_DENIED) sera générée lors de la tentative de définir une valeur non nulle dans le paramètre d'expiration.
C'est la seule façon, bien sûr...
J'ai modifié la ligne comme vous l'avez suggéré et le conseiller expert a cessé de fonctionner...
T-G: Je l'ai fait et une fois de plus, il a dit qu'il n'avait pas le temps de vérifier. Il a d'abord fait comme s'il n'y avait pas d'orignal, puis il s'est rendu compte qu'il y avait un orignal.
Les miracles n'arrivent pas. Vous devriez voir un télépathe...
En même temps, je sais avec certitude qu'il n'y a pas d'interdiction.
Veuillez indiquer où se trouve l'erreur.
Il est peu probable qu'il ait cessé de fonctionner, mais vos critères sont probablement erronés. Sans le code, il est difficile de trouver une raison pour laquelle l'EA ne fonctionne pas...
artmedia70: Il est peu probable qu'il ait cessé de fonctionner, mais vos critères risquent d'être boiteux. Sans le code, il est difficile de trouver une raison pour laquelle l'EA ne fonctionne pas...
Voici tout ce que j'ai griffonné jusqu'à présent :
Apprenez à insérer du code - lisez-le entièrement.
Roman, merci pour la réponse ! Ce que je dois faire, c'est faire en sorte que le robot ouvre les transactions pour la durée à partir du moment où elles sont automatiquement ouvertes.
Par exemple, le robot ouvre une transaction TARGET, définit automatiquement un délai d'expiration de +600 sec à partir du délai actuel et c'est tout.....
Dans ce cas, l'option où il les supprime lui-même ne convient pas, puisque le TC sur lequel je me "forme" comporte des restrictions sur la modification des ordres en cours si le prix s'est rapproché de plus de 10 points + Spread du prix d'ouverture, y compris ceux qui ne sont pas encore ouverts.
En outre, le fait est que si un ordre est déjà ouvert, il ne doit pas être supprimé, mais nous devons le laisser "jouer" et bouillonner jusqu'à sa "mort". Et si nous définissons orderdelite, la fonction fermera également les ordres qui ont déjà été déclenchés. ( ?)
Quant au manuel - eh bien, je ne suis pas un programmeur par tempérament, je suis un brillant humaniste - je dessine, je modèle, je compose, et je n'aiguise pour rien d'autre).
J'ai essayé de m'y mettre de bonne foi. Certaines choses avaient du sens, d'autres non.
Roman, merci pour la réponse ! Il s'agit simplement de faire en sorte que le robot ouvre les transactions à temps à partir du moment où elles sont automatiquement ouvertes.
Par exemple, le robot ouvre une transaction TARGET, définit automatiquement un délai d'expiration de +600 sec à partir du délai actuel et c'est tout.....
Dans ce cas, l'option où il les supprime lui-même ne convient pas, puisque le TC sur lequel je me "forme" comporte des restrictions sur la modification des ordres en cours si le prix s'est rapproché de plus de 10 points + Spread du prix d'ouverture, y compris ceux qui ne sont pas encore ouverts.
En outre, le fait est que si un ordre est déjà ouvert, il ne doit pas être supprimé, mais nous devons le laisser "jouer" et bouillonner jusqu'à sa "mort". Et si nous définissons orderdelite, la fonction fermera également les ordres qui ont déjà été déclenchés. ( ?)
Quant au manuel - eh bien, je ne suis pas un programmeur par tempérament, je suis un brillant humaniste - je dessine, je modèle, je compose, et je n'aiguise pour rien d'autre).
J'ai essayé de m'y mettre de bonne foi. Certaines choses avaient du sens, d'autres non.
C'est pourquoi je suis ici......
Essayez de décrire en mots ce que vous avez écrit ici :
externdouble TakeProfit = 50;
externdouble StopLoss=100;
externdouble PriceDistance = 50;
externdouble Lots = 1;
externdouble TrailingStop = 50;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start()
{
int cnt, ticket, total;
total=OrdersTotal();
if(total<1) {
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,
Ask+PriceDistance*Point+TakeProfit*Point,"PD",1,0,Green);
Sleep (10000);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,
Bid-PriceDistance*Point-TakeProfit*Point,"PD",2,0,Red);
}
for(cnt=0;cnt<total;cnt++) {
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened positionOrderSymbol()==Symbol()) { // check for symbolif(OrderType()==OP_BUY) { // long position is openedif(1!=1) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0) {
if(Bid-OrderOpenPrice()>Point*TrailingStop) {
if(OrderStopLoss()<Bid-Point*TrailingStop) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else { // go to short position// should it be closed?if(1!=1) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close positionreturn(0); // exit
}
// check for trailing stopif(TrailingStop>0) {
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
Personnellement, pour moi, au tout premier coup d'œil, cela s'est avéré être un puzzle votre idée : Si un n'est pas égal à un, alors fermez la commande....
Je n'ai pas regardé le reste après ça...
ZS et n'essayez pas, ne pensez même pas, qu'il est possible d'écrire un EA normal en un cycle...
Oui, mais le point de la question est que l'ordre précédent a été fermé avec un moins. La fonction n'a pas le temps de le montrer, d'abord l'ordre est ouvert après quelques ticks et seulement alors la fonction montre la dernière perte mais l'ordre a déjà été ouvert.
Pourquoi ne pas utiliser le paramètre Expiration de l'ordre en attente.
Il est bien sûr possible que ce paramètre ne puisse pas être utilisé.
Sur certains serveurs commerciaux, le délai d'expiration des ordres en attente peut être interdit. Dans ce cas, une erreur 147 (ERR_TRADE_EXPIRATION_DENIED) sera générée lors de la tentative de définir une valeur non nulle dans le paramètre d'expiration.
C'est la seule façon, bien sûr...
J'ai modifié la ligne comme vous l'avez suggéré et le conseiller expert a cessé de fonctionner...
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,TimeCurrent()+10*60,Green) ;
En même temps, je sais avec certitude qu'il n'y a pas d'interdiction.
Veuillez indiquer où se trouve l'erreur.
Je l'ai fait et une fois de plus, il a dit qu'il n'avait pas le temps de vérifier. Il a d'abord fait comme s'il n'y avait pas d'orignal, puis il s'est rendu compte qu'il y avait un orignal.
J'ai apporté des modifications à la ligne comme vous l'avez suggéré, et le conseiller expert a cessé de fonctionner...
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,TimeCurrent()+10*60,Green) ;
En même temps, je sais avec certitude qu'il n'y a pas d'interdiction.
Veuillez indiquer où se trouve l'erreur.
Il est peu probable qu'il ait cessé de fonctionner, mais vos critères risquent d'être boiteux. Sans le code, il est difficile de trouver une raison pour laquelle l'EA ne fonctionne pas...
Voici tout ce que j'ai griffonné jusqu'à présent :
extern double TakeProfit = 50 ;// la fin.
Cela fonctionne comme suit : .... Mais, en conséquence, ouvre des commerces indéfiniment, la liane.
Merci d'avance !
Voici tout ce que j'ai griffonné jusqu'à présent :
extern double TakeProfit = 50 ;// la fin.
Cela fonctionne comme suit : .... Mais, en conséquence, ouvre des commerces indéfiniment, la liane.
Merci d'avance !
Apprenez à insérer du code - lisez-le entièrement.
Apprenez à insérer du code - lisez-le entièrement.
Roman, merci pour la réponse !
Ce que je dois faire, c'est faire en sorte que le robot ouvre les transactions pour la durée à partir du moment où elles sont automatiquement ouvertes.
Par exemple, le robot ouvre une transaction TARGET, définit automatiquement un délai d'expiration de +600 sec à partir du délai actuel et c'est tout.....
Dans ce cas, l'option où il les supprime lui-même ne convient pas, puisque le TC sur lequel je me "forme" comporte des restrictions sur la modification des ordres en cours si le prix s'est rapproché de plus de 10 points + Spread du prix d'ouverture, y compris ceux qui ne sont pas encore ouverts.
En outre, le fait est que si un ordre est déjà ouvert, il ne doit pas être supprimé, mais nous devons le laisser "jouer" et bouillonner jusqu'à sa "mort". Et si nous définissons orderdelite, la fonction fermera également les ordres qui ont déjà été déclenchés. ( ?)
Quant au manuel - eh bien, je ne suis pas un programmeur par tempérament, je suis un brillant humaniste - je dessine, je modèle, je compose, et je n'aiguise pour rien d'autre).
J'ai essayé de m'y mettre de bonne foi. Certaines choses avaient du sens, d'autres non.
C'est pourquoi je suis ici......
Roman, merci pour la réponse !
Il s'agit simplement de faire en sorte que le robot ouvre les transactions à temps à partir du moment où elles sont automatiquement ouvertes.
Par exemple, le robot ouvre une transaction TARGET, définit automatiquement un délai d'expiration de +600 sec à partir du délai actuel et c'est tout.....
Dans ce cas, l'option où il les supprime lui-même ne convient pas, puisque le TC sur lequel je me "forme" comporte des restrictions sur la modification des ordres en cours si le prix s'est rapproché de plus de 10 points + Spread du prix d'ouverture, y compris ceux qui ne sont pas encore ouverts.
En outre, le fait est que si un ordre est déjà ouvert, il ne doit pas être supprimé, mais nous devons le laisser "jouer" et bouillonner jusqu'à sa "mort". Et si nous définissons orderdelite, la fonction fermera également les ordres qui ont déjà été déclenchés. ( ?)
Quant au manuel - eh bien, je ne suis pas un programmeur par tempérament, je suis un brillant humaniste - je dessine, je modèle, je compose, et je n'aiguise pour rien d'autre).
J'ai essayé de m'y mettre de bonne foi. Certaines choses avaient du sens, d'autres non.
C'est pourquoi je suis ici......
Essayez de décrire en mots ce que vous avez écrit ici :
Personnellement, pour moi, au tout premier coup d'œil, cela s'est avéré être un puzzle votre idée : Si un n'est pas égal à un, alors fermez la commande....
Je n'ai pas regardé le reste après ça...
ZS et n'essayez pas, ne pensez même pas, qu'il est possible d'écrire un EA normal en un cycle...
...Et si vous mettez orderdelite, la fonction fermera également les ordres qui ont déjà été déclenchés. ( ?)
...
Non. Regardez de plus près. Un ordre en attente déclenché devient un ordre au marché - cette fonction n'a rien à voir avec cela.
" Supprime un ordre en attente précédemment défini. Renvoie VRAI si la fonction s'est déroulée avec succès. Retourner FALSE
si la fonction n'a pas été achevée avec succès. Appelez GetLastError() pour obtenir des informations sur les erreurs."