[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 444

 
Elena56:

Pendant le processus d'optimisation, je vérifie la marque de visualisation et appuie sur le bouton de démarrage, après quoi le testeur de stratégie s'estompe, la marque de visualisation disparaît et le test se déroule à un rythme très lent. Qu'est-ce que ça veut dire ? J'étais en train de charger des citations et de les mettre à jour. (MT4)

Il s'agit d'une optimisation, pas d'un test.
 

Messieurs, à l'aide s'il vous plaît. J'ai un problème - ne veut pas écrire le texte à la fin de la commande, dites-moi pourquoi plz

   OrderSelect(otbH,SELECT_BY_TICKET);
   if(OrderSelect(otbH,SELECT_BY_TICKET)==true)
   { 
      Print("1");
      if(OrderCloseTime()>0)
      {
         Print("2");
         ObjectCreate("ndp"+OrderTicket(),OBJ_TEXT,0,0,0);
         ObjectSet("ndp"+OrderTicket(),OBJPROP_TIME1,TimeCurrent());
         ObjectSet("ndp"+OrderTicket(),OBJPROP_PRICE1,OrderClosePrice());
         ObjectSetText("ndp"+OrderTicket(),OrderProfit(),5,"Arial",Aqua);
      } 
   }    
   
   

otbH - c'est le numéro du billet. La chose intéressante est que le nombre "1" s'imprime, mais le nombre "2" refuse... Je n'arrive pas à trouver la raison... ...car il sélectionne l'ordre... explique-moi...

 
CLAIN:

Messieurs, à l'aide s'il vous plaît. J'ai un problème - ne veut pas écrire le texte à la fin de l'ordre, dites-moi pourquoi plz

otbH - c'est le numéro du billet. La chose intéressante est que le nombre "1" s'imprime, mais le nombre "2" refuse... Je n'arrive pas à trouver la raison... ...car il sélectionne l'ordre... explique-moi...


La commande est-elle fermée ou non ?
 

L'ordre s'ouvre d'abord, puis il se ferme.

Ce script s'exécute à chaque tic, donc à un moment donné, il sera définitivement fermé...

Je sélectionne d'abord la commande par le billet - OrderSelect(otbH,SELECT_BY_TICKET) ; - elle sera sélectionnée, peu importe où elle se trouve, n'est-ce pas ?

Et ensuite, il devrait déterminer si c'est fermé ou ouvert... mais pour une raison quelconque, il ne le fait pas...

 
CLAIN:

L'ordre s'ouvre d'abord, puis il se ferme.

Ce script s'exécute à chaque tic, donc à un moment donné, il sera définitivement fermé...

Je sélectionne d'abord la commande par le billet - OrderSelect(otbH,SELECT_BY_TICKET) ; - elle sera sélectionnée, peu importe où elle se trouve, n'est-ce pas ?

Et ensuite, il devrait déterminer si c'est fermé ou ouvert... mais pour une raison quelconque, il ne le fait pas...


Essayez de sélectionner un ordre fermé
 
Dites-moi comment, je ne sais pas comment.
 
CLAIN:
Dites-moi comment, je ne sais pas comment.

   int total=OrdersHistoryTotal();
   for (int i=total-1;i>=0;i--) 
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==MagicNumber )
            {
               // Ваши действия с ордером
            }
         }
      }
   }
 

La question est - le prix d'ouverture est calculé au croisement de deux mobiles (exagéré), dans le test - tout est OK, mais quand on le met sur la démo, les ouvertures sont fausses (parce que pendant la formation d'une barre le prix à l'intérieur saute de min à max), donc l'idée de prendre en compte le croisement seulement quand la barre est formée, c'est-à-dire la barre est formée (a vu le croisement) et ensuite la prochaine entrée sur le marché, en tenant compte du croisement.

 
DOCTORS:

La question est la suivante : le prix d'ouverture est calculé en croisant deux curseurs (exagérés), dans le test tout est OK, mais quand vous le mettez sur la démo, les ouvertures sont fausses (parce que pendant la création d'une barre le prix à l'intérieur saute de min à max), donc l'idée est de considérer le croisement seulement après que la barre soit formée, ie la barre est formée (on a vu le croisement) et ensuite la prochaine entrée sur le marché est faite avec le croisement.

Il est étrange que cela soit correct dans le testeur - dans le testeur, la barre de zéro n'est pas non plus formée et il y aura également de faux croisements.

Recherchez les croisements sur les 1ère et 2ème barres. Si sur le second МА1 <= МА2, alors que sur le premier МА1 > МА2, cela signifie que МА1 a traversé МА2 de bas en haut. Pour le top-down, c'est l'inverse.

Ne faites la comparaison que par soustraction :

   double MA1=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,1);
   double MA2=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,2);
   if (NormalizeDouble(MA1-MA2,Digits)<=0)
   if (NormalizeDouble(MA1-MA2,Digits)>0) {
      // MA1 пересекла MA2 снизу-вверх
      }

Pour le top-down, c'est l'inverse.

Vous pouvez le comparer non pas à zéro, mais à une valeur minimale, par exemple 0,1*Point.

 
artmedia70:

Il est étrange que cela soit correct dans le testeur - dans le testeur, la barre de zéro n'est pas non plus formée et il y aura également de faux croisements.

Recherchez les croisements sur les 1ère et 2ème barres. Si sur la deuxième MA1 <= MA2 et sur la première MA1 > MA2, alors MA1 a franchi MA2 de bas en haut. Pour le top-down, c'est l'inverse.

Ne faites la comparaison que par soustraction :

Pour le top-down, c'est l'inverse.

Vous pouvez le comparer non pas à zéro, mais à une valeur minimale, par exemple 0,1*Point.


Merci beaucoup !