Fonctions utiles de KimIV - page 17

 

La fonction elle-même :


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.05.2008                                                     |
//|  Описание : Возвращает корреляцию двух рядов.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений первого ряда                                        |
//|    y - массив значений второго ряда                                        |
//+----------------------------------------------------------------------------+
double Correlation(double& x[], double& y[]) {
  double co=0, sa=0, sb=0, sc=0, xs=0, ys=0;
  int    i, k=MathMin(ArraySize(x), ArraySize(y));

  if (k>0) {
    for (i=0; i<k; i++) {
      xs+=x[i]; ys+=y[i];
    }
    xs/=k; ys/=k;
    for (i=0; i<k; i++) {
      sa+=(x[i]-xs)*(y[i]-ys);
      sb+=(x[i]-xs)*(x[i]-xs);
      sc+=(y[i]-ys)*(y[i]-ys);
    }
    sb=MathSqrt(sb*sc);
    if (sb!=0) co=sa/sb;
  }
  return(co);
}
ZS. Dans le trailer se trouve un script pour tester la fonction Correlation().
Dossiers :
 

Fonction GetIndexLastPos().

Cette fonction renvoie l'index de la dernière position ouverte ou -1. Une sélection plus précise des positions à contrôler est définie par des paramètres externes :

  • sy - Nom de l'instrument de marché. Si nous définissons ce paramètre, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument 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 -1 signifie tout identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс последней открытой позиции или -1            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  int      i, k=OrdersTotal(), r=-1;

  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) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=i;
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetIndexLastPos().
Dossiers :
 

La fonction GetLotLastPos().

Cette fonction renvoie la taille du lot de la dernière position ouverte ou -1. Une sélection plus précise des positions à contrôler est définie par des paramètres externes :

  • sy - Nom de l'instrument de marché. Si vous définissez ce paramètre, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument 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 -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает размер лота последней открытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  double   l=-1;
  int      i, k=OrdersTotal();

  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) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                l=OrderLots();
              }
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetLotLastPos().
Dossiers :
 
KimIV:

Fonction GetIndexLastPos().

Cette fonction renvoie l'index de la dernière position ouverte ou -1. Une sélection plus précise des positions à contrôler est spécifiée par des paramètres externes :

ZS. Vous trouverez ci-joint un script pour tester la fonction GetIndexLastPos().

Quel est l'indice ? S'agit-il d'un numéro de barre de la dernière position ouverte? Ou quelque chose d'autre ?

 
rid писал (а):
Quel est l'indice ? Est-ce le numéro de la barre de la dernière position ouverte ? Ou quelque chose d'autre ?

Il s'agit du numéro de séquence de la position dans la liste des positions ouvertes et des ordres fixés. La numérotation commence à partir de zéro et est la même pour les postes et les ordres.

 

Cher Igor, je t'en prie, aide-moi. Le problème est que je ne trouve nulle part le code permettant d'attacher la MA au CCI ou au Stoch. Le signal d'achat ou de vente doit être généré lorsque ce МА franchit le niveau du CCI, par exemple +100/-100.

Peut-être existe-t-il un conseiller expert qui utilise le code dont j'ai besoin ?

 

Fonction GetMaxLotFromOpenPos().

Cette fonction renvoie la taille maximale du lot à partir du nombre de positions ouvertes. Une sélection plus précise des positions à contrôler est spécifié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 du symbole spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument 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 -1 signifie n'importe quel identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает максимальный размер лота из открытых позиций        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetMaxLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  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) {
              if (l<OrderLots()) l=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Dans le trailer il y a un script pour tester la fonction GetMaxLotFromOpenPos().
Dossiers :
 

Fonction GetMinLotFromOpenPos().

Cette fonction renvoie la taille minimale du lot à partir du nombre de positions ouvertes. Une sélection plus précise des positions à contrôler est spécifié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 du symbole spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument 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 -1 signifie tout identifiant.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает минимальный размер лота из открытых позиций         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetMinLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  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) {
              if (l==0 || l>OrderLots()) l=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
HH. Vous trouverez ci-joint un script pour tester la fonction GetMinLotFromOpenPos().
Dossiers :
 
GYL:

Cher Igor, je t'en prie, aide-moi. Le problème est que je ne trouve nulle part le code permettant d'attacher la MA au CCI ou au Stoch. Le signal d'achat ou de vente doit être généré lorsque ce МА franchit le niveau du CCI, par exemple +100/-100.

Peut-être existe-t-il un conseiller expert qui utilise le code dont j'ai besoin ?

Cette question n'est évidemment pas pertinente. Je vais vous donner un exemple d'un tel fragment de code en utilisant des exemples stochastiques et MA afin de ne pas distraire Igor.

double Stochastic_array[50];int j=0; while (j<50) {
Stochastic_array[j]= iStochastic(NULL, 0, Stochastic_period, 3,3,
                                     MODE_SMA,0,MODE_MAIN, j); j++; }
ArraySetAsSeries(Stochastic_array,true);
double MA_0 =iMAOnArray(Stochastic_array,0,MA_period,1,MODE_SMA,0) ;
double Stochastic_0=iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN, 0);
double Stochastic_1=iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN, 1);

MA. Je garderai le message pendant 24 heures - puis je le supprimerai !

 
rid:
La question est manifestement hors sujet. Afin de ne pas distraire Igor par des broutilles, je vais vous donner un exemple d'un tel morceau de code, en utilisant les fonctions stochastique et

MA. Je garderai ce message pendant 24 heures - puis je le supprimerai !

Merci beaucoup, vous m'avez beaucoup aidé.