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

 

Résolu de cette façon :

int nday;

 if(OrdersTotal()==0)

 {

  double lot=(AccountBalance()/ MinLot)*0.01;

  if(center>Ask && pokupaem>0 && prodaem<1 && prodaem1<1 && SelBuyDaily==Vhodim1 && proverka==1)

  {

   x=OrderSend(Symbol(),OP_BUY,lot,Ask,3,0,0,Komment,Magic,0,Blue);

   nday=DayOfYear();

  }

  if(OrderSelect(x,SELECT_BY_TICKET)==true)

 {

  if((OrdersTotal()>0 && OrderCloseTime()==0 && OrderType()==OP_BUY) && (nday<DayOfYear() || OrderOpenTime()<iTime(NULL,0,0)))

  {

   if(pokupaem>0 && prodaem<1 && Ask+atr<OrderOpenPrice() && proverka==1)

   {

    x=OrderSend(Symbol(),OP_BUY,OrderLots()*Ml,Ask,3,0,0,Komment,Magic,0,Blue);

    nday=DayOfYear();

   }

  }

 }

 

Pour la première fois, j'ai essayé d'écrire une ouverture de position dans la boucle, car je n'exclus pas d'ouvrir sur d'autres paires également.

Mais pour une raison quelconque, rien ne s'ouvre dans la boucle ! Faut-il vraiment une boucle spéciale pour les ouvrir ? C'est vrai, je l'ai seulement vérifié dans le testeur !

J'en ai écrit un normal :

    optal = OrdersTotal();
    for(op = optal-1; op >= 0; op--) 
    { 
      if(OrderSelect(op,SELECT_BY_POS,MODE_TRADES))
      { 
        if(OrderSymbol() != Symbol()) continue;
        if(OrderMagicNumber() != magic) continue; 
// и т.д.

Qu'est-ce qui ne va pas dans l'ouverture des ordres, des positions ? Merci pour votre aide !

 
borilunad:

Pour la première fois, j'ai essayé d'écrire une ouverture de position dans la boucle, car je n'exclus pas d'ouvrir sur d'autres paires également.

Mais pour une raison quelconque, rien ne s'ouvre dans la boucle ! Faut-il vraiment une boucle spéciale pour les ouvrir ? C'est vrai, je l'ai seulement vérifié dans le testeur !

J'en ai écrit un normal :

Qu'est-ce qui ne va pas dans l'ouverture des ordres, des positions ? Merci pour votre aide !



Tant qu'il n'y a pas de commandes, le cycle ne démarre pas. Quel est l'intérêt du cycle en général ?
 
borilunad:

Pour la première fois, j'ai essayé d'écrire une ouverture de position dans la boucle, car je n'exclus pas d'ouvrir sur d'autres paires également.

Mais pour une raison quelconque, rien ne s'ouvre dans la boucle ! Ai-je vraiment besoin d'une boucle spéciale pour ouvrir les postes !

J'en ai écrit un normal :

Qu'est-ce qui ne va pas dans l'ouverture des ordres, des positions ? Merci pour votre aide !

La boucle est exécutée plus rapidement que le thread commercial n'est libéré. C'est pourquoi nous devons ajouter une boucle de retardement while( !IsTradeContextBusy()) Sleep(100) ;
 
valeryk:


La boucle ne commencera pas tant qu'il n'y aura pas de commandes ! Quel est le but de la boucle ?


Merci ! C'est ce que je pensais ! Ainsi, si, par exemple, je veux ouvrir sur la première paire, il suffit sans boucle, mais avec if(OrdersTotal == 0). Et quand je veux ouvrir une autre commande de la même ou d'une autre paire, j'ai besoin d'une boucle, et ça marche ! Je vais l'essayer maintenant !

Je suppose que je vais devoir changer beaucoup de choses dans l'ouverture, mais en principe je comprends comment je dois faire ! Merci !

 

Une logique pernicieuse, en fait. Je n'ai pas regardé de près au début..... Pourquoi avons-nous besoin de OrdersTotal() lors de l'ouverture des commandes ?

Eh bien, si nous devons ouvrir plusieurs commandes dans la boucle, la boucle doit être organisée en fonction du nombre de commandes nécessaires. Et si nous devons soutenir constamment ce nombre, nous devons utiliser d'autres règles.

Par exemple, nous devons ouvrir 7 ordres.

for(int i = 0; i < 7; i++)
{
while(!IsTradeContextBusy()) Sleep(100); // Ожидание освобождения торгового потока

int ticket = OrderSend(Symbol(), ..............); // Открытие ордера
if(ticket > 0) Print("Открылся ордер № ", i, " ticket - ", ticket); // Проверка пропусков при открытии.
}
Mais il s'agit d'une variante courte. Une bonne idée serait d'ajouter un traitement des erreurs lors de l'ouverture des commandes.
 
AlexeyVik:

Une logique pernicieuse, en fait. Je n'ai pas regardé de près au début..... Pourquoi avons-nous besoin de OrdersTotal() lors de l'ouverture des commandes ?

Eh bien, si nous devons ouvrir plusieurs commandes dans la boucle, la boucle doit être organisée en fonction du nombre de commandes nécessaires. Et si nous devons soutenir constamment ce nombre, nous devons utiliser d'autres règles.

Par exemple, nous devons ouvrir 7 commandes

Mais il s'agit d'une variante courte. Une bonne idée serait d'ajouter un traitement des erreurs lors de l'ouverture des commandes
!

Merci ! Mais j'ai besoin d'une boucle pour que les chouettes ne voient pas d'autres couples ! Je m'occuperai des erreurs plus tard ! J'étais même heureux lorsque l'erreur 130 est apparue dans le journal, cela signifie que ça fonctionne ! Les erreurs sont traitées dans mes fonctions externes! Merci encore !
 
borilunad:

Merci ! Mais j'ai besoin d'une boucle pour que les hiboux ne voient pas d'autres couples ! Je m'occuperai des erreurs plus tard ! J'étais même content lorsque l'erreur 130 est apparue dans le journal, donc ça marche ! Les erreurs sont traitées dans mes fonctions externes ! Merci encore !
C'est le caractère pernicieux de la logique. Le hibou ne peut pas ne pas voir les autres couples. Il peut et doit être contraint de ne pas traiter les ORDRES d'autres symboles qui sont déjà OUVERTS. Dans la fonction OrderSend(............), vous devez écrire un certain Symbol() ou dans un format texte, par exemple "EURUSD"... tout ce que vous mettez là sera ouvert. Ou essayer d'ouvrir...
 
AlexeyVik:

Une logique pernicieuse, en fait. Je n'ai pas regardé attentivement au début..... Pourquoi avons-nous besoin de OrdersTotal() lors de l'ouverture des commandes ?

Eh bien, si nous devons ouvrir plusieurs commandes dans la boucle, la boucle doit être organisée en fonction du nombre de commandes nécessaires. Et si nous devons constamment soutenir ce nombre, nous devons utiliser d'autres règles.

Par exemple, nous devons ouvrir 7 commandes

Mais il s'agit d'une variante courte. Une bonne idée serait d'ajouter un traitement des erreurs lors de l'ouverture des commandes.

C'est un bon moyen de vérifier si nous pouvons ouvrir jusqu'à huit ordres en un seul tick. On nous les a promis, mais personne ne les a encore vérifiés.
 
Vinin:

Un bon moyen de tester la possibilité d'ouvrir jusqu'à huit ordres en un seul tick. On nous les a promis, mais personne ne les a encore vérifiés.

Je ne comprends pas...