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

 
Dimka-novitsek:
Je ne peux pas organiser une boucle, X et Y sont toujours égaux à 0.

D'abord, débarrassez-vous des déchets dans votre esprit.

Faites en sorte que votre code soit agréable et structuré.

Et ne soyez pas avide de commentaires.

 

Oui. Bien sûr.

Je sélectionne d'abord les ordres avec le numéro magique requis et sur cette paire de devises. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Puis la boucle for( i=OrdersTotal();i==0;i--) dans laquelle je sélectionne les ordres comme ceci OrderSelect(i,SELECT_BY_POS ) ; et ensuite je compte combien d'ordres comme OP_SELLSTOP

S'il n'y a pas d'ordre, alors on ouvre un ordre du type d'ordre qui n'existe pas. La variable X dans la boucle supérieure et la variable Y dans la boucle inférieure sont utilisées pour compter les commandes du type nécessaire. Les deux boucles ont la même structure et le même objectif.

J'ai déjà écrit avec des explications, mais ici papa est venu, a appelé, a apporté du lait, du thé et du halva, et je n'ai pas envoyé de message, je suis allé faire pipi, et mon père a effacé le message non envoyé, a dit, mais quoi, tu pourrais écrire dans une autre fenêtre du moteur de recherche ? Je me demandais ce qu'était la pâte d'ortie. J'ai un peu flippé et je l'ai envoyée sans presque aucune explication.

Eh bien, X et Y sont toujours 0. La boucle for ne doit pas fonctionner. Je ne comprends pas ce qui peut ne pas fonctionner du tout, à cause de cela les ordres s'ouvrent 2 fois sur chaque tick.


 
Dimka-novitsek:

Oui. Bien sûr.

Je sélectionne d'abord les ordres avec le numéro magique requis et sur cette paire de devises. if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) {

Puis la boucle for( i=OrdersTotal();i==0;i--) dans laquelle je sélectionne les ordres comme ceci OrderSelect(i,SELECT_BY_POS ) ; et ensuite je compte combien d'ordres comme OP_SELLSTOP

S'il n'y a pas d'ordre, alors on ouvre un ordre du type d'ordre qui n'existe pas. La variable X dans la boucle supérieure et la variable Y dans la boucle inférieure sont utilisées pour compter les commandes du type nécessaire. Les deux boucles ont la même structure et le même objectif.

J'ai déjà écrit avec des explications, mais ici papa est venu, a appelé, a apporté du lait, du thé et du halva, et je n'ai pas envoyé de message, je suis allé faire pipi, et mon père a effacé le message non envoyé, a dit, mais quoi, tu pourrais écrire dans une autre fenêtre du moteur de recherche ? Je me demandais ce qu'était la pâte d'ortie. J'ai un peu flippé et je l'ai envoyée sans presque aucune explication.

Eh bien, X et Y sont toujours 0. La boucle for ne doit pas fonctionner. En bref, je ne comprends pas du tout ce qui pourrait ne pas fonctionner ici, cela provoque l'ouverture de 2 ordres sur chaque tick.


C'est exactement ça, les boucles for ne font pas ce dont vous avez besoin.

Vous avez le résultat suivant : for( i=OrdersTotal();i==0;i--)

1) S'il y a 0 ordre, la boucle sera exécutée 1 fois. Dans ce cas, il sélectionnera l'inconnu et fera l'inconnu avec lui =)

2) S'il y a plus de 0 commande, la boucle ne démarrera pas du tout, car la condition "i==0" n'est pas remplie.

 
Merci ! !! Je vais relire la référence dans un instant !
 
Oui ! Merci !!!
 
Ds tu sais, je n'y arrive pas, tout est pareil.
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
 for ( i=OrdersTotal();i>0;i--){Alert ("i", i); OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+-------------------------------------------
Dans l'aide, il est dit

L'expression2 est une vérification de la condition de fin de boucle. S'il est vrai, l'opérateur du corps de la boucle for est exécuté.

etc. J'ai tout corrigé et rien n'a changé..j'ai aussi essayé de mettre i=5 au lieu de i=OrdersTotal(), rien n'a changé, la boucle ne fonctionne pas.
 
Dimka-novitsek:
Le texte d'aide dit

L'expression2 est une vérification de la condition de fin de boucle. S'il est vrai, l'opérateur du corps de la boucle for est exécuté.

etc. J'ai tout corrigé et rien n'a changé..j'ai aussi essayé de mettre i=5 au lieu de i=OrdersTotal(), rien n'a changé, la boucle ne fonctionne pas.

Exact, la boucle n'arrive pas à la boucle.

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i>0;i--){Alert ("i", i);

Vous avez écrit : "Si le symbole de l'ordre (quel ordre ? il y en a beaucoup... ou aucun) est égal à l'ordre actuel et que sa magie (quel ordre ?) est égale à 1000, alors exécutez la boucle".

et vous devez : "démarrer une boucle. Dans celui-ci : 1) sélectionnez une commande. 2) et si symbole =... et magie =1000, alors X++ ;"

 

Certains DCs de comptes réels attribuent toutes sortes de préfixes comme "." ou "FXF" aux noms des symboles.

Comment puis-je utiliser ces préfixes ?

Je l'ai fait de cette façon :

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -ne fonctionne pas

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -Cela ne fonctionne pas comme ça non plus.

Le résultat est que je n'obtiens que FXF au lieu de AUDCADFXF.

Pouvez-vous me dire comment mettre cela en œuvre ?
 
pusheax:

Certains DCs de comptes réels attribuent toutes sortes de préfixes comme "." ou "FXF" aux noms des symboles.

Comment puis-je utiliser ces préfixes ?

J'ai fait ça :

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -ne fonctionne pas

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -Cela ne fonctionne pas comme ça non plus.

Le résultat est que je n'obtiens que FXF au lieu de AUDCADFXF.

Pouvez-vous me dire comment mettre cela en œuvre ?

Eh bien, c'est comme ça que ça marche à la volée :

#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD", "EURUSD"};

int init()
{
   for (int i = 0; i < ArraySize(SymbolsTrade); i++)
      SymbolsTrade[i] = SymbolsTrade[i] + DEF_SPEC;
 

Je l'ai, je vais le faire...

De plus, la condition ne fonctionne pas.

OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}Alert ("Y", Y);}
Raison: