Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 364

 
bercut0077:
Bonjour, il y a un indicateur, mais dans le testeur après une certaine période du début de l'année à Mars fonctionne et puis cesse de donner des signaux, et j'ai besoin de tester une longue période (AuthorizedSSBODynamicBreakoutBoxFinalEdition), où dans le code peut être cette limitation - s'il vous plaît au moins donner un indice où creuser, quels opérateurs le déterminer ?
Il y a parfois des problèmes. Il arrête juste de dessiner la boîte. Il n'y a aucune restriction nulle part. Testez le potikovo. Parfois, ça aide.
 
Sepulca:
Avez-vous le code source de l'indicateur ? Si non, cherchez l'auteur))))

J'ai le code source - c'est un désordre.
 
Non, je ne vais même pas essayer alors. Parfois, on se perd dans son propre code, sans parler de celui de quelqu'un d'autre)))).
 

Comment me dire s'il vous plaît quelques Expert Advisor éprouvés dans MQL4 et 5, et le temps est très court, parfois vous avez besoin de vérifier une idée ou d'aider quelqu'un pour finalement créer une base pour le robot et pour finir de l'écrire vous-même ...

Je vous en serais reconnaissant, merci d'avance ! !! =)

 
vadynik:

J'écris une fonction comme celle-ci

Mais pourquoi OrderOpenPrice() renvoie-t-il le prix arrondi à quatre chiffres sur les cinq chiffres ?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
Essayez de faire cela et voyez ce que retourne réellement OrderOpenPrice(), peut-être que la raison est que vous normalisez la fonction avec le paramètre Digits et que vous ne voyez pas dans l'imprimante ce qu'il en est réellement.
 
vadynik:

J'écris une fonction comme celle-ci

Mais pourquoi OrderOpenPrice() renvoie-t-il le prix arrondi à quatre décimales ?

Print ne renvoie pas un prix arrondi, dans ce cas, il affiche simplement le nombre de décimales par défaut.
En fait, le Forex ne fonctionne pas avec des décimales inférieures à des chiffres. En général, en prenant l'exemple de l'EURSD, il n'y a que quatre décimales, et même la cinquième décimale est une idée des sociétés de courtage.

Mais dans votre cas, il est préférable de procéder ainsi : Print(DoubleToStr(OrderOpenPrice(),Digits)) ;

 
Ekburg:

Essayez de faire cela et voyez ce que retourne réellement OrderOpenPrice(), peut-être que la raison est que vous normalisez la fonction avec le paramètre Digits et que vous ne voyez pas dans l'imprimante ce qu'il en est réellement.

C'est la même chose sans normalisation, j'ai besoin de soustraire des points du prix d'ouverture, si c'est le cas le prix est ce dont j'ai besoin, mais alors j'ai une erreur de type dans IF(
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

J'ai besoin de soustraire des points du prix d'ouverture, et si c'est le cas, le prix est celui dont j'ai besoin, mais ensuite j'obtiens une incompatibilité de type dans IF (

Faites les calculs en quatre chiffres. Si la précision est importante pour vous, remettez la valeur du dernier chiffre, car elle ne change pas pendant les calculs en raison de la nature de ceux-ci.
 
Ekburg:

Faites les calculs comme pour quatre chiffres, et si la précision est importante pour vous, alors remettez-le en place, avec la valeur du dernier chiffre qui était plus tôt, car il ne change pas pendant les calculs, en raison des spécificités des calculs.
La normalisation n'est nécessaire que dans Ordersend, orderclose etc. Bien et encore à la comparaison des valeurs réelles et dans les imprimantes spécifier n'importe quelle quantité de signes après un point décimal. Mais si vous écrivez simplement Print(whatever_double_value), il imprimera généralement quatre décimales. Par conséquent, la manière correcte de procéder est d'écrire
Print(DoubleToStr(OrderOpenPrice(),Digits));

Comme déjà mentionné, il faut d'abord convertir le double en chaîne de caractères avec le nombre de décimales spécifié, puis l'imprimer dans le journal en utilisant Print.....
 
Et si des points sont calculés, ne les confondez pas avec les points. Disons que le double SPRED=Points demande-enchère, ou même que le double SPRED=(points demande-enchère)/points.