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

 
VAM_ 08.06.2010 18:48modifier | supprimer

Comment on coupe le son ? J'ai conduit jusqu'aux genoux blancs. Il existe de nombreuses fenêtres d'outils (33). Il n'y a pas d'EA. Juste le milieu et Zup. Je n'arrive pas à savoir d'où ça chante. Je vous supplie de m'aider. Service, les événements ont été. Les croix sur les événements n'aident pas. Il chante encore, le bâtard.

Techno:


l'étourneau peut s'asseoir dans la dinde ;)))

J'ai regardé le code - pas d'alertes nulle part ! Que faire ?
 
VAM_:

J'ai regardé le code - pas d'alertes nulle part ! Que faire ?

Contrôle sur PlaySound().
 
Comment puis-je faire en sorte qu'il soit possible d'attribuer différentes valeurs à une variable affectée globalement au moment de l'exécution lors de l'appel de différentes fonctions, et qu'elle les stocke ?
.

Je dois attribuer certaines valeurs à la variable Part, qui est définie globalement, pour la fermeture partielle d'une position et la passer comme paramètre à la fonction qui exécute la fermeture partielle de l'ordre. Cette variable est un simple diviseur. En d'autres termes, si la valeur est initialement fixée à 1, le lot est divisé par 1 et la position entière est fermée. Lorsque les conditions de transaction changent, cette variable prend de nouvelles valeurs et peut être égale à, par exemple, 1,5 ou 2, le lot de la position est alors divisé par ce nombre, et la fermeture partielle est effectuée. Un appel de fonction avec passage de paramètres ressemble à ceci textuellement :

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

Donc, malgré le fait que lorsque la fonction est appelée ...

TrailingPositionsTLE(561, 1, 2, 1);

... CloseMethod = 1 (fermeture partielle) est défini et Part = 2 est explicitement spécifié, la fonction passe sa valeur initiale = 1 qui a été définie globalement au lieu de la valeur Part spécifiée en cours de programme (par exemple 2)...

Comment puis-je vaincre cela ? Merci...

 
artmedia70: Lorsque les conditions commerciales changent, cette variable prend de nouvelles valeurs et peut être égale, par exemple, à 1,5 ou 2. Le lot de la position est alors divisé par ce nombre et une clôture partielle est effectuée.


Lorsque les conditions commerciales changent, changez votre variable de partie. Ou bien vous les avez dans un autre EA ? Dans ce cas, cette variable doit être lue en permanence, c'est à dire

int init()

{

.....

GlobalVariableSet("Part0",Part) ;

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0")) ;

...

}

 
Roger:

Lorsque les conditions commerciales changent, changez alors votre variable de partie. Ou bien vous les avez dans un autre EA ? Dans ce cas, cette variable doit être lue en permanence, c'est à dire

int init()

{

.....

GlobalVariableSet("Part0",Part) ;

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0")) ;

...

}

Non, la variable est dans le même EA. Il est défini globalement et les fonctions peuvent l'utiliser, mais sa valeur, si elle est modifiée à l'intérieur des fonctions, n'est pas renvoyée aux fonctions externes. Par conséquent, les fonctions voient leur valeur fixée initialement. Si je ne le règle pas au niveau global, alors les fonctions s'accouplent sur la variable non réglée...
 

Lorsque vous transmettez une variable à une fonction via son paramètre, la variable est transmise par valeur, ce qui signifie que la modification de la variable dans la fonction elle-même n'entraînera pas son écrasement.
Essayez de le passer par référence en insérant un "&" devant le nom du paramètre.

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

J'ai regardé le code - pas d'alertes nulle part ! Que faire ?

Dans l'onglet "Événements", décochez la case "Autoriser".

 

Bonjour chers professionnels.

J'aimerais vraiment écrire un EA qui ouvrirait deux ordres de vente et d'achat en même temps.

Ensuite, après un certain nombre de points (paramètre lim), l'ordre perdant serait fermé,

et un ordre rentable sera clôturé lorsque le prix aura chuté en dessous du prix maximum depuis l'ouverture de l'ordre.

(une sorte de trailing stop virtuel).

Dans l'agonie, j'ai créé ceci, mais cela ne fonctionne pas... ne fonctionne pas

Veuillez suggérer quelque chose

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
Comment faire en sorte qu'il soit possible d'attribuer différentes valeurs à une variable définie globalement au moment de l'exécution lors de l'appel de différentes fonctions et qu'elle les enregistre ?

deux façons

1. ajouter un ampersant à la fonction où la valeur est modifiée,

Par exemple, void function( double& Part ){}

alors, lorsqu'une valeur à l'intérieur de la fonction est modifiée, la nouvelle valeur retourne à l'endroit de l'appel.

2. retirer la variable de la liste des paramètres de la fonction, puisque la variable est définie globalement, sa valeur peut être modifiée à n'importe quel endroit du code sans la passer en paramètre...

Mais pour éviter toute confusion, la 1ère variante est préférable, afin de ne pas penser à ce qu'est cette variable, car il peut y avoir plusieurs de ces variables définies globalement (et dans une même fonction)...


J'ai parcouru le post, la réponse a déjà été donnée...

 
artmedia70:
mais sa valeur, modifiée à l'intérieur des fonctions, n'est pas renvoyée aux fonctions externes.


Montrez la fonction elle-même.

Si c'est void ClosePartPosBySelect(double Part), changez en

void ClosePartPosBySelect()