Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 375

 
Falx:

Bonne journée à tous !

Veuillez me donner une commande pour que le robot n'ouvre pas plus d'un ordre par bougie.

Même s'il a pris sa prise sur cette bougie - pour ne pas ouvrir l'ordre suivant sur la même bougie.

Il en ressort que si les conditions des indicateurs sont remplies - ouvrez une transaction.

Lorsqu'une transaction sur la prise est fermée, elle ouvre immédiatement une nouvelle transaction sur le même chandelier, et ici elle n'est plus nécessaire et me crée des problèmes.

Je pense qu'il est important de donner quelques informations en retour.

Il a besoin d'un accord strict, donc 1 bougie - 1 accord.

Merci d'avance !

Lemoment de l'ouverture d'une position, le moment de la fermeture de la position - la bougie à laquelle ce moment et le moment de l'ouverture de cette bougie.
 
Falx:

Bonne journée à tous !

Veuillez me donner une commande pour que le robot n'ouvre pas plus d'un ordre par bougie.

Même s'il a pris sa prise sur cette bougie - pour ne pas ouvrir l'ordre suivant sur la même bougie.

Il en ressort que si les conditions des indicateurs sont remplies - ouvrez une transaction.

Lorsqu'une transaction sur la prise est fermée, elle ouvre immédiatement une nouvelle transaction sur le même chandelier, et ici elle n'est plus nécessaire et me crée des problèmes.

Je pense qu'il est important de donner un feedback.

Il a besoin d'un accord strict, donc 1 bougie - 1 accord.

Merci d'avance !

Vous pouvez également utiliser le drapeau.

Déclarer une variable statique bool ou une variable globale, qu'elle soit flag. Ordre ouvert - flag = true, un nouveau chandelier ouvert - flag = false et ajouter ce flag à la condition d'ouverture de l'ordre.

 
Alexey Viktorov:

Vous pouvez également utiliser un drapeau.

Déclarer une variable statique bool ou une variable de niveau global, qu'elle soit flag. Ordre ouvert - drapeau = vrai, une nouvelle bougie ouverte - drapeau = faux et ajouter ce drapeau à la condition d'ouverture de l'ordre.

Le drapeau doit être sauvegardé dans le terminal global et restauré lors de son redémarrage.
 
Artyom Trishkin:
Le drapeau doit être sauvegardé dans le terminal global et restauré lors de son redémarrage.

Cela dépend de la période sur laquelle porte la transaction et de la possibilité de redémarrer le terminal dans une barre pour ouvrir un ordre et redémarrer le terminal.

Je n'aime pas GV et j'essaie de m'en passer. Lorsque vous exécutez un EA, vous devez toujours recueillir toutes les informations sur les ordres ouverts, alors pourquoi ne pas rétablir la valeur du drapeau lorsque vous l'exécutez ? C'est une option. La deuxième variante est que la valeur initiale du drapeau interdit l'ouverture des ordres et que seule la barre suivante donnera l'autorisation. Ainsi, même si nous avons ouvert et redémarré l'EA sur la barre actuelle, le drapeau nous interdira de toute façon d'ouvrir des ordres jusqu'à la barre suivante.

Si vous donnez de tels conseils avec autant de subtilité, vous n'aurez à réfléchir à rien. Le nombre de questions va donc augmenter en conséquence... Pourquoi décider soi-même de quelque chose... Demandez sur le forum et vous obtiendrez une version fonctionnelle. Tout ce que vous aurez à faire est de mettre le produit sur le marché...

 
Alexey Viktorov:

Cela dépend de la période sur laquelle porte la transaction et de la possibilité de redémarrer le terminal dans une barre pour ouvrir un ordre et redémarrer le terminal.

Je n'aime pas GV et j'essaie de m'en passer. Lorsque vous démarrez un EA, vous devez de toute façon rassembler toutes les informations sur les ordres ouverts, alors pourquoi ne pas rétablir la valeur du drapeau au démarrage ? C'est une option. La deuxième variante est que la valeur initiale du drapeau interdit l'ouverture des ordres et que seule la barre suivante donnera l'autorisation. Ainsi, même si un nouvel ordre est ouvert sur la barre actuelle et que nous redémarrons l'EA, le drapeau interdira de toute façon l'ouverture d'ordres jusqu'à la barre suivante.

En donnant des conseils avec autant de subtilités, nous n'aurons à réfléchir à rien. Par conséquent, le nombre de questions peut augmenter. Pourquoi décider soi-même de quelque chose... Demandez sur le forum et vous obtiendrez une version fonctionnelle. Et la seule chose qui reste à faire est de mettre le produit sur le marché...

:)
J'ai l'habitude de regarder droit devant moi.
Pour moi, justement parce que les drapeaux doivent encore être restaurés, il vaut mieux regarder la barre d'ouverture de la position, et danser autour, et ne pas s'embêter avec les drapeaux et leur stockage.
 
Artyom Trishkin:
:)
J'ai l'habitude de regarder droit devant moi.
Je pense qu'il est préférable de regarder la barre d'ouverture d'une position, puis de commencer à danser autour d'elle, sans avoir à se soucier des drapeaux et de leur stockage.

C'est la même raison pour laquelle on aime des femmes différentes.

Quelle différence cela fait-il, le drapeau ou le moment de l'ouverture d'une position ? Peu importe comment vous le présentez, vous devez toujours vérifier quelque chose...
 

Bonjour ! Pouvez-vous me dire comment retourner le nombre de derniers ordres perdants, après les ordres profitables ?

Voici mon code, qu'est-ce qui ne va pas ?

int GetProfitLoss()// Perte sur les ordres fermés (nombre de derniers ordres perdants)

{

int Loss = 0 ;

datetime lastCloseTime = 0 ;

int cnt = OrdersHistoryTotal() ;

for(int i=0 ; i < cnt ; i++)

{

si(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

si (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

{

lastCloseTime = OrderCloseTime() ;

}

si (OrderProfit()<0)

{

Perte ++ ;

}

si(OrderProfit()>0)

{

break ; // Sortie de la boucle au premier rentable rencontré }

}

}

}

}

retour(Perte) ;

}

 
Falx:

Bonne journée à tous !

Veuillez me donner une commande pour que le robot n'ouvre pas plus d'un ordre par bougie.

Même s'il a pris sa prise sur cette bougie - pour ne pas ouvrir l'ordre suivant sur la même bougie.

Il en ressort que si les conditions des indicateurs sont remplies - ouvrez une transaction.

Lorsqu'une transaction sur la prise est fermée, cela ouvre immédiatement une nouvelle transaction sur le même chandelier, et là, c'est déjà inutile pour moi et cela crée des problèmes.

Je pense qu'il est important de donner un feedback.

Il a besoin d'un accord strict, donc 1 bougie - 1 accord.

Merci d'avance !

Fonction NumberOfBarCloseLastPos().

Cette fonction renvoie le numéro de barre de la dernière position à fermer, ou-1. La sélection des postes à prendre en compte est fixée par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de cet instrument. La valeur par défaut -NULL indique l'instrument de marché actuel.
  • tf- Période de temps. La valeur par défaut -0 indique le délai actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

La fonction NumberOfBarOpenLastPos().

Cette fonction renvoie le numéro de barre de la dernière position ouverte ou-1. La sélection des postes à prendre en compte est définie par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut -NULL indique l'instrument de marché actuel.
  • tf- Période de temps. La valeur par défaut0 correspond à l'horizon temporel actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.

Ensuite, à l'aide de ces fonctions, vérifiez la condition dont vous avez besoin.

 

Aidez-moi, s'il vous plaît.

Je dois ajouter la fonction suivante à mon robot :

Après l'ouverture d'une transaction, dans 40 secondes, si le profit est supérieur à 15 pips, la transaction est fermée instantanément, s'il est inférieur, le takeprofit est déplacé au niveau de profit de 15 pips.

Merci d'avance.

 
Vladimir Zubov:

La fonction NumberOfBarCloseLastPos().

Cette fonction renvoie le numéro de clôture de la barre de la dernière position ou-1. La sélection des positions à prendre en compte est définie par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de cet instrument. La valeur par défaut -NULL indique l'instrument de marché actuel.
  • tf- Période de temps. La valeur par défaut -0 indique le délai actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.

La fonction NumberOfBarOpenLastPos().

Cette fonction renvoie le numéro de barre de la dernière position ouverte ou-1. La sélection des postes à prendre en compte est définie par des paramètres externes :

  • sy- Nom de l'instrument de marché. Si ce paramètre est défini, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut -NULL indique l'instrument de marché actuel.
  • tf- Période de temps. La valeur par défaut0 correspond à l'horizon temporel actuel.
  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut-1 signifie une position quelconque.
  • mn- Identificateur de position, MagicNumber. La valeur par défaut de-1 signifie n'importe quel identifiant.

Utilisez ensuite ces fonctions pour vérifier la condition dont vous avez besoin.


Merci beaucoup !

Je vais m'en occuper ! !!