[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 768
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
J'ai juste besoin d'appeler la fonction, c'est tout ce dont j'ai besoin, une seule ligne "S'il y a plus de commandes qu'une .... et c'est tout" - et vous me proposez une fonction entière
Voici comment je stocke mes données de commande
C'est simple, mettez-le dans la bibliothèque.
Le type d'ordre à compter et son maître sont donnés en entrée, il retourne le nombre d'ordres ouverts ou fixés.
Vous pouvez l'utiliser de la manière suivante
si ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
Ce n'est pas compliqué, mettez-le dans la bibliothèque.
L'entrée est le type d'ordre à compter et son maître, il retourne le nombre d'ordres ouverts ou fixés.
Cela peut être utilisé de la manière suivante
si ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
J'ai une telle fonction et je n'en ai pas besoin, j'ai juste besoin...
juste une ligne "s'il y a plus de commandes qu'une ....". alors" et c'est tout
mes données pour la même fonction que vous avez montrée sont stockées ici
et voici à quoi cela ressemble
Je pense que je l'ai.
static int aaa = OrdersHistoryTotal()+ OrdersTotal()
si (votre condition && aaa < OrdersHistoryTotal()+ OrdersTotal() )
{
opérateurs
aaa=OrdersHistoryTotal()+ OrdersTotal()
}
Si c'est le cas, il est toujours préférable de le mettre dans une fonction destinée aux magiciens . Pouvez-vous nous dire sur quoi vous travaillez ? La logique est un peu étrange si j'ai bien compris, lorsqu'un ordre supplémentaire est ouvert, n'est-il pas plus facile d'ouvrir des ordres qui ne sont pas plus grands que la position ouverte ?
Votre fonction renvoie le nombre total d'ordres ouverts et d'ordres placés en attente, mais elle n'indique pas le nombre d'ordres OP_BUY, OP_BUYLIMIT OP_SELLLIMIT OP_SELL, etc.
J'ai tout compris, maintenant le problème avec la fonction if est que je ne sais pas quel est le problème.
l'essentiel est que la première valeur soit exécutée.
Celle-ci ne fonctionne pas si (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS) ; // Sélectionner
} }
en d'autres termes, s'il existe un ordre HaveBuyLimitOrderEnd, modifiez-le avec un changement de prix PRAskS
Je n'arrive pas à comprendre ce qui ne va pas. La valeur de HaveBuyLimitOrderEnd est prise dans void Myorders() dans le code ci-dessus.
la valeur if(bt==1&&bl==7) est principale, donc si elle est vraie, utilisez tout ce qui suit
il est probable que haveBuyLimitOrderEnd== true car j'ai défini OrderLots()==3*Lot tout fonctionne seulement il modifie les ordres avec 0.3 lot
Remarquez ce qui est souligné en rouge . Le type d'ordres de transaction est le même et les variables du tuyau sont différentes, il devrait en être ainsi.
Oui, il devrait être, parce qu'il ya différentes fonctions d'ouverture et je ne fais pas une demande pour OrderType () et a demandé le drapeau si elle est ouverte, mais le problème est plutôt pas dans cette fonction parce que les autres demandes aussi ne fonctionnent pas ce que j'ai d'abord jeté, ET SUR LA MÊME FONCTION OUVRIR NORMALEMENT
DONC LE PROBLÈME EST AVEC LA DEMANDE DANS L'OPÉRATEUR
Le problème semble être ailleurs. Mais vous devriez probablement voir le code.
Le problème semble être ailleurs. Mais je pense que j'ai besoin de voir le code.
Ce n'est certainement pas ailleurs, tout le reste fonctionne, le problème est que la requête (HaveBuyLimitOrderEnd== true) est erronée, donc je me demande comment lui dire de modifier et de supprimer,
ou la requête elle-même est erronée
si(bs==1&&bl==3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL) ;
si (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS) ;
} }
Oui, il devrait être, parce qu'il ya différentes fonctions d'ouverture et je ne fais pas une demande pour OrderType () et a demandé le drapeau si elle est ouverte, mais le problème est très probablement pas dans cette fonction parce que les autres demandes aussi ne fonctionnent pas ce que j'ai d'abord jeté, ET SUR LA MÊME FONCTION OUVERT NORMALEMENT
DONC LE PROBLÈME EST AVEC LA REQUÊTE DANS L'OPÉRATEUR
Je me demande si dans les fonctions marquées en rouge HaveBuyLimitOrderEnd est défini dans le tuyau. Si non, vous devez appeler Myorders() avant if. Sinon, vous ne savez pas ce qu'il y a là. Et juste au cas où, les drapeaux (variables)
HaveBuyOrder = false ;
HaveSellOrder = false ;
HaveBuyStopOrder = false ;
HaveSellStopOrder = false ;
HaveBuyLimitOrder = false ;
HaveSellLimitOrder = false ;
HaveBuyLimitOrderEnd = false ;
HaveSellLimitOrderEnd = false ;
doivent être définis au niveau global .
Je me demande si le drapeau HaveBuyLimitOrderEnd est activé en rouge dans le tuyau. Si ce n'est pas le cas, vous devez appeler Myorders() avant if. Sinon, vous ne savez pas ce qu'il y a là. Et juste au cas où, les drapeaux (variables)
HaveBuyOrder = false ;
HaveSellOrder = false ;
HaveBuyStopOrder = false ;
HaveSellStopOrder = false ;
HaveBuyLimitOrder = false ;
HaveSellLimitOrder = false ;
HaveBuyLimitOrderEnd = false ;
HaveSellLimitOrderEnd = false ;
doit être défini de manière globale.
c'est à un niveau glabal
bool HaveBuyOrder ; // indique s'il existe des ordres d'achat sur le marché ouvert.
bool HaveSellOrder ; // indicateur des ordres de marché ouverts à vendre
bool HaveBuyStopOrder ; // indicateur des ordres d'achat en attente ouverts
bool HaveSellStopOrder ; // drapeau des ordres de vente en attente ouverts
bool HaveBuyLimitOrder ; // drapeau des ordres d'achat ouverts en attente.
bool HaveSellLimitOrder ; // drapeau des ordres de vente ouverts en attente.
bool HaveBuyLimitOrderEnd ; // indicateur de présence d'ordres d'achat en attente ouverts
bool HaveSellLimitOrderEnd ; // signale l'ouverture des ordres de vente en attente
c'est dans la fonction d'ouverture de l'ordre.
ticket = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE) ;
if (ticket > 0) {
HaveBuyStopOrder = true ;
si (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Print("fonction pour placer un ordre BuyStop : ", OrderOpenPrice())
}
else Print("Erreur # ", GetLastError(), " fonction pour placer un ordre BuyStop",MarketInfo(Curr_symb,MODE_ASK)) ;
retour(ticket) ;
}
DONC TOUT LE RESTE FONCTIONNE