[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 346
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
Je pense qu'il est inutile d'argumenter davantage. J'ai tout expliqué en détail, étape par étape. Continuez à faire ce que vous avez fait.
Quel genre de discussion peut-il y avoir ? Nous devons clôturer l'ordre avec l'écart de prix maximum. Ce qui signifie que nous sommes intéressés par le prix... C'est-à-dire que nous devrions trouver un ordre en attente extrême (avec le prix ouvert maximum ou minimum ). Si vous n'êtes pas d'accord, vous pouvez argumenter. Sinon, j'ai raison après tout ! Je sais exactement ce que je dis.
Le code supprime ST et TP. J'ajoute une condition pour la suppression sélective
Qu'est-ce qui n'est pas écrit correctement ? Continue à tout effacer :(
#property show_inputs
extern bool StopLoss = True; // Удалить только StopLoss
extern bool TakeProfit = True; // Удалить только TakeProfit
extern bool ALL = True; // Удалить все
void start()
{
bool fm;
int i;
double SL=OrderStopLoss();
double TP=OrderTakeProfit();
if (StopLoss) SL=0;
if (TakeProfit) TP=0;
if (ALL) {SL=0; TP=0;}
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,CLR_NONE);
}
}
}
}
Ou bien n'y a-t-il pas d'autre solution et faut-il écrire le code de suppression pour chaque condition ?
#property show_inputs
#include <WinUser32.mqh>
extern bool StopLoss = False; // Удалить только StopLoss
extern bool TakeProfit = False; // Удалить только TakeProfit
extern bool ALL = False; // Удалить все
void start()
{
bool fm;
int i;
if (StopLoss)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),CLR_NONE);
}
}
}
return(0);
}
if (TakeProfit)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),0,CLR_NONE);
}
}
}
return(0);
}
if (ALL)
{
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType()==OP_BUY)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
fm=OrderModify(OrderTicket(),OrderOpenPrice(),0,0,CLR_NONE);
}
}
}
return(0);
}
}
Vadim, pourquoi créer à nouveau l'objet quand on peut utiliser ObjectSet() ?
Dans ce cas, il y avait une fonction où l'objet graphique était entièrement créé et configuré. La fonction de création y est optimisée. Si l'objet existe déjà, il n'est pas créé. Vérifiez vous-même. Mesurez le temps nécessaire pour créer des objets, puis pour en modifier les propriétés. Le deuxième appel sera beaucoup plus court. C'est-à-dire que rien n'est recréé.
En conséquence, nous disposons d'une fonction universelle qui non seulement crée un objet, mais peut également le personnaliser en modifiant les propriétés de l'objet sans beaucoup de temps.
J'ai écrit une fonction qui supprimerales ordres de vente ayant les prix les plus bas.Le nombre d'ordres courts à clôturer est égal aunombre d'ordres d'achat qui se sont déclenchés, c'est-à-dire qui sont devenus des ordres au marché.
Ainsi, si un ordre d'achat est déclenché, nous fermons un ordre de vente, si deux ordres d'achat sont déclenchés, nous fermons deux ordres de vente.
Voici le code :
amountOfCurrPending - montant des ordres d' achat en attente.
Niveau- nombre d'ordres en attente initialement envoyés à chaque côté.
OOP- prix ouvert de l'ordre en attente, j'ai pris toute valeur inaccessible.
Notre condition est la suivante : si le compteur est inférieur auxordresToDelete, nous supprimons l'ordre en attente avec le prix le plus bas. Mais toutes les positions courtes sont supprimées. Qu'est-ce qui ne va pas chez moi ?
J'ai écrit une fonction qui supprimerales ordres de vente ayant les prix les plus bas.Le nombre d'ordres courts à clôturer est égal aunombre d'ordres d'achat qui se sont déclenchés, c'est-à-dire qui sont devenus des ordres au marché.
Ainsi, si un ordre d'achat est déclenché, nous fermons un ordre de vente, si deux ordres d'achat sont déclenchés, nous fermons deux ordres de vente.
Voici le code :
amountOfCurrPending - montant des ordres d'achat en attente.
Niveau- nombre d'ordres en attente initialement envoyés à chaque côté.
OOP- prix ouvert de l'ordre en attente, j'ai pris toute valeur inaccessible.
Notre condition est la suivante : si le compteur est inférieur auxordresToDelete, nous supprimons l'ordre en attente avec le prix le plus bas. Mais toutes les positions courtes sont supprimées. Qu'est-ce qui ne va pas chez moi ?
C'est tout. Ou bien avez-vous plusieurs commandes pour un seul prix ?
C'est tout. Ou avez-vous un paquet de commandes à un prix unique ?
Non, les commandes par tranches...
Je ne comprends pas votre logique... Pourquoi pas : l'ordre a été converti en position de marché - l'ordre en attente le plus opposé a été supprimé.
C'est ainsi que je supprime la position la plus opposée, c'est-à-dire que, comme il s'agit d'une position courte, cela signifie la position dont le prix d'ouverture est le plus bas. Ici j'ai réécrit la fonction, tout devrait être clair ici. J'ai enlevé les empreintes et supprimé une variable supplémentaire.
La variableamountOfCurrPending transfère le nombre de transactions restantes en achat. C'est-à-dire que si le montant initial est le niveau et queamountOfCurrPending est le montant actuel des ordres, alors en soustrayant le montant initial des ordres du montant actuel, nous obtiendrons la différence et c'est le montant nécessaire pour supprimer les shorts. Vous voyez ?
Y a-t-il une erreur là où j'ai marqué en rouge ? Comment le résoudre ?Non, les commandes se font par tranches.
C'est ainsi que je supprime la position la plus éloignée, c'est-à-dire que, comme il s'agit d'une position courte, cela signifie la position dont le prix d'ouverture est le plus bas. Ici j'ai réécrit la fonction, elle devrait être claire. J'ai enlevé les empreintes et supprimé une variable supplémentaire.
La variableamountOfCurrPending transfère le nombre de transactions restantes en achat. C'est-à-dire que si le montant initial est le niveau et queamountOfCurrPending est le montant actuel des ordres, alors en soustrayant le montant initial des ordres du montant actuel, nous obtiendrons la différence et c'est le montant nécessaire pour supprimer les shorts. Vous voyez ?
Y a-t-il une erreur là où j'ai marqué en rouge ? Comment mieux le résoudre ?Ищется ордер, с минимальной ценой открытия
Je préciserais dans le commentaire d'un ordre en attente son numéro d'ordre dans la grille et j'écrirais le même numéro dans l'ordre en attente opposé correspondant. Ensuite, lorsqu'une position de marché est trouvée, après avoir lu le numéro dans son commentaire, la position opposée correspondante peut être trouvée avec un numéro identique dans son commentaire. Puisque les magiks sont utilisés pour autre chose.
ZS. Je n'ai pas encore le temps de lire/parser votre code
J'écrirais dans le commentaire de la position en attente son numéro d'ordre dans la grille et j'écrirais le même numéro dans la position en attente opposée correspondante. Ensuite, lorsqu'une position de marché est trouvée, après avoir lu le numéro dans son commentaire, la position en attente opposée correspondante peut être trouvée sans aucun problème par un numéro identique dans son commentaire. Puisque vous utilisez les magiciens pour autre chose.
ZS. Je n'ai pas encore le temps de lire/parser votre code
Hmm. Oui, il n'y a aucun problème pour trouver l'ordre en attente correspondant de cette façon, si le nombre d'ordres en attente dans chaque direction est le même. Et si c'est différent, alors cela ne fonctionnera pas comme je le comprends.
Bonjour, j'ai une question. Comment puis-je écrire dans le code pour n'effectuer une opération que sur une fractale fixe ?
Si la fractale est fixe, c'est .....
ma fractale