bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){ //---- structure de liaison et résultats commerciaux Demande MqlTradeRequest ; MqlTradeResult résultat ; //---- structure d'initialisation de la recherche de transactions MqlTradeRequest pour la modification de la position request.action = TRADE_ACTION_SLTP; request.symbol = symbol ; request.sl = StopLoss ; request.tp = Takeprofit ; string word = "" ; StringConcatenate(mot, "<< ============ Modifyposition() : modifier la position ", symbole," ============ >>>") ; Imprimer(mot) ; //---- modifier la position et vérifier les résultats de la recherche commerciale if(!OrderSend(request,result)|| result.deal==0) { Print("Erreur de modification =", GetLastError() ; retour (faux) ; } retour (vrai) ; }
Ici, la normalisation doit être utilisée dans un ordre différent.
1. Comme les valeurs de type SymbolInfoDouble(Currency,SYMBOL_BID) proviennent du serveur, elles sont déjà considérées comme normalisées. Et il n'est pas nécessaire de les normaliser une seconde fois. C'est-à-dire que vous pouvez simplement les écrire :
Mais après toute opération arithmétique, la normalisation disparaît, donc si vous avez besoin d'obtenir un nombre normalisé, vous devez l'écrire comme ceci :
Veuillez indiquer comment et où spécifier dans l'EA la MA appartenant à la fenêtre n°2. Par exemple, j'ai ajouté une MA à MFI et je veux enregistrer cette MA dans mon EA. Je ne sais pas où et comment le faire.
mario065: Voici le code. Les fonctions pour ouvrir le poste ont été écrites par Nikolay Kositsin. Nikolay Kositsin.
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 :
//+------------------------------------------------------------------+//| Modify position. |//+------------------------------------------------------------------+bool ModifyPosition(conststring symbol,double StopLoss,double Takeprofit)
{
//---- обявяване на структурата и резултата на търговското исканеMqlTradeRequest request;
MqlTradeResult result;
//---- структурна инициализация на търговското искане MqlTradeRequest за модифициране на позиция
request.action = ...
request.symbol = ...
request.sl = ...
request.tp = ...
...
//---- модифицираме позицията и проверяваме резултата от търговското исканеif(!OrderSend(request,result) || result.deal==0)
{
...
}
ZeroMemory(request);
ZeroMemory(result);
return(true);
}
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 MqlTradeResultne 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".
Gumko:
Ça fait deux jours qu'elle est debout.
Bonjour à tous.
Modification et problèmes.
Fonction externe :
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- structure de liaison et résultats commerciaux
Demande MqlTradeRequest ;
MqlTradeResult résultat ;
//---- structure d'initialisation de la recherche de transactions MqlTradeRequest pour la modification de la position
request.action = TRADE_ACTION_SLTP;
request.symbol = symbol ;
request.sl = StopLoss ;
request.tp = Takeprofit ;
string word = "" ;
StringConcatenate(mot,
"<< ============ Modifyposition() : modifier la position ",
symbole," ============ >>>") ;
Imprimer(mot) ;
//---- modifier la position et vérifier les résultats de la recherche commerciale
if(!OrderSend(request,result)|| result.deal==0)
{
Print("Erreur de modification =", GetLastError() ;
retour (faux) ;
}
retour (vrai) ;
}
Mais ça ne marche pas comme ça.
Comment faire ?
Merci :)
Essayez de cette façon :
Essayez de cette façon :
Yedelkin,
Merci, ça n'a pas marché.
J'ai vérifié s'il compte correctement pour le début de l'appel de fonction.
Voilà comment j'ai fait :
double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits) ;
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits) ;
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits) ;
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits) ;
if(Open > 0){
start_buy = Ask - Open ; Print("start_buy=",start_buy) ;
start_sel = Open - Bid;Print("start_sel=",start_sel) ;
}
Surprise dans le journal :
MR 0 Core 1 10:21:49 2012.10.01 10:12:42 deal #2 sell 0.10 EURUSD at 1.28146 done (based on order #2)
GH 0 Core 1 10:21:49 2012.10.01 01 01:12:42 transaction effectuée [#2 vendre 0.10 EURUSD à 1.28146].
NI 0 Core 1 10:21:49 2012.10.01 01 01:12:42 ordre exécuté vendre 0.10 à 1.28146 [#2 vendre 0.10 EURUSD à 1.28146 (0.00000)
OF 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.0001299999999999635
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01:12:43 start_buy=0.00010999999998325
FR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Bien sûr, je me demandais, tout comme Sela, d'où venaient ces chiffres ?
Je pense avoir écrit la fonction correctement comme indiqué :
Modification de SL et TP
Ordre de transaction pour la modification des niveaux StopLoss et/ou TakeProfit. Nécessite 4 champs :
Alors qu'est-ce qui a exactement "échoué" ?
Insérez le code correctement (Ctrl+Alt+M) :
Ici, la normalisation doit être utilisée dans un ordre différent.
1. Comme les valeurs de type SymbolInfoDouble(Currency,SYMBOL_BID) proviennent du serveur, elles sont déjà considérées comme normalisées. Et il n'est pas nécessaire de les normaliser une seconde fois. C'est-à-dire que vous pouvez simplement les écrire :
Mais après toute opération arithmétique, la normalisation disparaît, donc si vous avez besoin d'obtenir un nombre normalisé, vous devez l'écrire comme ceci :
Je réfléchis encore au reste.
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
FR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.0000000145e-005
Bien sûr, seul le sel nous intéresse - d'où viennent de tels chiffres ?
7,00000000000145e-005 n'est qu'une des façons d'enregistrer la valeur d'un nombre réel. Je crois que ça s'appelle "scientifique". Pour plus de détails, voir."Guide de référence MQL5 / Notions de base du langage / Types de données / Types réels (double, flottant)".
Yedelkin,
Merci de vous être attaqué à ce problème.
Voici le code. Les fonctions pour ouvrir la position ont été écrites par Nikolay Kositsin.
Par exemple, j'ai ajouté une MA à MFI et je veux enregistrer cette MA dans mon EA. Je ne sais pas où et comment le faire.
Merci pour votre réponse)
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.