[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 87

 
FOReignEXchange:


Qui aime ce qu'il aime. L'écriture de chacun est différente. Peut-être que tu as raison, mais je pense que c'est bâclé.

Je ne le ferais pas de cette façon.

Tout d'abord, je ne sais pas vraiment pourquoi je dois déclarer une variable à cet endroit et quel en est l'intérêt, je ne le comprends pas non plus.

Deuxièmement, la ligne PriceBuy = Ask ; est située juste après la fonction OrderSend. Et d'après ce que je comprends, les calculs sont immédiatement transmis à la ligne suivante dès que cette fonction termine son exécution. Je ne pense pas que le prix de l'Ask puisse changer. J'essaie d'écrire tout aussi simplement que possible, en réduisant le nombre de caractères, si cela n'interfère pas avec le fonctionnement normal du programme. Je peux attribuer une valeur de la même manière que vous, je ne vois pas de problème ici. J'ai écrit ce qui m'est venu à l'esprit en premier et le plus facilement.

J'ai écrit une fois un Pips Expert Advisor et participé à un concours dans lequel le bénéfice minimum à prendre en compte est de 5 pips. J'ai mis TP=5, SL=10 dans mon EA et je suis allé faire un tour. Je suis rentré chez moi le soir, j'ai regardé le terminal et j'ai été déçu. Mon Pips Expert Advisor a clôturé la plupart de mes transactions avec un bénéfice, mais le bénéfice de certaines d'entre elles était de 4 points et même de 3, et non de 5, ce dont j'avais besoin. D'ailleurs, SL n'était parfois pas à 10, mais à 11 ou 12 points...

Pourquoi ? Je suis sûr que vous connaissez la réponse ! :D

Voici une situation réelle, dans laquelle j'ai cessé de compter les prix Ask et Bid comme prix d'ouverture des ordres. Si 1 ou 2 points ne sont pas significatifs pour vous, ce n'est pas grave. Pour moi, ce sont les petites choses qui sont importantes.

 
MaxZ:

Pourquoi pas ? Je suis sûr que vous connaissez la réponse ! :D

Nah. J'ai d'abord pensé que c'était parce que l'écart n'était pas compté.

Y a-t-il eu des transactions où le bénéfice était de 6-7 pips ?

 
FOReignEXchange:
Nah. J'ai d'abord pensé que c'était parce que l'écart n'avait pas été calculé.

Merde... Pour me citer moi-même :

MaxZ:

Troisièmement : si le slippage est spécifié dans la fonction commerciale OrderSend et que nous voulons ouvrir un ordre d'achat, l'ordre ne sera pas nécessairement ouvert exactement au prix Ask, car il faut un certain temps pour exécuter un ordre commercial donné par la fonction OrderSend et le prix peut s'éloigner de cette valeur.

Et à quelle valeur de prix lions-nous TP et SL ? Pour demander... Le prix a changé, mais le TP et le SL n'ont pas bougé.

 
MaxZ:

À quelle valeur de prix fixons-nous TP et SL ? Pour demander... Le prix a changé, mais le TP et le SL n'ont pas bougé.

Je ne peux pas garantir que mon orthographe est absolument correcte. Mais je le fais de cette façon tout le temps quand j'en ai besoin. Je n'ai rien remarqué d'anormal.

Je ne peux rien dire sur votre cas, où vous aviez une fixation de profit inférieure à 5 pips, car je n'ai pas vu le code.

 

C'était :

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Devenu :

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Le principe est le suivant. Mais c'est en fait un peu plus compliqué que ça...

Combien de lignes ? Vraiment ? :)))

 
MaxZ:

C'était :

Devenu :

Le principe est le suivant. Mais c'est en fait un peu plus compliqué que ça...

Combien de lignes ? Vraiment ? :)))


? ?? Je ne comprends pas. Où sont le SL et le TP dans le premier exemple ?
 
FOReignEXchange:

? ?? Je ne comprends pas. Où sont le SL et le TP dans le premier exemple ?

Je n'ai montré que le principe. Très bien, alors. Ajouté.

MaxZ:

Le principe est le suivant. Mais c'est en fait un peu plus compliqué que ça...

Si l'ordre ne s'ouvre pas au prix indiqué, il se peut qu'il y ait une erreur lors de la modification de l'ordre et nous nous heurterons au même rake... C'est pourquoi nous essayons en fait de modifier l'ordre plus d'une fois s'il a un ticket positif... On ne veut pas copier tout le code. C'est encombrant. Mais le principe est posé.
 
Ah, je vois. SL et TP sont debout avant la fonction OrderSend. Peut-être que c'était le problème ?
 
FOReignEXchange:
Ah, je vois. SL et TP se tiennent devant la fonction OrderSend. Peut-être que c'était le problème ?
Quel pourrait être le problème ? Au moment où le SL et le TP sont calculés, le prix aura le temps de changer ? ;)))
 
MaxZ:
Quel pourrait être le problème avec ça ? Au moment où le SL et le TP sont calculés, le prix aura-t-il eu le temps de changer ??? ;)))

Je vous ai dit que pendant l'exécution de la fonction OrderSend, le prix pouvait changer. Nous devons donc l'attribuer après coup, alors qu'elle a déjà changé.
Raison: