[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 793

 
artmedia70:
N'ouvrons-nous pas l'option Acheter au prix demandé ? ??????


C'est ce que j'ai écrit : "Lesordres d'achat sont ouverts au prix Ask".

Mais sur le graphique, vous voyez le prix d'achat.

 
PapaYozh:


C'est ce que j'ai écrit : "Les ordres d'achat sont ouverts au prix Ask".

Mais sur le graphique, vous voyez le prix d'achat.

J'ai toujours les deux prix sur le tableau... Dans les paramètres du terminal par F8 j'ai activé l'affichage des prix Ask`... J'ai également corrigé un peu le post précédent concernant l'écart - cela ne peut pas être comme ça.
 
artmedia70:
Ne sommes-nous pas en train d'ouvrir un Buy at Ask ? ?????? ? Et il ne peut y avoir un spread de 60 pips (si on le prend après le gap), et si on le prend avant ... alors le spread sur l'EUR de 325 pips équivaut à .... :)

votre photo ne montre pas de points.
 
PapaYozh:

votre photo ne montre pas les points.
Oui, je me repens .... il peut être trompeur (comme les crochets dans votre message, où ils m'ont fait perdre le sens de votre réponse au sujet des questions et répondre de la mauvaise façon... :) )
 
artmedia70:
J'ai toujours les deux prix sur le tableau... Dans les paramètres du terminal, j'ai activé l'affichage des Ask`ts par F8... Et j'ai corrigé un peu le post précédent sur l'écart - il ne peut pas être.


Mais le prix Ask n'est pas visible dans les barres.

A propos de la propagation. C'est un écart à cinq chiffres? Si oui, spread élargi sur les nouvelles + slippage = 6 pips complets (60 à cinq chiffres) pour vous.

 
PapaYozh:


Mais le prix Ask n'est pas visible dans les barres.

A propos de la propagation. C'est un écart à cinq chiffres ? Si oui, alors l'écart étendu sur les nouvelles + le slippage = c'est 6 pips complets (60 pips à cinq chiffres).

C'est le problème : quatre... :(
 
PapaYozh:

Si j'ai bien compris votre problème, vous ne devez pas être guidé par l'heure de clôture de l'ordre. Vous devez commencer au début de la barre à laquelle le signal d'ouverture et la position ont été ouverts. Ce que je ferais, personnellement, est le suivant :

1) créer une variable de type datetime où j'entrerais la valeur Time[0] si la commande est passée avec succès ;

2) dans la fonction init(), initialiser cette variable avec la valeur "0". Je préfère une initialisation explicite car elle est plus claire lors de la révision du code ;

3) lorsque les conditions pour ouvrir une position apparaissent, avant d'envoyer la requête OrderSend(...), comparez la valeur de cette variable avec la valeur Time[0] et si elles ne sont pas égales, envoyez une requête.

4) si la position s'ouvre, je stocke la valeur de Time[0] dans la même variable.


Merci pour la clarification - mais pensez-vous qu'au lieu de comparer avec la valeur Time[0], vous pourriez donner cette tâche avant la requête OrderSend(...) : vérifier s'il y a une clôture StopLoss-y sur la barre actuelle ? Ensuite, je dois introduire une double fonction StopLoss() qui fonctionnera avec la variable StopLoss que j'ai annoncée ? Ou bien ce n'est PAS POSSIBLE par principe ? Il est important pour moi qu'une nouvelle position ne soit pas ouverte sur la barre qui a enregistré une perte, même si elle correspond aux paramètres de l'ouverture.

extern double Stoploss           =1000;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
    
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }
//----
  }

Le fait est que les facteurs temporels doivent être examinés en dernier lieu - très souvent, ils glissent - ou plutôt l'interprétation d'une ordonnance s'avère différente (ambiguë).

 
obla4ko, créez une variable date x et laissez-la être l'heure d'ouverture de la barre où le stop loss a eu lieu. Et dans l'ensemble des conditions ouvertes que (Temps[0]!=x). Dans ce cas, x doit être mis à jour lors d'une nouvelle boucle d'arrêt déclenchée. Il s'agit de la première variante. Et la seconde, comme je l'écris pour la troisième fois, après un stop déclenché en attendant 1 barre, ce serait exactement la même chose, n'est-ce pas logique ?
 
PapaYozh:


Mais vous ne pouvez pas voir le prix de la demande dans les barres.

A propos de la propagation. C'est un écart à cinq chiffres ? Si oui, alors l'écart s'est élargi sur les nouvelles + le slippage = c'est 6 pips complets (60 pips à cinq chiffres).

Aussi, à mon avis, il peut y avoir une "épingle à cheveux", nettoyée par la suite :)), mais "sauvegardée dans la mémoire" de plus petites échéances, que vous n'atteindrez pas...

Et la question des tests sur l'histoire :

peut un Conseiller Expert (un simple !) - ... mais pas une grille) sur la même période de l'histoire, avec les mêmes paramètres, donnerait-il des résultats complètement différents ?

La seule chose que j'ai faite, entre ces deux tests, a été de mettre à jour l'archive des citations... et qui aurait pu conduire à un tel résultat ? - puis il s'avère que toute l'histoire est une connerie ! ?

 

Quelqu'un peut-il me dire pourquoi MathRound() se comporte étrangement. Les grandes valeurs comptent, les petites ne comptent pas...

Il existe un code simple pour augmenter les valeurs de certaines variables de 10% :

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/10*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/10*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

Les valeurs calculées sont enregistrées. Si toutes les lignes, sauf la première, sont divisées par 10, alors celle-ci compte comme le numéro 100 et il n'y a aucun problème :

2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5 : Fonction de calcul : SLs = 11 et TPs = 66, TStartS = 60, TStop.Sell = 20, TStopLastPosS = 60, TStop.SellLP = 25

Ce qui est marqué en vert est ce qui compte dans la première ligne de code.

Mais si vous mettez la division par 100 (comme cela devrait être)

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/100*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10 0*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/100*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

... alors toutes les lignes, sauf celle du haut, ne comptent pas du tout - les valeurs initiales restent, comme si elles n'avaient pas été ajoutées.

dix pour cent :

2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5 : Fonction de calcul : SLs = 11 et TPs = 66, TStartS = 30, TStop.Sell = 10, TStopLastPosS = 30, TStop.SellLP = 15

Aidez-moi à comprendre ce que c'est et où c'est... :)