Questions des débutants MQL5 MT5 MetaTrader 5 - page 63

 

Gumko:

Gumko : Et combien de temps cela va-t-il prendre pour que cette tâche apparaisse en premier... ?

Ça fait deux jours qu'elle est debout.

J'ai attendu 8 à 10 jours, puis j'ai abandonné et je l'ai éteint.
 
Je me demande quelle est la charge CPU du logiciel Tester en arrière-plan ?
 

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 :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
mario065: Mais ça ne marche pas comme ça. Comment faire ? Merci :)

Essayez de cette façon :

MqlTradeRequest request={0};
MqlTradeResult  result ={0};
 
Yedelkin:

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 :

  • action
  • symbol
  • sl
  • tp
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
mario065: Merci, ça n'a pas marché.

Alors qu'est-ce qui a exactement "échoué" ?

mario065 : J'ai vérifié s'il compte correctement pour démarrer l'appel de fonction, voici comment j'ai fait :

Insérez le code correctement (Ctrl+Alt+M) :

  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);
    }

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 :

double Bid  = SymbolInfoDouble(Currency,SYMBOL_BID);

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 :

start_buy = NormalizeDouble(Ask - Open,_Digits);

Je réfléchis encore au reste.

 
mario065: Surprise dans le journal :

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 façon d'écrire 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:
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.

Dossiers :
MTB_E.mq5  9 kb
 
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.

Merci pour votre réponse)
 
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(const string 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 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 :

//+------------------------------------------------------------------+
//| Modify specified opened position                                 |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.magic =m_magic;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

La ligne "ClearStructures() ;" efface la variable m_request avant de l'utiliser.

Raison: