Fonctions utiles de KimIV - page 53

 
KimIV >> :

Fonction IIFc().

...

Vous essayez de rendre un opérateur ternaire manquant ?

Score, merci, avec mon habitude de mettre des accolades partout où je peux, ce sera très utile.

 
CMEPTHiK писал (а) >>
Je lisais le livre de V.Yakimkin. "Forex market - your way to success" et je suis tombé sur des lignes telles que "...differential from (DJI x Nikkei)..." Dites-moi, Igor, est-il possible de l'implémenter et de le sortir sous forme d'indicateur...

Le différentiel est la vitesse indiquée par l'indicateur ROC.

 

Igor, n'avez-vous pas dans votre coffre une fonction permettant de fermer toutes les positions en une seule fois, y compris la fermeture avec des contre-positions en tête ?

C'est à dire de fermer d'abord toutes les contre-positions, autant que possible, en tenant compte du décalage des lots des contre-positions, puis les perdantes, les rentables....

 
alexx_v писал(а) >>

Igor, avez-vous une fonction dans votre réserve pour fermer toutes les positions en une seule fois, y compris la fermeture avec des contre-positions en tête ?

C'est-à-dire fermer d'abord toutes les positions opposées, dans la mesure du possible, en tenant compte du décalage de beaucoup de positions opposées, puis des positions perdantes, rentables....

Non, je ne l'ai pas encore.

 

La fonction ExistInHistoryCloseBetween().

Renvoie un indicateur de l'existence dans l'historique d'une position ou d'un ordre fermé (supprimé) entre deux dates. La fonction ExistInHistoryCloseBetween() accepte les paramètres suivants :

  • sy - Nom de l'instrument de marché. "" - tout symbole, NULL - symbole actuel. La valeur par défaut est "".
  • op - Opération commerciale. Valeurs valides : -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valeur par défaut -1 - toute opération.
  • mn - Identifiant du commerce, MagicNumber. Valeur par défaut -1 - tout nombre magique.
  • d1 - Heure de clôture de la position (en attendant la suppression de l'ordre). La valeur par défaut est 0 - toute heure de fermeture (suppression). Le temps d1 doit être plus court que d2.
  • d2 - Heure de clôture de la position (en attendant la suppression de l'ordre). Valeur par défaut - 0 - toute heure de fermeture (suppression). Le temps d2 doit être plus long que le temps d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween(string sy="", int op=-1, int mn=-1,
                                datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderCloseTime() && ( d2==0 || d2>=OrderCloseTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Exemples d'utilisation de ExistInHistoryCloseBetween().

  1. Présence d'une position fermée hier ou d'un ordre supprimé hier avec MagicNumber=0 par le symbole graphique actuel.
    datetime d1=iTime(NULL, PERIOD_D1, 1);
    datetime d2=iTime(NULL, PERIOD_D1, 0)-1;
    Message( IIFs( ExistInHistoryCloseBetween(NULL, -1, -1, d1, d2), "Есть", "Нет"));
  2. Présence de positions ou d'ordres fermés (supprimés) au cours des trois dernières heures.
    datetime d1=TimeCurrent()-3*60*60;
    Message(IIFs(ExistInHistoryCloseBetween("", -1, -1, d1), "Есть", "Нет"));
  3. Si un achat en EUR a été clôturé ou non dans les 5 dernières minutes.
    datetime d1=TimeCurrent()-5*60;
    Message( IIFs( ExistInHistoryCloseBetween("EURUSD", OP_BUY, -1, d1), "Да", "Нет"));

P.S. Vous trouverez ci-joint un script pour tester la fonction ExistInHistoryCloseBetween().

 

La fonction ExistInHistoryOpenBetween().

Renvoie un indicateur de l'existence dans l'historique d'une position ou d'un ordre ouvert (fixé) entre deux dates. La fonction ExistInHistoryOpenBetween() accepte les paramètres suivants :

  • sy - Nom de l'instrument. "" - tout caractère, NULL - le symbole actuel. La valeur par défaut est "".
  • op - Opération commerciale. Valeurs valides : -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valeur par défaut -1 - toute opération.
  • mn - Identifiant des opérations commerciales, MagicNumber. Valeur par défaut -1 - tout nombre magique.
  • d1 - Heure d'ouverture de la position (en attendant le passage de l'ordre). La valeur par défaut est 0 - tout temps d'ouverture (de réglage). Le temps d1 doit être inférieur au temps d2.
  • d2 - Heure d'ouverture de la position (en attente du passage de l'ordre). La valeur par défaut est 0 - n'importe quel temps ouvert (défini). Le temps d2 doit être plus long que le temps d1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween(string sy="", int op=-1, int mn=-1,
                               datetime d1=0, datetime d2=0) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          if ( d1<=OrderOpenTime() && ( d2==0 || d2>=OrderOpenTime())) return( True);
        }
      }
    }
  }
  return( False);
}
 

Bonjour !

Igor, peux-tu me dire comment peindre le bar dans la couleur que je veux.

Je vais vous le dire dès le début. J'écris un indicateur pour le trading zonal - la quatrième dimension du marché B de Williams. Les barres doivent être colorées en vert, rouge ou gris.

J'ai écrit un indicateur et voici ce que j'ai obtenu :

Ce n'est pas ce que je veux. Comment faire une barre à colorier au milieu. J'utilise un rectangle à deux coordonnées comme méthode d'ombrage. C'est là que se pose tout le problème, comment choisir les coordonnées du début et de la fin du rectangle.

S'il vous plaît, donnez-moi un indice.

Voici le code de l'indicateur.

Dossiers :
zonetrade.mq4  6 kb
 
Duke3D писал(а) >>
Igor, pourriez-vous me dire comment ombrer une barre dans la couleur que je veux.
...
Comment faire pour qu'une barre soit ombrée exactement au milieu.

Jetez un coup d'œil à l'indicateur Heiken Ashi. Son code source est inclus dans MetaTrader 4.

 

Fonction ExistInHistoryToDay().

Renvoie le drapeau d'existence dans l'historique d'une position ou d'un ordre ouvert (fixé) aujourd'hui. La fonction ExistInHistoryToDay() reçoit les paramètres suivants :

  • sy - Nom de l'instrument. "" - un symbole quelconque, NULL - le symbole actuel. La valeur par défaut est "".
  • op - Opération commerciale. Valeurs valides : -1, OP_BUY, OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP. Valeur par défaut -1 - toute opération.
  • mn - Identifiant des opérations commerciales, MagicNumber. Valeur par défaut -1 - n'importe quel magik.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()== sy || sy=="") {
        if ( op<0 || OrderType()== op) {
          if ( mn<0 || OrderMagicNumber()== mn) {
            if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return( True);
          }
        }
      }
    }
  }
  return( False);
}
Raison: