Fonctions utiles de KimIV - page 89

 
Est-il possible d'ajouter dans votre Expert Advisor e-CloseByPercentProfit.mq4 pour fixer TP et SL sur la paire dans le graphique sur lequel il est installé ?
 

Bon après-midi à tous.

Question sur la fonction


//+------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                        |
//|  Описание : Возвращает количество позиций.      |
//+------------------------------------------------------------------+

int NumberOfPositions(string sy="", int op=-1, int mn=-1){
  int i, k=OrdersTotal(), kp=0;  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}  return( kp);}  
          

J'ai une contrepartie multi-devises. Les paires sont définies dans les paramètres externes. Avec son propre magicien (pour chaque paire).

Parmi les conditions d'entrée pour chaque instrument, il y a celle-ci :
if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых
//позиций по 1-му инструменту, 
OU (pour la deuxième paire)
if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых
//позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условия

Ce qui s'est passé, c'est que j'ai chargé les deux symboles hier - EURUSD, et ce matin j'ai constaté qu'une seule transaction s'est ouverte, bien qu'il semblait y avoir des signaux dans les deux cas.

Et puis ça m'est venu à l'esprit. Que la fonction

NumberOfPositions(string sy="", int op=-1, int mn=-1)
Il vérifie d'abord s'il existe une position ouverte pour un symbole. Et puis tout le reste.

En d'autres termes, si j'ai une position ouverte avec l'EA pour l'instrument EIRUSD, la deuxième position ne s'ouvrira pas même avec un autre magicien selon un algorithme différent.

S'il vous plaît, dites-moi si c'est vrai ou non ?

Ou bien je me trompe dans mon raisonnement ? ou bien la fonction évalue tous les critères unpar un ...


 

J'utilise souvent cette fonction, elle renvoie tout selon les paramètres d'entrée. Les éléments que la fonction parcourt sont triés séquentiellement en fonction des paramètres. Voyez par vous-même.

int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()== sy || sy=="") { //далее внутри символа
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op) { //далее внутри типа ордера
            if ( mn<0 || OrderMagicNumber()== mn) kp++; //внутри магика, и только здесь позиция учтена 
          }
        }
      }
    }
  }
  return( kp);
}
 

Cela signifie donc que mon EA ne sera pas en mesure d'ouvrir une deuxième position EURUSD, même avec un autre magicien, tant que la première position est ouverte ?

Apparemment, oui. Parce que même dans le testeur, il ne semble pas voir de positions qui se chevauchent.

//--------------------------------------------------------

 
Rita >> :

Cela signifie donc que mon EA ne sera pas en mesure d'ouvrir la deuxième position EURUSD, même si elle a un autre magicien, alors que la première position est ouverte ?

Exactement le contraire :)) Cela signifie que la fonction compte vos symboles et vos chiffres magiques séparément. C'est-à-dire que s'il existe une position ouverte sur EURUSD c Magic_1, alors NumberOfPositions("EURUSD", -1, Magic_2)==0 ; à moins qu'il n'existe une autre position sur EURUSD avec Magic_2, bien sûr.

En général, la fonction compte les positions ouvertes selon (sy && op && mn), c'est-à-dire que les positions seront comptées exactement avec ces paramètres. S'il n'y a pas de correspondance d'au moins un paramètre, l'ordre ne sera pas pris en compte par cette fonction, et il ne sera pas visible.

Imprimez les valeurs de la fonction dans Commentaire et vous pourrez voir en temps réel le nombre de commandes et si la fonction fonctionne correctement. Il est fort probable que la raison du dysfonctionnement de l'algorithme se trouve dans le code EA.

 
Ok. Je vais vérifier le code maintenant.
 
hope писал(а) >>

L'ajout d'une liaison au symbole dans l'appel de fonction n'est pas utile. Pourquoi compte-t-il le bénéfice de chaque position séparément (image ci-dessus) ?

Nah, je préfère vous offrir mon dessin...

...et un script...

 
KimIV писал(а) >>

Nah, je préfère vous offrir mon dessin...

...et un script...

Je me suis rendu compte que je suis un idiot... On ne peut pas obtenir des mamelles en ajoutant du bœuf et du lait.

 
KimIV писал(а) >>
Angela, le compilateur ne s'attendait pas à trouver ma définition de fonction à cet endroit précis. Cela signifie que quelque part au-dessus du code, il manque quelque chose. Il peut s'agir d'un point-virgule ou d'une accolade fermante. Quoi qu'il en soit, vérifiez bien le code.

J'ai compris, j'ai juste inséré ta fonction à l'intérieur de int start(), quand je l'ai mise à l'extérieur de int start(), tout a compilé. Le problème est différent, dans l'indicateur en mode visualisation dans le testeur, cette fonction ne reçoit pas de données de l'EA vers l'indicateur.

 
e-News-Lucky$.mq4

Lucky$ & KimIV

http://www.kimiv.ru

Bonjour Igor !

J'utilise votre Expert Advisor, il est très bon, j'ai essayé d'y attacher un indicateur via iCustom hier mais il ne l'a pas vu, comment le prescrire via iCustom? Je me demande quelles fonctions intégrées comme iHigh, iLow le voient sans aucun problème, mais il refuse de placer des ordres en attente via l'indicateur.

Je l'ai mis comme ceci pour iHigh et iLow de la barre du jour. Cette fonction fonctionne comme prévu, place des ordres en attente, mais ne veut pas placer des ordres en attente avec l'indicateur(((.... Je voudrais montrer le fragment de code sur la façon de placer des ordres en attente par l'indicateur dans cette EA ? L'indicateur peut être tout sauf un appel à la fonction iCustom.

Si vous avez un peu de temps, merci.

//глобальные переменные

double Hi_Bar;
double Lou_Bar;

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders() {
  Hi_Bar  = iHigh(Symbol(), PERIOD_D1, 0);
  Lou_Bar =  iLow(Symbol(), PERIOD_D1, 0);
  double ldStop=0, ldTake=0;
  int    spr=MarketInfo(Symbol(), MODE_SPREAD);
  double pAsk= Hi_Bar+( DistanceSet+ spr)*Point;
  double pBid= Lou_Bar- DistanceSet*Point;


Raison: