[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 484

 

Des paramètres incorrects ont été envoyés à la fonction de transaction, par exemple un symbole incorrect, une transaction non identifiée, une tolérance de prix négative, un numéro de ticket inexistant, etc. Vous devez changer la logique du programme.


Essayez le deuxième paramètre pour mettre OrderOpenPrice() au lieu de zéro

 
sergeev:

prenez l'habitude d'imprimer tous les paramètres qui peuvent être pertinents pour l'erreur.

si (!OrderModify(...)) { Print(GetlastError()+.... Liste de paramètres OrderModify ) ; }



Oui, c'est une bonne habitude. Merci.))

FOReignEXchange 03.07.2011 18:35

Essayez le deuxième paramètre au lieu de zéro pour mettre OrderOpenPrice()

Oui, c'est vrai. )) Et pour une raison quelconque, j'étais convaincu que l'on ne peut pas définir des paramètres que l'on n'a pas besoin de modifier, car cela entraînerait une autre erreur. Existe-t-il quelque chose de similaire à ce dont je parle ?

Quelque chose comme ça est fixé dans mon esprit :

La fonction essaie de changer le paramètre à la même valeur.

 
tol64:


Et pour une raison quelconque, j'étais convaincu que l'on ne peut pas définir des paramètres que l'on ne veut pas modifier, car cela entraînerait une autre erreur. Y a-t-il quelque chose de similaire à ce dont je parle ?

Une telle chose est fixée dans la tête :

La fonction essaie de changer le paramètre à la même valeur.


Vous pourriez modifier un seul paramètre et laisser le reste inchangé et écrire partout OrderOpenPrice(), OrdsrStopLoss() etc.
 
Bonjour ! Est-ce que quelqu'un a un exemple de chalutage à partir d'un certain niveau de prix avec un certain pas ? Merci !
 

Voici une autre question que je me pose. Sur l'exemple de code que j'ai donné ci-dessus (tol64 03.07.2011 18:20).

Le programme ne synchronise pas toujours le stop loss de différentes positions. C'est-à-dire que la position est sélectionnée, la condition est remplie, elle est également enregistrée dans le journal, mais le stop loss n'est pas modifié.

Dans l'image ci-dessus, le stop loss pour la position avec le ticket 4 doit être modifié et fixé à la même valeur que pour la position avec le ticket 1. Le programme atteint ce point avec l'impression, mais la suite de l'exécution semble être bloquée.

   for(count = 0; count < OrdersTotal(); count++)
      {  
         if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 
            Print("Ticket: ",OrderTicket(),", Type: ",OrderType(),", Magic: ",OrderMagicNumber(),", StopLoss: ",OrderStopLoss());

         double Op_Price = NormalizeDouble(OrderOpenPrice(),Digits);
         double Stp_Loss = NormalizeDouble(OrderStopLoss(),Digits);
         
         if(OrderMagicNumber() == Magic_SP01)
            {  if(OrderType() == OP_SELLSTOP)
                  {  if(Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(),0,0,DeepPink);  }

                     if(!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print("Условие не выполняется!");  else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
                           Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
                  }
               if(OrderType() == OP_SELL)
                  {  if(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);  }
                  }
            }

         ...

Car la variante, dans laquelle la condition n'est pas remplie, n'est pas non plus enregistrée. J'ai essayé tant de combinaisons différentes, mais aucune n'a fonctionné. Aidez-moi, s'il vous plaît.

 

Et ici.

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

N'est-ce pas la façon de faire ?

 if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange:

Et ici.

N'est-ce pas la façon de faire ?


Non, il ne le fait pas. Il retourne un bool de toute façon.
 
tol64:

Voici une autre question que je me pose. Sur l'exemple de code que j'ai donné ci-dessus (tol64 03.07.2011 18:20).

Le programme ne synchronise pas toujours le stop loss de différentes positions. C'est-à-dire que la position est sélectionnée, la condition est remplie, elle est également enregistrée dans le journal, mais le stop loss n'est pas modifié.

Dans l'image ci-dessus, le stop loss pour la position avec le ticket 4 doit être modifié et fixé à la même valeur que pour la position avec le ticket 1. Le programme atteint ce point avec l'impression, mais la suite de l'exécution semble être bloquée.

Car la variante, dans laquelle la condition n'est pas remplie, n'est pas non plus enregistrée. J'ai essayé tant de combinaisons différentes, mais aucune n'a fonctionné. J'aimerais que vous m'aidiez.


Print() pour sortir la valeur de la variable global_trailing_SP directement dans la fonction que vous avez fournie.

Où lisez-vous la valeur de cette variable ?

Et remplacez le zéro (en surbrillance) dans le code

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink)

Vers OrderTakeProfit()

 
FOReignEXchange:

A quoi sert cette condition alors, s'il n'y a pas de condition ? Et les données de la commande ne sont alors pas utilisées.


Alors dites-moi quel code est le meilleur

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) 

l'écrire comme :

if(!OrderSelect(count,SELECT_BY_POS,MODE_TRADES)) continue;
 
abolk:


et dites-moi quel est le meilleur code

l'écrire comme :


Je ne comprends pas ? Je regarde juste dans l'aide, là OrderSelect() utilise une condition. Je n'ai pas vu d'endroit sans vrai.

If est un opérateur de condition. Et il devrait y avoir une condition entre parenthèses. Cela me semble plus logique de cette façon. Même s'il n'y a pas de différence.