Fonctions utiles de KimIV - page 44

 

Exemples d'utilisation de GetNearestDownFractal().

  • Le niveau de prix de la fractale ascendante la plus proche sur le graphique actuel. La formule fractale est 2-2 (standard).
    Message(GetNearestUpFractal());
  • Le niveau de prix de la fractale supérieure la plus proche sur le graphique H1 de l'USDJPY. La formule fractale est 5-2.
    Message(GetNearestUpFractal("USDJPY", PERIOD_H1, 5));
  • Tracez une ligne horizontale passant par le niveau de prix de la fractale supérieure 4-3 la plus proche sur le graphique actuel.
    double p=GetNearestUpFractal(NULL, 0, 4, 3);
    SetHLine(Red, "", p);

SZY. Vous trouverez ci-joint un script pour tester la fonction GetNearestUpFractal().

Dossiers :
 

Fonction CorrectTF().

J'ai écrit cette fonction après avoir découvert que parfois je peux facilement spécifier un délai incorrect, qui est égal à un nombre entier de minutes, dans les paramètres d'entrée d'un indicateur ou d'un EA. Par exemple, j'ai entré 50 pour l'heure au lieu de 60. Eh bien... en quelque sorte raté. Il s'avère que la fonction iRSI() renvoie zéro pour un délai incorrect. Je ne peux rien dire sur les autres fonctions, car je ne les ai pas vérifiées. Pour éviter les malentendus résultant de mes propres erreurs d'inattention, j'ai écrit cette fonction comme une primitive infaillible. Il ajuste le paramètre d'entrée au délai approprié et correct "le plus proche" et renvoie sa valeur.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.03.2008                                                     |
//|  Описание : Корректирует таймфрейм под ближайший поддерживаемый МТ4.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int CorrectTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  if (TimeFrame< PERIOD_M5                         ) return(PERIOD_M1);
  if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
  if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);
  if (TimeFrame>=PERIOD_M30 && TimeFrame<PERIOD_H1 ) return(PERIOD_M30);
  if (TimeFrame>=PERIOD_H1  && TimeFrame<PERIOD_H4 ) return(PERIOD_H1);
  if (TimeFrame>=PERIOD_H4  && TimeFrame<PERIOD_D1 ) return(PERIOD_H4);
  if (TimeFrame>=PERIOD_D1  && TimeFrame<PERIOD_W1 ) return(PERIOD_D1);
  if (TimeFrame>=PERIOD_W1  && TimeFrame<PERIOD_MN1) return(PERIOD_W1);
  if (TimeFrame>=PERIOD_MN1                        ) return(PERIOD_MN1);
}
SZY. Vous trouverez ci-joint un script pour tester la fonction CorrectTF().
Dossiers :
 

La fonction DateBeginQuarter().

Cette fonction renvoie la date de début du trimestre par son numéro. Par exemple, si nous sommes le 27.08.2008, la date de début du trimestre en cours sera le 01.07.2008. Cette fonction ne prend qu'un seul paramètre - le numéro du trimestre par rapport au trimestre en cours. Par exemple, 0 est le trimestre en cours, 1 est le trimestre suivant et -1 est le trimestre précédent. En d'autres termes, les quarts de chiffre positifs demanderont des dates dans le futur, tandis que les zéros et les négatifs demanderont des dates dans le passé. La valeur renvoyée est le nombre de secondes écoulées depuis 00:00 le 1er janvier 1970.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату начала квартала                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позапрошлый)                      |
//|                                    (-1 - прошлый)                          |
//|    nq - номер квартала             ( 0 - текущий)                          |
//|                                    ( 1 - следующий)                        |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateBeginQuarter(int nq=0) {
  int ye=Year()-MathFloor(nq/4);
  nq=MathMod(nq, 4);
  int mo=Month()-MathMod(Month()+2, 3)+3*nq;
  if (mo<1) {
    mo+=12;
    ye--;
  }
  if (mo>12) {
    mo-=12;
    ye++;
  }

  return(StrToTime(ye+"."+mo+".01"));
}

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

Dossiers :
 

La fonction DateOfMonday().

Cette fonction renvoie la date de début de la semaine (lundi) par son numéro. Par exemple, si nous sommes le 29.08.2008, la date du début de la semaine en cours sera le 25.08.2008. Cette fonction ne prend qu'un seul paramètre - le numéro de la semaine par rapport à la semaine en cours. Par exemple, 0 correspond à la semaine en cours, 1 à la semaine suivante et -1 à la semaine précédente. En d'autres termes, les numéros de semaine positifs demanderont des dates dans le futur, tandis que les numéros zéro et négatifs demanderont des dates dans le passé. La valeur renvoyée est le nombre de secondes écoulées depuis 00:00 le 1er janvier 1970.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.05.2008                                                     |
//|  Описание : Возвращает дату понедельника по номеру недели                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - предпредыдущая неделя)            |
//|                                    (-1 - предыдущая неделя)                |
//|    nn - номер недели               ( 0 - текущая неделя)                   |
//|                                    ( 1 - следующая неделя)                 |
//|                                    ( 2 - последующая неделя)               |
//+----------------------------------------------------------------------------+
datetime DateOfMonday(int nn=0) {
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  while (TimeDayOfWeek(dt)!=1) dt-=24*60*60;
  dt+=nn*7*24*60*60;

  return (dt);
}

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

Dossiers :
 

La fonction Fibonacci().

Cette fonction renvoie un élément d'une série de Fibonacci par son numéro de séquence.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.08.2008                                                     |
//|  Описание : Возвращает элемент ряда Фибоначчи по его порядковому номеру.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    n - номер элемента ряда                                                 |
//+----------------------------------------------------------------------------+
int Fibonacci(int n) {
  int a=0, b=0, i=1, s=0;

  if (n==1) s=1;
  if (n>1) {
    s=1;
    while (i<n) {
      i++;
      a=b;
      b=s;
      s=a+b;
    }
  }
  return(s);
}

P.S. Vous trouverez ci-joint un script pour tester Fibonacci().

Dossiers :
 

Fonction GetNameMA().

Cette fonction renvoie le nom de la méthode MA (Moving Averages) par son identifiant. Cette fonction est pratique à utiliser dans les commentaires, les indicateurs et les messages des Expert Advisors.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование метода МА.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mm - идентификатор метода МА                                            |
//+----------------------------------------------------------------------------+
string GetNameMA(int mm) {
  switch (mm) {
    case MODE_SMA : return("SMA");
    case MODE_EMA : return("EMA");
    case MODE_SMMA: return("SMMA");
    case MODE_LWMA: return("LWMA");
    default       : return("Unknown Method");
  }
}
 
KimIV писал (а) >>

Fonction GetNameMA().

Cette fonction renvoie le nom de la méthode MA (Moving Averages) par son identifiant. Cette fonction est utile dans les commentaires, les indicateurs et les Expert Advisors.

Ne voyez pas cela comme un pinaillage .....

default       : return("Unknown Method");

C'est juste que si tu veux être régulier, tu dois aller jusqu'au bout...
 
TheXpert писал (а) >>

Ne pensez pas qu'il s'agit de s'en prendre à .....

par tous les moyens... Merci ! Corrigé !

 
KimIV

Bonjour !

Aidez-moi à faire passer l'expo juste un peu.

Je ne peux pas croire qu'il ouvre des ordres et ne ferme pas cette pile à la condition.

C'est-à-dire que s'il n'y a qu'une seule affaire, il sort de la pose et s'il y a 2 affaires, il se ferme.

Dossiers :
panzer.mq4  5 kb
 

Fonction GetPriceDiffInPoint().

Cette fonction renvoie la différence de prix entre deux barres, qui sont spécifiées par leurs numéros. Le but du développement de cette fonction était de déterminer la valeur et la direction du mouvement des prix. La fonction GetPriceDiffInPoint() détermine les points de référence (Open ou High ou Low ou Close) des barres à prendre en compte. La fonction accepte les paramètres facultatifs suivants :

  • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
  • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
  • n2 - Numéro de barre gauche. Valeur par défaut - 2.
  • n1 - Numéro de la barre de droite. Valeur par défaut - 1.

Valeur retournée :

  • positif - il y a eu une augmentation du taux entre les barres N2 et N1.
  • Négatif - il y a eu une diminution entre les barres N2 et N1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает ценовую разницу в пунктах между двумя барами.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий таймфрейм)  |
//|    n2 - номер левого бара               (    2       - второй бар)         |
//|    n1 - номер правого бара              (    1       - первый бар)         |
//|  Возвращаемое значение:                                                    |
//|    положительное - между барами N2 и N1 был рост курса                     |
//|    отрицательное - между барами N2 и N1 было снижение курса                |
//+----------------------------------------------------------------------------+
int GetPriceDiffInPoint(string sy="0", int tf=0, int n2=2, int n1=1) {
  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  int    d=MarketInfo(sy, MODE_DIGITS);
  int    dd=0, k=iBars(sy, tf);

  if (n1>k || n2>k)
    Print("GetPriceDiffInPoint(): Недостаточно баров для ",sy," ",GetNameTF(tf));
  else {
    if (n1>0 && n2>0) {
      int d1=NormalizeDouble((iHigh(sy, tf, n1)-iLow(sy, tf, n2))/p, d);
      int d2=NormalizeDouble((iLow(sy, tf, n1)-iHigh(sy, tf, n2))/p, d);

      if (MathAbs(d1)>MathAbs(d2)) dd=d1;
      if (MathAbs(d1)<MathAbs(d2)) dd=d2;
      if (MathAbs(d1)==MathAbs(d2)) {
        if (iOpen(sy, tf, n2)>iClose(sy, tf, n1)) dd=d2; else dd=d1;
      }
    }
  }

  return(dd);
}
Raison: