Erreur n° 1 lors de la modification des commandes - page 5

 
borilunad:

Victor, pourquoi avez-vous commencé à modifier les SL et TP dans les positions en attente ? En général, il est judicieux de fixer le SL seulement après avoir ouvert une position, et le TP après le transfert du SL vers le B/S ! Alors pourquoi déranger le serveur autant pour rien et pourquoi vous devez vous donner tout ce mal !

Nous devons minimiser et simplifier le code, pour qu'il fonctionne rapidement et clairement, et il sera ensuite plus facile de le modifier en raison des aléas du marché ! Tenez compte de toutes les nuances des réalités du marché !

Je place également un stop loss sur les ordres en attente, au cas où la connexion serait interrompue ou si quelque chose d'autre m'empêchait de définir un stop plus précis (du point de vue du système) après le déclenchement de l'ordre.

Si tout est OK, après le déclenchement de l'ordre, je place un stop au bon niveau.

 
Stells:

Je place également un stop loss sur les ordres en attente immédiatement, au cas où la connexion serait interrompue ou que quelque chose d'autre m'empêche de fixer un stop plus correct, du point de vue du système, après le déclenchement de l'ordre.

Si tout est OK, après le déclenchement de l'ordre, je place un stop au bon niveau.

En cela, vous avez raison, si selon le TS vous placez votre SL près du prix d'ouverture! Mais modifier plusieurs fois le prix d'ouverture, le SL et le TP n'est pas raisonnable, cela demande tellement d'efforts et complique le code, cela n'en vaut pas la peine !
 

Victor, si vous en avez tant besoin, vous pouvez vous faciliter la tâche ! Vérifiez uniquement le prix d'ouverture, et marquez le SL et le TP de la même manière que vous le faites lorsque vous définissez un ordre en attente avec SL et TP !

Cela signifie que pour le SL, écrivez Ask-SL ou Bid+SL, et pour le TP, respectivementAsk+TP ou Bid-TP ! Essayez-le, il devrait fonctionner correctement ! Donc rien n'est impossible ! :)

 
borilunad:

Voulez-vous la fonction Modify() ?

Je ne dirais pas non. Et je suis même en train d'attendre quelque part... Depuis la nuit dernière.

keekkenen:
le code semble correct... mais en réel (pas en démo) il fonctionne ?
Oui. Dans de nombreux EA où je n'ai pas eu à modifier 3 paramètres d'entrée à la fois, cela fonctionne. Notez que j'ai téléchargé une variante pour le testeur et qu'il existe également une variante pour le monde réel.

borilunad:

Victor, pourquoi avez-vous commencé à modifier le SL et le TP dans les ordres en attente ? En général, il est logique de fixer le SL seulement après avoir ouvert une position et le TP après que le SL soit déplacé vers B/B ! Alors pourquoi déranger le serveur autant pour rien et pourquoi vous devez vous donner tout ce mal !

Nous devons minimiser et simplifier le code, pour qu'il fonctionne rapidement et clairement, et il sera ensuite plus facile de le modifier en raison des aléas du marché ! Réfléchissez bien à toutes les nuances liées aux réalités du marché !

Boris, si selon la documentation 3 paramètres peuvent être modifiés simultanément, pourquoi ne pas l'utiliser ? Après tout, c'est pratique ! J'envisage de modifier les options d'arrêt et de prise, mais je veux que cette option fonctionne correctement, si cette fonctionnalité est spécifiée dans la documentation. Si ce n'est pas le cas, nous devons écrire que ce n'est pas possible. Alors la question disparaîtra d'elle-même.
 
borilunad:
En cela vous avez raison, si selon TS vous mettez votre SL près du prix d'ouverture ! Mais modifier le prix d'ouverture, le SL et le TP plusieurs fois n'est pas raisonnable, gaspiller autant d'efforts et compliquer le code, cela n'en vaut pas la peine !

Boris, qui dit que je tape trop souvent sur le serveur ? Ce n'est pas comme si je parlais d'un système commercial. Il existe différentes variantes. Parfois, seul STOP est déplacé, parfois STOP et TAKE sont également déplacés. Il s'agit de différentes variantes. Mais dans ce cas, dans mon cas, les arrêts sont déplacés toutes les quelques heures en moyenne. Ou une fois toutes les heures. Est-ce que c'est beaucoup de complique code ?

Au contraire, le code devient... plus simple. Vous appelez une fonction de modification... mettre 3 paramètres et modifier... Dans le meilleur des cas, sans compter les éventuels dysfonctionnements du terminal.

Mais si ce n'est pas le cas. Ensuite, nous devrons modifier le PRIX D'OUVERTURE, puis les conditions sont remplies... le prix de STOP, et après que certaines conditions soient remplies ou qu'un certain temps se soit écoulé, nous devrons modifier le prix de TAKE. Est-ce que c'est comme Simplifier code ?

 
hoz:

Je ne dirai pas non. Et je suis même en train d'attendre quelque part... Donc, depuis la nuit dernière.

Oui. Dans de nombreux EAs où je n'ai pas eu à modifier 3 paramètres d'entrée à la fois, cela fonctionne. Notez que j'ai escompté la version pour le testeur, et il y en a aussi pour le réel.

Boris, si selon la documentation 3 paramètres peuvent être modifiés simultanément, pourquoi ne pas l'utiliser ? Après tout, c'est pratique ! J'envisage de modifier les options d'arrêt et de prise, mais je veux que cette option fonctionne correctement, si cette fonctionnalité est spécifiée dans la documentation. Si ce n'est pas le cas, nous devons écrire que ce n'est pas possible. Et la question disparaîtra d'elle-même.

Victor, consultez mon prochain post où je vous donne l'idée de ne vérifier que le prix d'ouverture, et de redéfinir le SL et le TP à partir du prix sans aucun problème !

Et je vais poster la fonction maintenant ! J'ai aussi "attendu" quelque part que vous répondiez hier ! Nous serons plus simples.

#include <stderror.mqh>//штатные инклюдники, чтобы 
#include <stdlib.mqh>  //вызывался ErrorDescription()



//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3) {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0) { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }

Toutes les questions, demandez, n'attendez pas jusqu'à demain ! ;)

La fonction est universelle, sert pour toutes les modifications avec des positions en attente et ouvertes ! Bonne chance !

Maintenant, comme hier, je vais déjeuner ! Bonne chance !

 
borilunad:

Je vais lancer la fonction maintenant ! J'attendais quelque part que tu me répondes hier, moi aussi ! Faisons simple.

Si vous avez des questions, n'attendez pas demain ! ;)

La fonction est universelle, sert pour toutes les modifications avec des positions en attente et ouvertes ! Bonne chance !

Qu'en est-il des contrôles de l'arrêt et de la friture ? Ou bien il n'est plus nécessaire de nos jours ? :) En ce qui concerne votre code de fonction, je suis d'accord. C'est simple et direct. Mais les chèques... ils ne sont pas là. Pourquoi pas ?

Je vais aller dîner:

Maintenant, comme hier, je vais déjeuner ! Tout !

Qui déjeune et qui dîne déjà à cette heure-ci...
 
hoz:

Comment puis-je me débarrasser de cette putain d'erreur ? J'en ai marre. Je vérifie chaque paramètre d'entrée de la fonction. Pour moi, en ce moment, c'est comme ça :

Autrement dit, si le paramètre n'a pas été modifié, il n'est pas nécessaire de le modifier. Je n'ai jamais fait ça avant, mais j'ai décidé de...

Ensuite, les paramètres sont transmis à la méthode de modification de la commande comme ceci :

Aucune sortie dans le journal :

Donc, le journal nous notifie, comme une modification : OK, mais alors une erreur. Aucun des paramètres n'a changé.

L'ordonnance est en cours. Nous pouvons donc changer le prix d'ouverture, de stop et de prise. Et cela, d'après ce que j'ai compris, ne contredisait pas la documentation.

Qui a rencontré quelque chose comme ça ? Comment le résoudre ?

Supprimez les autres.
 
hoz:

Boris, qu'en est-il des contrôles de stopplevel et frizzlevel. Ou est-ce inutile de nos jours ? :) En ce qui concerne votre code de fonction... je suis d'accord. C'est simple et direct. Mais les chèques... ils ne sont pas là. Pourquoi pas ?

Qui déjeune et qui dîne déjà à cette heure-ci...

Toutes les vérifications sont effectuées avant la boucle, qui comporte des conditions relatives à chaque type et un appel à cette fonction, qui vérifie uniquement les erreurs dans Modify() :

            ModifyOrder(OrderTicket(),OOP,SL,0,0,clrBlue); return(0);

Si vous avez besoin d'autre chose, n'hésitez pas, mais je dois aller dîner. ;)

 
Comment avez-vous voté ?