[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 564

 
Ekburg:

non, le problème de la modification du numéro d'ordre d'une position lorsque l'une d'entre elles est fermée a été résolu, j'ai vérifié plus d'une fois en pensant qu'il pouvait y avoir une erreur, mais tout va bien, l'ordre requis est sélectionné et le stoploss est calculé correctement pour lui, mais l'ordre ne veut pas être modifié...

L'erreur 1 n'est générée que si tous les paramètres transmis à la fonctionOrderModify( ) sont égaux à tous les paramètres de l'ordre en cours de modification, que vous (par le numéro de ticket) ou la fonctionOrderSelect() avez sélectionné pour modification. Exemple d'utilisation du chèque :

Seulement "Fonctions utiles de KimIV".

Fonction ModifyOrder()https://www.mql5.com/ru/forum/131859

 
rigonich:

L'erreur 1 n'est générée que si tous les paramètres passés à la fonctionOrderModify( ) sont égaux à tous les paramètres de l'ordre modifiable que vous avez sélectionné( par le numéro de ticket) ou la fonctionOrderSelect() pour la modification.

1 (ERR_NO_RESULT) - si aucun des paramètres n'a été modifié ou s' il n'y a pas d'erreur, mais le résultat est inconnu, le plus probable étant que l'ordre n'est pas modifié pour une raison quelconque...
 
abeiks:

Oui, je suis d'accord, la programmation n'est pas mon truc, c'est pourquoi j'apprends et pose des questions ici. J'ai essayé d'ajouter la fermeture de position à votre algorithme mais cela n'a pas fonctionné (toutes les positions d'achat se fermaient). J'ai donc décidé d'aborder le problème de l'autre côté et de voir la solution consistant à fermer les deux dernières positions d'achat sur un bloc de fermeture prêt à l'emploi qui m'a été fourni et offert.

Je vous serais très reconnaissant si vous pouviez me montrer comment fermer les deux dernières positions d'achat. Je comprendrai où j'ai fait une erreur.

 int Slippage = 3;
int Close_buy_2pos()
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        if (OrderType() != OP_BUY) continue;
        if (OrderClose (OrderTicket(), OrderLots(), Bid, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == 2) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}

Dans un cas général, c'est comme ça. Si l'on utilise la variante "débile" (c'est celle que j'utilise), il faut alors lancer une boucle : d'abord, trouver la dernière position ouverte de BUY, puis la supprimer du ticket, et répéter la boucle autant de fois que nécessaire.

P.S. Rédiger des fonctions pour BUY et SELL séparément - c'est une mauvaise idée dès le départ (IMHO).

Et dans ce cas, la fonction ne sera pas beaucoup plus compliquée :

int Slippage = 3;
int Close_LastPos (string fs_Symbol,
                   int fi_Magic,
                   int fi_Type = -1,   // тип закрываемых позиций
                   int fi_cnt = 1)     // количсетво закрываемых позиций
{
    int ordercount = 0, OpenOrders = OrdersTotal();
    double ld_PriceClose;
    for (int cnt = OpenOrders - 1; cnt >= 0; cnt--)   // scan all orders and positions. ..
    {
        if (!OrderSelect (cnt, SELECT_BY_POS)) return (ordercount);
        if (OrderSymbol() != fs_Symbol) continue;
        if (OrderMagicNumber() != fi_Magic) continue;
        if (OrderType() != fi_Type) if (fi_Type != -1) continue;
        if (OrderType() > 1) continue;
        if (OrderType() == OP_BUY) ld_PriceClose = NormalizeDouble (Bid, Digits);
        else ld_PriceClose = NormalizeDouble (Ask, Digits);
        if (OrderClose (OrderTicket(), OrderLots(), ld_PriceClose, Slippage)) ordercount++;
        else return (ordercount);
        if (ordercount == fi_cnt) break;
    } 
    Print ("::::::::::::::::::::::::: ordercount = ", ordercount);    
    return (ordercount);   
}
 
Ekburg:

1 (ERR_NO_RESULT) - si aucun des paramètres n'a été modifié ou s'il n'y a pas d'erreur mais le résultat est inconnu, le plus probable étant que l'ordre n'est pas modifié pour une raison quelconque ...
ERR_NO_RESULT n'est pas un soit ou, mais il n'y a pas d'erreur mais le résultat est inconnu . Les cas dans lesquels cette erreur revient sont décrits ci-dessus. Si la fonction GetLastError() est appelée après la fonctionOrderModify(), elle renverra définitivement le code d'erreur(c'est-à-dire la raison pour laquelle la commande n'a pas été modifiée) ou 0 (en cas de modification réussie).

 
TarasBY:

Dans le cas général donc. Si l'on utilise la variante "débile" (c'est celle que j'utilise), il faut alors lancer une boucle : d'abord, trouver la dernière position ouverte de BUY, puis la supprimer du ticket et répéter la boucle autant de fois que nécessaire.

P.S. Rédiger des fonctions pour BUY et SELL séparément - c'est une mauvaise idée dès le départ (IMHO).

Et la fonction dans ce cas ne serait pas beaucoup plus compliquée :


Merci, je vais m'en occuper.

 

Bonsoir à tous, pourriez-vous dire au vert et inexpérimenté pourquoi MetaTrader4 (dernière version) ne se met pas du tout à jour ? Je l'ai installé hier, mais la date de la dernière mise à jour est le 30 novembre, et il n'y a aucune dynamique sur aucune paire de devises, et quand j'achète une devise , le marché est fermé. (J'ai un compte de démonstration). Pouvez-vous me dire comment activer la mise à jour ou ce que je dois faire pour suivre les changements de prix ?

 
Lucifer982:

Bonsoir à tous, pourriez-vous dire au vert et inexpérimenté pourquoi MetaTrader4 (dernière version) ne se met pas du tout à jour ? Je l'ai installé hier, mais la date de la dernière mise à jour est le 30 novembre, et il n'y a aucune dynamique sur aucune paire de devises, et quand j'achète une devise, le marché est fermé. (J'ai un compte de démonstration). Pouvez-vous me dire comment activer la mise à jour ou ce que je dois faire pour suivre les changements de prix ?


Le système commencera à se mettre à jour dans quelques heures (en fonction de votre fuseau horaire). Le DoC a un jour de congé le samedi et le dimanche. Ils n'ont donc pas à s'inquiéter)))).

Ou la deuxième option : écrire une plainte au Service Desk du Ministère des Finances.

 
T1000:


Il s'allumera de lui-même dans quelques heures (en fonction de votre fuseau horaire). Le bureau de service a un jour de congé le samedi et le dimanche. Ils n'ont donc pas de jerks)))).

Ou la deuxième option : écrire une plainte au Service Desk du Ministère des Finances.


Je vois, merci, je vais attendre)
 

comment obtenir le nombre total d'ordres ouverts pour une certaine paire ?

J'ai un graphique ouvert, l'EA travaille sur 10 symboles.

J'ai décidé de laisser les commentaires sur le graphique indiquer le nombre total d'ordres ouverts pour chaque symbole.

Comment faire ? Si OrdersTotal indique le montant total de

 
gheka:

_ de quelle manière ?

Par exemple, comme ceci.

Raison: