Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Sinon, dites-moi comment écrire cette fonction de suppression dans cette condition.
vous devez d'abord définir le ticket de l'ordre en attente à supprimer
si le ticket est nul ou indéfini - alors ne le supprimez pas
Il s'agit de commandes différentes. La fonction consistant à supprimer l'un par une condition, à supprimer l'autre sans condition.
La question est de savoir pourquoi, dans mon cas, la fonction de suppression fonctionne avec succès sans condition, mais si je la mets dans une condition, elle génère une erreur lorsque la condition se produit.
vous devez d'abord définir le ticketD et le ticketUP à supprimer
Si le ticket est nul ou indéfini, aucune suppression ne sera effectuée.
Ainsi défini, un ticketD, l'autreticketUP .
Ou est-ce que je mélange quelque chose ?
Ainsi défini, un ticketD, l'autreticketUP .
Ou est-ce que je confonds quelque chose ?
Comment peut-il être défini si leticketUP est déjà supprimé ?
Vous l'avez supprimé, mettez ticketUP à l'état dont vous avez besoin, dans lequel la condition pour supprimer le ticketUP ne fonctionnera pas, et cette condition doit être ajoutée au code également
Comment peut-on le définir sile ticketUP a déjà été supprimé ?
Vous l'avez supprimé, mettez ticketUP à l'état dont vous avez besoin, dans lequel la condition pour supprimer le ticket ne fonctionnera pas, et cette condition doit également être ajoutée au code.
Ainsi, les commandes avecticketD, un autreticketUP sont créées en premier (selon la condition d'absence), et ensuite elles sont déjà supprimées.
if(BuyLimitCount()==0&& BuyCount()==0){slB=NormalizeDouble(minpr1-pointsl*Point,5) ;
tpB=NormalizeDouble(minpr1+pointtp*Point,5) ;
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red) ;
if(ticketUP==-1)Print("ERROR OP_BUY") ; elsePrint("OP_BUY OK");}
if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5) ;
tpS=NormalizeDouble(maxpr1-pointtp*Point,5) ;
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue) ;
if(ticketD==-1)Print("ERROR OP_SELL") ; elsePrint("OP_SELL OK");}
if(x !=maxpr1){x=maxpr1 ;OrderDelete(ticketD);}
CommandeDelete(ticketUP);
Si je suis confus, quoi ?
Ainsi, les commandes avecticketD, un autreticketUP sont d'abord créées (selon la condition d'absence), puis elles sont supprimées.
si(BuyLimitCount()==0&& BuyCount()==0){slB=NormaliserDouble(minpr1-pointsl*Point,5) ;
tpB=NormaliserDouble(minpr1+pointtp*Point,5) ;
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
si(ticketUP==-1)Print("ERROR OP_BUY") ; sinonPrint("OP_BUY OK");}
si(SellLimitCount()==0&& SellCount() ==0){
slS=NormaliserDouble(maxpr1+pointsl*Point,5) ;
tpS=NormaliserDouble(maxpr1+pointsl*Point,5) ;
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
si(ticketD==-1)Print("ERROR OP_SELL") ; sinonPrint("OP_SELL OK");}
if(x!=maxpr1){x=maxpr1 ;OrderDelete(ticketD);}
CommandeDelete(ticketUP);
Si je confonds quoi ?
Encore une fois, vous avez un ordre sans condition :
CommandeDelete(ticketUP);
Pourquoi n'avez-vous pas changé le code ?
Prenez un temps d'arrêt pour "réfléchir" au moins et faire le tri + lisez ce que vous avez écrit, les conseils donnés.
Au fait, il y a le freelancing ici si vous ne pouvez pas...
Donc, encore une fois, vous avez un ordre sans condition :
CommandeDelete(ticketUP);
Pourquoi n'avez-vous pas changé le code ?
Prenez un temps d'arrêt pour "réfléchir" au moins et trouver une solution + lisez ce qu'on vous a écrit, les conseils qu'on vous a donnés.
Au fait, il y a le freelancing ici si ça ne marche pas...
Sans condition - parce que c'est ainsi que se fait le retrait, et avec une condition - non. J'ai donc écrit pour indiquer que je ne peux pas. Vous devriez l'écrire de cette façon :
CommandeSuppression(ticketD) ;
CommandeDelete(ticketUP) ;
Ensuite, chaque tick supprime les ordres déjà créés sur chaque tick (selon la condition d'absence). Et si nous l'écrivons avec la condition :
if (x!=maxpr1){x=maxpr1 ; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1 ; OrderDelete(ticketUP);}
Ensuite, lorsque la condition se produit, il écrit une erreur de suppression.
Comment écrire la suppression des commandes spécifiées dans cette condition ?
C'est sans condition - parce que c'est comme ça que la suppression fonctionne, mais avec une condition, ce n'est pas le cas. Je l'ai écrit de cette façon pour souligner ce que je ne peux pas faire. Si vous l'écrivez de cette façon :
CommandeSuppression(ticketD) ;
CommandeDelete(ticketUP) ;
Ensuite, chaque tick supprime les ordres déjà créés sur chaque tick (selon la condition d'absence). Et si nous l'écrivons avec la condition :
if (x!=maxpr1){x=maxpr1 ; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1 ; OrderDelete(ticketUP);}
Ensuite, lorsque la condition se produit, il écrit une erreur de suppression.
Comment écrire la condition sur la suppression des commandes spécifiées ?
Vous ne pouvez pas supprimer la condition pour supprimer les commandes !
ticketUP et ticketD doivent être écrits dans les variables globales lors de l'ouverture d'un ticket.
GlobalVariableSet("ticketUP",ticketUP) ;
GlobalVariableSet("ticketD",ticketD) ;
et lire à partir de là avant de supprimer un ticket en attente
ticketUP=GlobalVariableGet("ticketUP")
ticketD=GlobalVariableGet("ticketD")
A propos, regardez là (dans le global) - ce que vous avez, ce que le billet est écrit
Je pense qu'après cela, tout fonctionnera comme il se doit.
{
private:
template <typename T>
T _array[];
int _index;
int _err;
int _err_sys;
public:
CArray(){_index = -1; _err = 0; _err_sys = 0;}
~CArray(){}
// template <typename T>
T operator[](int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
T at(int i){
if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
return (_array[i]);
}
void push_back(T value){
_array[++_index] = value;
}
};
une partie du code du programme :
#property link "https://www.mql5.com"
#property version "1.1"
#property strict
#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
CArray *array;
int OnInit()
{
int b = 1;
array = new CArray();
array.push_back(b);
int a = array.at(0);
//---
return(INIT_SUCCEEDED);
}
...
Après avoir essayé d'exécuter le conseiller expert sur des données réelles, l'erreur suivante est signalée : erreur interne #-1005
Qu'est-ce que je fais de mal ? Merci d'avance !