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

 
Maksim Burov #:

Bonjour.

Pouvez-vous m'indiquer comment organiser une nouvelle exécution des paramètres d'optimisation obtenus, mais pour une période de temps différente.

J'ai optimisé pendant les six derniers mois les paramètres d'une paire de devises, enregistrés dans Excel. J'ai pris la période de l'année dernière, et je veux exécuter les paramètres. Comment les remettre dans le testeur ou l'optimiseur ?
Vérifier ce qui passera, ce qui ne passera pas, le noter dans Excel. Vous pouvez ensuite effectuer une analyse pour les deux dernières années, par exemple.

Sélectionnez la période sur laquelle vous souhaitez exploiter vos données. Ensuite, dans l'onglet des paramètres obtenus, cliquez avec le bouton droit de la souris sur les paramètres requis et sélectionnez "single test".
 
Roman Kutemov #:
Sélectionnez la période sur laquelle vous souhaitez exploiter vos données. Et ensuite dans l'onglet des paramètres obtenus, faire un clic droit sur celui désiré et sélectionner single test.

Merci.
Et comment faire tout dans le champ d'application, sans toucher à chaque paramètre ?

 

Pourriez-vous m'aider à faire les calculs ?


J'ai besoin d'avoir un take profit 3 fois le stop. Cela semble fonctionner, mais quelque chose ne va pas)). Le robot trade sur l'or et les indices, mais refuse de trader sur les devises (bien qu'il calcule tout correctement).

Tout d'abord, je fixe le stop sur le plus bas de la bougie 1 :

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

Ensuite, je calcule la distance entre ASK et le stop en points, et j'assigne cette valeur aux points pert :

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

Ensuite, je calcule le stop également en pips :

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


Ensuite, j'ouvre une transaction et j'ajoute TR à l'ASK :

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


Et dans le testeur tous les calculs sont corrects, en points à 5 chiffres, le stop est aussi sur Low1, la taille du stop est aussi correcte en points à 5 chiffres. Mais il y a quelque chose qui ne va pas avec le take profit, ce n'est pas 507 pips, mais 5070 pips.



 

Bonjour, Sergey.

Pour calculer le stop, on passe de la distance en prix à la distance en pips. Ensuite, en multipliant par 3, on obtient la distance jusqu'au takeout également en pips. Ensuite, vous ajoutez le nombre de pips au prix demandé.

Essayez de ne pas diviser par la taille d'un pip ou de ne pas oublier de le multiplier à nouveau.

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

Ou comme ceci

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

Bonjour, Sergei.


Merci beaucoup ! Je me suis vraiment perdu dans les prix/articles. Je vais essayer maintenant)))

 
Maintenant tout est compté et réglé correctement, mais seulement sur USDJPY, XAUUSD et n'importe quel indice. Mais sur des devises comme l'USDCAD, l'EURUSD, le hibou ne trade pas et envoie l'erreur 4756. J'ai cherché la valeur dans l'aide, mais cela n'a pas aidé)
 
Sergey Izhutov #:
Maintenant tout est compté et réglé correctement, mais seulement sur USDJPY, XAUUSD et n'importe quel indice. Mais sur des devises comme l'USDCAD, l'EURUSD, le hibou ne trade pas et envoie l'erreur 4756. J'ai cherché la valeur dans l'aide, mais cela n'a rien donné)

Faites comme dans le post précédent : fournissez le code qui ouvre les positions pour vous. Ensuite, vous pourrez peut-être donner des conseils. Il ne devrait pas y avoir de différence fondamentale entre l'USDJPY et l'USDCAD, il s'agit probablement d'une erreur triviale.

 
Yuriy Bykov #:

Procéder comme dans le dernier message :

Voici le code

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

L'erreur se situe probablement à ce niveau :

if(Close > maHandle && Close > Open)

Selon votre logique, maHandle devrait être le prix, et il s'agit très probablement d'un handle, c'est-à-dire d'un nombre entier - le numéro de série de l'indicateur parmi tous les indicateurs chargés. Consultez l'aide de MQL5 pour connaître la manière correcte d'obtenir les valeurs des indicateurs.

 
Yuriy Bykov #:

Il y a probablement une erreur :

Selon votre logique, maHandle devrait être le prix, et il s'agit très probablement d'un handle, c'est-à-dire d'un entier - le numéro de série de l'indicateur parmi tous les indicateurs chargés. Consultez l'aide de MQL5 pour connaître la manière correcte d'obtenir les valeurs des indicateurs.

J'ai pensé la même chose dans la soirée, que je devrais l'enlever. Je ne me suis pas encore fait d'amis avec les indices. Je me souviens vaguement que dans 4, j'ai simplement écrit que Close > MA et que tout fonctionnait. Je vais essayer de commenter le handle et voir ce que ça donne

Raison: