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

 

ouiatztek, je m'excuse pour l'inexactitude de la description :

1. Parce qu'avant l'intersection avec la MA, il s'agissait d'ordres d'achat-stop et Ur1 Ur2 Ur3 ne sont identifiés qu'après le franchissement de la MA par le prix.

2. et respectivement les recherches for-cycle mentionnées ci-dessus parmi tous les ordres d'achat (puisqu'il y a 3 ordres sell-stop supplémentaires et qu'ils rampent sur une MA différente à chaque bougie)

 
vadimvborisov:


ouiatztek, je m'excuse pour l'inexactitude de la description :

1. Parce qu'avant l'intersection avec la MA, il s'agissait d'ordres d'achat-stop et Ur1 Ur2 Ur3 ne sont identifiés qu'après le franchissement de la MA par le prix.

2. et respectivement les recherches for-cycle mentionnées ci-dessus parmi tous les ordres d'achat (puisqu'il y a 3 ordres sell-stop supplémentaires et qu'ils rampent sur une MA différente à chaque bougie)

1. Tu as dit :
Советник открывает (на основании пересечения с MA ) несколько (3) рыночных ордеров

Les ordres stop deviennent négociables au moment où ils sont franchis par le prix, la MA n'a rien à voir avec cela.
Ok, c'est à vous de décider comment votre EA fonctionne.

2. Quel est l'objectif - ?
 bool mod_Buy1 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur1,0,clrNONE);
 bool mod_Buy2 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur2,0,clrNONE);
 bool mod_Buy3 = OrderModify (OrderTicket(???),OrderOpenPrice (), NULL,Ur3,0,clrNONE);

C'est-à-dire que pour chaque cycle du "pour", vous voyez une commande, et non les trois en même temps.
 

atztek, 1. J'ai déjà corrigé mon premier message.

2. Assignation debool mod_Buy1 = Modifier l'ordre (OrderTicket (le premier ordre BUY parmi les précédents), ne pas changer le prix d'ouverture, ne pas changer le StopLoss, TakeProfit est pris de Ur1,0,clrNONE) ;

" En d'autres termes, dans chaque boucle du " for ", vous voyez un ordre, mais pas les trois en même temps.

C'est là le problème, je n'arrive pas à trouver comment passer ces 3 ordres par ticket et définir les niveaux de Takeprofit appropriés pour chacun d'eux(Ur1 Ur2 Ur3).

 
vadimvborisov:

atztek, 1. J'ai déjà corrigé mon premier message.

2. Assignation debool mod_Buy1 = Modifier l'ordre (OrderTicket (le premier ordre BUY parmi les précédents), ne pas changer le prix d'ouverture, ne pas changer le StopLoss, TakeProfit est pris de Ur1,0,clrNONE) ;

" En d'autres termes, dans chaque boucle du " for ", vous voyez un ordre, mais pas les trois en même temps.

C'est là le problème, je n'arrive pas à trouver comment passer ces 3 ordres par ticket et définir les niveaux de Takeprofit appropriés pour chacun d'eux(Ur1 Ur2 Ur3).


1) Soit je ne vous comprends pas, soit vous ne savez pas ce que vous voulez faire (ou comment cela fonctionne).
Même après avoir corrigé, vous parlez d'avoir des ordres stop et ensuite "après avoir franchi la MA" ils sont devenus des ordres de marché.
- Soit vous ouvrez des ordres de marché immédiatement (par exemple, "après avoir franchi la MA"), soit vous ouvrez des ordres stop qui deviennent automatiquement des ordres de marché au moment où le prix les franchit.

2. Je vois que ce n'est pas une question de correction, mais la logique de votre EA
(il y a beaucoup de questions, par exemple, avez-vous d'autres ordres ouverts en ce moment, pourquoi les ordres sont sélectionnés sur la base du ticket, et non des positions, etc.)
Ne commencez pas avec 3 ordres à la fois, commencez par un exemple simple avec un seul ordre, et assurez-vous que le conseiller expert fonctionne sans erreur. Puis compliquez la situation en ajoutant 3 commandes.
 

1) oui exactement -"vous ouvrez des ordres stop qui deviennent automatiquement des ordres de marché au moment où le prix les franchit. "

2) Il n'y a pas d'autres ordres (de marché) au moment où les ordres limités sont convertis en ordres de marché, seulement des ordres limités. Peut-être pouvez-vous également sélectionner par poste et non par ticket - cela ne me dérange pas. Ok. considérons la situation avec deux commandes. car je peux m'occuper d'une seule moi-même.....

 
vadimvborisov:

1) oui exactement -"vous ouvrez des ordres stop qui deviennent automatiquement des ordres de marché au moment où le prix les franchit. "

2) Il n'y a pas d'autres ordres (de marché) au moment où les ordres limités sont convertis en ordres de marché, seulement des ordres limités. Peut-être pouvez-vous également sélectionner par poste et non par ticket - cela ne me dérange pas. Ok. considérons la situation avec deux commandes. car je peux m'occuper d'une seule moi-même.....

Les limites sont-elles déjà arrivées ?
Très bien, allez-y. Quand vous en aurez une, le reste deviendra clair.
 
vadimvborisov:

1) oui exactement -"vous ouvrez des ordres stop qui deviennent automatiquement des ordres de marché au moment où le prix les franchit. "

2) Il n'y a pas d'autres ordres (de marché) au moment où les ordres limités sont convertis en ordres de marché, seulement des ordres limités. Peut-être pouvez-vous également sélectionner par poste et non par ticket - cela ne me dérange pas. Ok. considérons la situation avec deux commandes. car je peux m'occuper d'une seule moi-même.....

C'est exactement ce dont nous avons besoin.

int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 

1. Désolé, je voulais dire les ordres d'arrêt.

2. avec 1, tout fonctionne. mais avec deux ou plus, je n'arrive pas à comprendre.....

 

Salutations,AlexeyVik

bool mod_Buy1 = Modifier l'ordre ( OrderTicket(la i-ème BUY de celles récupérées )

et pour les deux autres BUY's comment ? De la même manière ?

////////////////////////////
 int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy2 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy3 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 
vadimvborisov:

Salutations,AlexeyVik

bool mod_Buy1 = Modifier l'ordre ( OrderTicket(la i-ème BUY de celles récupérées )

et pour les deux autres BUY's comment ? De la même manière ?

Notez la boucle dans mon exemple. Dans la boucle, tous les ordres sont vérifiés par type, également vérifiés par symboles et par magie et il serait bien de vérifier OrderStopLoss == 0 ou OrderTakeProfit == 0 selon ce qui est important, si l'ordre sans stop ou sans ordre d'enlèvement, afin de ne pas essayer de modifier l'ordre inutilement et de ne pas obtenir l'erreur 1.

Dans cette boucle, les commandes sont sélectionnées les unes après les autres, et si toutes les conditions sont remplies, elles sont envoyées pour être modifiées. Cela modifiera toutes les commandes nécessaires.

La deuxième variante : Si seulement 3 ordres ont été prévus, on peut déclarer, par exemple, les int tick_buy_1, tick_buy_2, tick_buy_3 au niveau des variables globales et enregistrer les ticks dans ces variables lors de l'ouverture de l'ordre. Nous pouvons alors sélectionner l'ordre par ticket, vérifier son type, si l'ordre est fermé ou non, et seulement ensuite, sans la boucle.

   bool mod_Buy1 = Модифицировать ордер ( tick_buy_1 );
   bool mod_Buy2 = Модифицировать ордер ( tick_buy_2 );
   bool mod_Buy3 = Модифицировать ордер ( tick_buy_3 );