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

 
xyz999: 2) Si une optimisation (backtest) a été réalisée sur une période de 10 mois et que l'option de test 1/4 forward a été choisie, comme par exemple, comment dois-je comprendre :
Terminal client / Testeur de stratégie / Backtesting / Forward Testing
 

Merci.

Oui, à partir de ce lien.

http://www.metatrader5.com/ru/terminal/help/tester/tester_using/forward_testing.

J'ai trouvé la réponse à ma deuxième question. Cependant, il n'y a PAS de réponses aux première et troisième questions.

J'aimerais aussi les avoir.

Je veux connaître les résultats et les ratios des autres traders. Comme mes résultats sont très alarmants. Je suis un scientifique dans le domaine du contrôle automatique et de la modélisation des processus non stationnaires, ce qui inclut également un graphique du mouvement des prix sur le marché. Je modélise des processus non stationnaires depuis de nombreuses années et la façon dont le testeur fonctionne ne correspond en rien à mes années d'expérience. Quelque chose ne va pas ici. Soit j'utilise le testeur de manière incorrecte, soit il ne fonctionne pas correctement. Découvrons-le ensemble.

Mon backtest suivant strictement la période d'optimisation montre 200% du profit que nous avions pendant l'optimisation. Cependant, en choisissant d'autres paramètres d'optimisation et en effectuant des tests pendant la période d'optimisation, nous obtiendrons plusieurs fois moins de bénéfices. Cela ne devrait pas être le cas. C'est pourquoi j'ai quelques questions.

 
xyz999: J'ai trouvé une réponse à ma deuxième question. Cependant, il n'y a PAS DE RÉPONSE À LA PREMIÈRE ET LA TROISIÈME QUESTION. J'aimerais aussi les avoir.

Ce n'est pas à moi de décider, comme on dit, "Tout ce que je peux" (c). Je suis loin du sujet lui-même. Essayez de faire une recherche sur le forum, peut-être que l'on y a déjà parlé des essais en amont. Ou, si vous pensez que le sujet est très important, créez une nouvelle branche thématique. Sinon, les questions se perdront dans la branche générale.

xyz999 : Oui, sur ce lien https://www.metatrader5.com/ru/terminal/help/algotrading/testing j'ai trouvé la réponse à ma deuxième question.

Il y a également des documents de référence dans le terminal. F1.

 
mario065:

C'est une chose très stupide à faire.

J'ai pris le corps de l'indicateur Custom Moving Average et j'ai mis le tampon MFI à l'intérieur.

J'ai changé le prix.

J'ai fait de vous un expert, juste un indicateur et un commentaire pour vérifier.

Merci de ne pas laisser le message sans réponse. Hélas, le testeur rejette toujours le lissage des autres indicateurs. Mon conseiller expert a besoin de deux indicateurs - MFI et DEMA en même temps. J'ai implémenté votre algorithme avec MFI dans mon EA - en vain - je n'ai pas été capable de l'exécuter pour l'optimisation des variables globales.

Merci encore pour vos messages.
 
L'article sur l'EA https://www.mql5.com/ru/articles/100 mentionne des conditions pour ouvrir des positions, mais pas de conditions pour les fermer.


   bool Buy_opened=false;  // переменные, в которых будет храниться информация 
   bool Sell_opened=false; // о наличии соответствующих открытых позиций

   if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //это длинная позиция
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // это короткая позиция
        }
     }    
             
   bool Buy_Condition_1=...
   bool Buy_Condition_2=...
   bool Buy_Condition_3=...

   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
 
 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу                                     // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=10;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

Au lieu des points d'interrogation, j'ai mis PositionSelect(_Symbol) avec la valeur true. Cela n'a pas aidé.


Question. Qu'est-ce que je peux changer au minimum - pour pouvoir fixer des conditions proches ?
Пошаговое руководство по написанию MQL5-советников для начинающих
Пошаговое руководство по написанию MQL5-советников для начинающих
  • 2010.06.09
  • Samuel
  • www.mql5.com
Написание советников на MQL5 проще чем кажется, вы легко можете этому научиться. В этом руководстве вы познакомитесь с основными моментами, необходимыми для написания простого советника на основе конкретной торговой стратегии. Рассмотрена структура советника, использование встроенных технических индикаторов и торговых функций, вопросы отладки и тестирования советника на исторических данных.
 
Lester:
L'article sur le conseiller expert https://www.mql5.com/ru/articles/100 mentionne les conditions d 'ouverture des positions, mais il ne parle pas des conditions de fermeture des positions.


Au lieu des points d'interrogation, j'ai mis PositionSelect(_Symbol) avec la valeur true. Cela n'a pas aidé.


Question. Que puis-je modifier au minimum - pour pouvoir définir les conditions de clôture ?

Vous avez un retour après Alert. La position n'est probablement pas fermée à cause de ce retour. S'il vous plaît, enlevez-le et essayez à nouveau.

// есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           return;    // закрыл
         }  


 
Merci, car j'avais l'impression que la réponse était très simple et qu'elle se trouvait à proximité.
Cependant, une autre question s'est posée sur la partie des points d'interrogation.

Sur l'algorithme.

Dans des conditions appropriées + aucune position - la position est ouverte, et dans d'autres conditions et la présence d'une position ouverte - la position ouverte est fermée.

Si je ne me trompe pas - existence d'une position, à savoir Achat_ouvert

if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Уже есть позиция на покупку!!!");
            return;    // не добавлять к открытой позиции на покупку
           }        

égale à un - provoque une alerte et un retour (retour au début), et égale à zéro - ouvre un ordre d'achat.

Question. Que dois-je écrire à la place des points d'interrogation - la condition d'un ordre ouvert, afin que l'EA n'ouvre pas de position (dans mon cas, il ouvre un ordre de vente) ?

 bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
            return;    // закрыл
         }        
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена bid
         mrequest.sl = 0;
         mrequest.tp = 0;

Pour le moment, j'ai également prescrit Buy_opened, car les conditions de cette définition sont liées à PositionSelect(_Symbol)

Je comprends que les questions ne veulent rien dire, car il est possible d'essayer rapidement toutes les options logiques possibles et de tester, mais le problème est que le bug du testeur ne me permet pas de le faire, mais il y a une possibilité de faire un diagnostic réel sur M1 en mode de trading réel.

 
Lester:
...

Je comprends que les questions ne veulent rien dire puisque vous pouvez rapidement re-tester toutes les options logiques possibles et tester, mais le problème est que le bug du testeur ne me permet pas de le faire, mais il y a une possibilité de faire un diagnostic réel sur M1 en mode de trading réel.

Je ne comprends pas bien votre question.

Et quel bug dans le testeur avez-vous trouvé qui vous empêche d'exécuter le test ?

 
tol64:

Je ne comprends pas bien votre question.

Quel est le bogue dans le testeur qui vous empêche d'exécuter le test ?

Je l'ai décrit plus tôt ou dans la branche Indicator. Dema se référant à la poignée de l'indicateur MFI n'est pas affichée dans la fenêtre MFI et donc le testeur ne fonctionne pas, mais le Conseiller Expert fonctionne. Même chose pour MA, AMA... !

A propos de la question. Que devons-nous écrire à la place des points d'interrogation pour que le conseiller expert "comprenne" qu'il y a une position ouverte et n'ouvre pas un ordre !

bool Buy_Close_1=....
 bool Buy_Close_2=...
 bool Buy_Close_3=...
 
 if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
         if(????)
         {
           Alert("Позицию на покупку закрываю!!!");
           // Return убрал благодаря форуму ))
         }        
 
Lester:
Décrit précédemment, ou dans la branche des indicateurs. Dema se référant à la poignée de l'indicateur MFI - n'est pas affiché dans la fenêtre MFI, et donc - le Conseiller Expert ne fonctionne pas. Il en va de même pour MA, AMA.

A propos de la question. Que devons-nous écrire à la place des points d'interrogation pour que l'EA "voie" qu'il y a une position ouverte et n'ouvre pas un ordre !

S'il existe une position (PositionSelect(_Symbol)) et que toutes les autres conditions sont remplies, alors fermez la position. Si le retour de votre exemple n'est pas supprimé, la condition devrait ressembler à ceci

if(!PositionSelect(_Symbol))
  {
   return;
  }

ce qui signifie que s'il n'y a pas de position, alors exit. Si ce n'est pas le cas, le programme exécutera le code qui vient après ce bloc.

Mais je mettrais le contrôle de la présence/absence de la position avant le contrôle des conditions de fermeture.

Raison: