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

 
Rossi:

y a-t-il un moyen de trier les instruments dans les onglets en bas de l'écran ? car 8 instruments dans 4 délais sont éparpillés dans un désordre .....

pas de
 
DDFedor:

Saisissez l'onglet portant le nom du graphique et faites-le glisser au bon endroit.

AAAAAAAAAAAAAAAAAAAAAAAAAAAA grande réponse, merci...
 
artmedia70:
:) Maintenant, l'erreur 130 est apparue. La chose la plus déroutante est qu'avec des arrêts erronés (130), il définit toujours des décollages corrects (calculés par ATR), mais mes arrêts n'ont pas été définis depuis le début...
Y a-t-il un moyen de comprendre cela ?
Une erreur de 130 peut être due à un mauvais stoploss ou à un mauvais takeprofit.
 
ToLik_SRGV:


J'ai ajouté des ordres limites (je les avais oubliés dans le code précédent :)) + traitement de l'erreur n°1 (avant la modification, le nouveau prix est comparé au prix actuel, s'ils sont identiques, alors rien ne se passe) :

Il semble que les ordres modifiés déplacés par le chalutage plus près du marché perdent leur héritage TakeProfit... Une fois déclenchés, ils s'accrochent au graphique en position et consomment stupidement de la marge. Ils ne ferment pas en profit ou en perte, et il n'y a pas de ligne TakeProfit... Bien que, j'ai volontairement ajouté la valeur tp, calculée en utilisant ATR, au code pour le vérifier :

void trailingOrder(int magic, int trailing){
   int index = 0, tp=TakeProfitATR (5);
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
                  /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
// ..... Далее по тексту функции также добавлены изменения...

Avant et après mes modifications, l'ordre modifié n'avait pas de ligne d'achat, ni avant ni après sa conversion en position...

Quelle peut en être la raison ?

 
artmedia70:

Il semble que les ordres modifiés déplacés par le chalutage plus près du marché perdent leur héritage TakeProfit... Une fois déclenchés, ils s'accrochent au graphique en position et consomment stupidement de la marge. Ils ne ferment pas en profit ou en perte, et il n'y a pas de ligne TakeProfit... Bien que, j'ai volontairement ajouté la valeur tp, calculée en utilisant ATR, au code pour le vérifier :

Tant avant qu'après les modifications, l'ordre modifié n'avait pas de ligne de prise avant ou après sa conversion en position...

Quelle pourrait être la raison ?

Lorsque l'on modifie le prix d'un ordre en attente, il faut également modifier le stoploss et le takeprofit.
 
khorosh:
L'erreur 130 peut être soit un mauvais stoploss, soit un mauvais takeprofit.
Merci. Je le savais déjà... Ce n'était pas le but. L'erreur était causée par le chalut - je l'ai désactivé et tout est OK. Je n'ai pas encore eu le temps de m'en occuper.
 
khorosh:
Lorsque vous modifiez le prix d'un ordre en attente, vous devez également modifier le StopLoss et le TakeProfit.

La fonction ATR Take Profit ne fait-elle pas cela ? Je l'appelle avant de modifier un ordre, je récupère la valeur de prise actuelle calculée par TakeProfitATR() et je la colle dans la modification de l'ordre... C'est le cas dans mon exemple ci-dessus :

int index = 0, tp=TakeProfitATR (5); // Рассчёт нового тейка по значению ATR. Ф-ция возвращает размер тейка в пунктах

....

if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
   /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError()); // здесь вместо OrderTakeProfit() подставляю tp
On dirait que j'ai trouvé une erreur en écrivant ceci... La fonction TakeProfit d'ATR renvoie la valeur TakeProfit en pips, alors que le prix devrait être utilisé.
Mais alors je ne comprends pas pourquoi l'ordre modifié perdait sa prise... Bien que, OrderTakeProfit() devrait écrire la valeur de son point de prise dans l'ordre en cours de modification...
Et puis la question - pourquoi devrais-je le modifier (prendre) à chaque fois, si, disons, je veux juste rapprocher un ordre en attente du marché sans le modifier, si le marché s'en est éloigné et est prêt pour un retournement ou une correction.... ? ??
 
artmedia70:

La fonction ATR Take Profit ne fait-elle pas cela ? Je l'appelle avant de modifier un ordre, je récupère la valeur de prise actuelle calculée par TakeProfitATR() et je la colle dans la modification de l'ordre... C'est le cas dans mon exemple ci-dessus :

....

On dirait que j'ai trouvé mon erreur en écrivant ceci... La fonction TakeProfit d'ATR renvoie la valeur TakeProfit en pips, alors que le prix devrait être utilisé.
Mais alors je ne comprends pas pourquoi l'ordre modifié perdait toujours sa valeur de point de prise avant ces changements... Bien que, OrderTakeProfit() devrait écrire la valeur de son point de prise dans l'ordre en cours de modification...
Et puis la question - pourquoi devrais-je le modifier (prendre) à chaque fois, si, disons, je veux juste rapprocher un ordre en attente du marché sans le modifier, si le marché s'en est éloigné et est prêt pour un retournement ou une correction.... ? ??




J'ai ajouté des stop et des takeovers automatiques à ma méthode. Lorsque vous placez un ordre en suspens, il vous suffit de définir des limiteurs et la méthode fera tout glisser au bon endroit :))

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   double takeprofit, stoploss;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing, Ask+Point*trailing-(OrderOpenPrice()-OrderStopLoss()), Ask+Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,Bid-Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid-Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,Bid+Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid+Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,Ask-Point*trailing-(OrderOpenPrice()-OrderStopLoss()),Ask-Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 
ToLik_SRGV:


J'ai ajouté un stop automatique et des takeovers à la méthode. Lors de la mise en place des ordres en attente, je définis les limiteurs une fois et ensuite la méthode elle-même entraîne tout au bon endroit :)))

Très, très utile ! Mais pas optimale. Nous devrions changer dynamiquement la prise. Pourquoi devons-nous suivre le marché ? Si nous définissons un ordre en attente et que le prix s'est éloigné - une correction, par exemple... Que faisons-nous ? Faut-il attendre que le prix remonte ? Ou supprimer la commande ? Ne serait-il pas mieux de faire ça...

Imaginons une situation où le marché a une faible volatilité mais une tendance constante à la hausse. Le prix s'est lentement éloigné de l'ordre SELLSTOP en attente vers le haut. Une position BUY ouverte a déjà été élaborée et fermée à profit. Nous attendons que la volatilité du marché augmente, et dès qu'elle dépasse un certain seuil, nous passons un ordre limite au prix. Ainsi, nous attrapons la correction qui a commencé et le Limiter fonctionne non pas comme une position de blocage mais comme une source de revenu supplémentaire. Si nous ne l'avions pas déplacée, la correction aurait pu l'atteindre, la toucher et finir. Dans ce cas, nous aurions une position de lota Sell dans une tendance à la hausse.

Une telle excursion dans un safari tendance...

Si nous avons des TP dynamiques, alors en déplaçant un ordre en attente sur le marché et en tenant compte d'une forte volatilité (ici, elle sera plus importante que pour une faible volatilité), nous avons plus de chances de tirer profit d'une correction que dans le cas de TP statiques. De toute façon, si nous n'avons pas fermé sur le take, le chalut fera son travail et nous ne perdrons que le profit manqué....

Ugh... Cela fait longtemps que je n'ai pas cliqué autant sur le clavier...

La suggestion s'ensuit donc d'elle-même. Pour faire en passant les paramètres de la fonction aussi TimeFrame. Et sur cette base, calculez la prise à partir des valeurs ATR.

J'ai expérimenté pendant un certain temps et mes recherches pour M5 TF ont conduit à la conclusion que le take profit optimal selon ATR est calculé avec ATR*45000, et je l'ai fait pour mes calculs. À ces valeurs, le marché " attrape " presque toujours la prise à temps :

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }

Bien sûr, la fonction n'est pas terminée, mais elle me suffit pour les tests (je teste la M5 pour l'instant)... A propos, avec la valeur d'entrée = 1, cela donne une assez bonne distance pour le réglage des ordres en attente.

Ce serait bien de le voir dans votre fonction... :)

Merci quand même - c'est assez satisfaisant compte tenu de mes modifications juste pour obtenir ce qui précède....
ZS... il serait bien d'ajouter des couleurs pour les icônes de modification... (en réalité, je les ai déjà ajoutés)...

 

Voici une question : comment la CB gère-t-elle un grand nombre de transactions? Mon conseiller expert ouvre des positions toutes les 29 minutes (une seule stratégie sur cinq). Puis, lorsque les fonds propres augmentent de cinq pour cent, ils sont tous fermés ensemble. L'essentiel est que le solde augmente de cinq pour cent tous les trois à cinq jours.

Je me demande si la Colombie-Britannique peut prétendre à ce genre d'échanges.

Raison: