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
1. Je dirais ceci : utilisez le code de quelqu'un d'autre avec beaucoup de précaution. Parce que le code de quelqu'un d'autre signifie aussi les erreurs de quelqu'un d'autre.
2. Ici(https://www.mql5.com/ru/forum/6343/page64#comment_357008), j'ai suggéré que vous essayiez de mettre correctement à zéro les variables avant de les utiliser. Mais votre code n'a pas encore mis en œuvre cette suggestion. De plus, votre code contient des constructions du type suivant :
Vous voyez, dans cette construction, les variables de demande et de résultat sont remises à zéro non pas avant mais après leur utilisation. De plus, lorsque ces variables locales sont mises à zéro, la fonction cesse de fonctionner, c'est-à-dire que cette mise à zéro n'a aucun sens. En d'autres termes, une telle construction est un bon exemple de la manière dont les variables MqlTradeRequest et MqlTradeResult ne doivent pas être mises à zéro. Donc, si vous êtes impatient, s'il vous plaît, essayez d'effacer les variables correctement. Si quelque chose ne fonctionne pas, veuillez décrire en détail ce qui ne fonctionne pas.
3. La bibliothèque standard possède une classe de commerce"MQL5 Reference / Standard Library / Trade Classes / CTrade". Essayez de trouver comment l'appliquer dans la pratique. Au stade initial de l'immersion dans la langue, ce cours peut être tout à fait suffisant. Par exemple, cette classe a la méthode suivante :"MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify". Il est mis en œuvre comme suit :
La ligne "ClearStructures() ;" efface la variable m_request avant de l'utiliser.
Yedelkin,
Merci beaucoup :)
J'ai vérifié et j'ai vu mon erreur.
Je peux le faire de cette façon :
Mais j'ai aimé vos suggestions :
Les résultats sont les mêmes.Maintenant que le poste n'est pas trouvé, je vais m'épuiser à cette tâche.
Merci.
Yedelkin,
Je vous écris parce que vous répondez de manière adéquate.
J'ai deux sors - MT4 et MT5.
Pourquoi cela ne fonctionne-t-il pas sur MT5, ce sont les mêmes.
Malheureusement, je ne comprends pas du tout MT4. Je jetterai un coup d'oeil et si je trouve quelque chose, je vous le ferai savoir.
Addendum. En général, vous attendez l'ouverture du marché et signalez ce qui aurait dû fonctionner, mais n'a pas fonctionné.
Malheureusement, je ne comprends pas du tout MT4. Je jetterai un coup d'oeil et si je trouve quelque chose, je vous le ferai savoir.
Addendum. En général, vous attendez l'ouverture du marché et décrivez ce qui aurait dû fonctionner, mais qui n'a pas fonctionné.
Je le fais donc pour moi et pour qui, si nécessaire.
Voici les commentaires :
Si l'indication des pips bolshego zéro pour la modification pour deux yazikas (MT4 et MT5) :
Si ces pips (Bid - pips) bolshe ouvrir posishon :
Si stop = 0 ou Bid - pipsi dal trailing >= de la définition Open Posishon + pips :modification :
C'est tout.
Je veux faire une fonction séparée pour la modification.
Pouvez-vous être plus précis ? Votre Conseiller Expert utilise déjà l'indicateur MFI et vous avez maintenant besoin qu'il utilise le deuxième indicateur - l'indicateur MA ? Ou bien, votre conseiller expert n'utilise aucun indicateur, mais vous avez besoin qu'il utilise l'indicateur MA ?
Si l'Expert Advisor utilise MFI, alors son code doit contenir une ligne permettant de récupérer le handle de cet indicateur :"MQL5 Reference / Technical Indicators / iMFI". Ainsi, l'utilisation de l'indicateur de moyenne mobile est décrite ici :"MQL5 Reference Guide / Technical Indicators / iMA".
Essayez également de lire l'article"Indicateur par indicateur dans MQL5".
1. Malheureusement, vous n'avez pas précisé ce qui "ne fonctionne pas". Vous avez énoncé la logique du programme (comment il devrait fonctionner), mais vous n'avez pas indiqué où la logique est brisée et comment elle l'est. Sans une description détaillée du problème, vous ne pouvez que faire des commentaires sur le code.
2. La fonction bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit) contient de telles lignes :
Si vous regardez la description de la structure de MqlTradeResult, vous pouvez voir que le champ deal est décrit comme suit
transaction
Ticket de transaction, si une transaction a été exécutée. Il est signalé lors d'une opération commerciale TRADE_ACTION_DEAL
sera toujours déclenché, même si la modification a réussi, et il imprimera en même temps un message d'erreur.
2. Regardez les lignes du point précédent 2. Vous y utilisez la fonction GetLastError() qui est destinée à renvoyer le code de la dernière erreur. Mais vous n'effacez pas la variable contenant le code d'erreur avant de l'utiliser. Ainsi, même si la modification est réussie, vous imprimez une erreur qui a pu se produire bien avant l'envoi de la demande de modification de la position. Ça devrait être quelque chose comme ça :
3. Regardez ces lignes :
Supposons qu'au tick suivant, votre conditionNormalizeDouble(Bid - MStop,4) == SL se déclenche. Supposons que SL==1.11110. Mais alors aussi ModifyPosition(Symbol(),1.11110,TP). C'est-à-dire que cette modification spécifiera les niveaux précédemment définis.
Et que se passera-t-il, si l'égalité NormalizeDouble(Bid - MStop,4) == SL fonctionnera à nouveau au prochain tick ?) Surtout si l'on considère que (a) la normalisation est effectuée sur quatre chiffres, alors qu'il peut y avoir des cotations à cinq chiffres, (b) les demandes de transaction peuvent être exécutées sur le serveur avec un certain retard.
4. Il existe également une propriété de caractère telle que SYMBOL_TRADE_STOPS_LEVEL. Mais ce niveau n'est pas vérifié dans votre code. C'est-à-dire que si le candidat pour un nouveau stop loss pour une position d'achat est spécifié comme SL_new, il serait utile de vérifier la condition if(Bid-STOPS_LEVEL>SL_new).
En fait, essayez de chercher dans le manuel de référence la comparaison de nombres réels. Autant que je me souvienne, il déconseille fortement de comparer deux nombres réels comme ceci : if(double_1 == double_2).
Yedelkin,
Merci beaucoup. Reshetov m'a aussi montré où se trouve l'erreur.
Voici la fonction elle-même :
Et voici comment j'aurais dû faire la fonction elle-même :
Maintenant, tout fonctionne bien.
Merci.