Fonctions utiles de KimIV - page 16

 
KimIV:
khorosh:
il y a une erreur dans la fonction bool idPriceLevel() incluse dans le conseiller expert e-TFL_v2: gdUpPrice==0 est répété deux fois dans la dernière condition, vous avez probablement voulu écrire gdDnPrice==0 dans le deuxième cas.

Merci ! J'ai téléchargé la version corrigée de e-TFL_v2 sur le site web.


khorosh:
Pour une raison quelconque, cet EA fonctionne dans mon Strategy Tester en mode visuel, mais il n'ouvre pas de positions sur un compte de démonstration, bien qu'il signale les niveaux d'achat et de vente dans les commentaires. Vous pouvez peut-être me dire ce qui se passe.

Je ne sais pas... Je viens de finir de tester cet Expert Advisor sur une démo de NorthFinance. Hier, mon ami de Moscou m'a appelé. Il s'est plaint du même conseiller expert. Il dit qu'il ouvre des positions par ligne et ensuite de plus en plus jusqu'à ce que vous l'arrêtiez et qu'il ouvre de nombreuses positions. Il y avait donc deux objectifs pour les tests :

1. En ce qui concerne votre question. Vérification de la fonctionnalité générale.

2. Sur la question de mon ami. J'ai ouvert une seule position à partir d'une seule ligne.

Pour le vérifier, j'ai mis le conseiller expert e-TFL_v2 sur les timeframes 5 minutes EURUSD, GBPUSD, USDCHF et USDJPY. En utilisant les lignes de tendance, j'ai dessiné des canaux sur les 20-30 dernières barres. En conséquence, le conseiller expert a fonctionné comme il le devait. L'euro a été acheté sur la ligne du bas, tandis que le yen a été vendu sur la ligne du haut. Pour la livre et le chypre, tout était correct aussi. Vous devez donc le vérifier par vous-même. Le conseiller expert fonctionne.

KimIV:
khorosh:
La fonction idPriceLevel() dans e-TFL_v2 a une erreur : dans la dernière condition gdUpPrice==0 est répétée deux fois. Probablement, dans le deuxième cas vous vouliez écrire gdDnPrice==0.

Merci ! J'ai téléchargé la version corrigée de e-TFL_v2 sur le site web.


khorosh:
Pour une raison quelconque, cet EA fonctionne dans mon Strategy Tester en mode visuel, mais il n'ouvre pas de positions sur un compte de démonstration, bien qu'il signale les niveaux d'achat et de vente dans les commentaires. Vous pouvez peut-être me dire ce qui se passe.

Je ne sais pas... Je viens de finir de tester cet Expert Advisor sur une démo de NorthFinance. Hier, mon ami de Moscou m'a appelé. Il s'est plaint du même conseiller expert. Il dit qu'il ouvre des positions par ligne et ensuite de plus en plus jusqu'à ce que vous l'arrêtiez et qu'il ouvre de nombreuses positions. Il y avait donc deux objectifs pour les tests :

1. En ce qui concerne votre question. Vérification de la fonctionnalité générale.

2. Sur la question de mon ami. J'ai ouvert une seule position à partir d'une seule ligne.

Pour le vérifier, j'ai mis le conseiller expert e-TFL_v2 sur les timeframes 5 minutes EURUSD, GBPUSD, USDCHF et USDJPY. En utilisant les lignes de tendance, j'ai dessiné des canaux sur les 20-30 dernières barres. En conséquence, le conseiller expert a fonctionné comme il le devait. L'euro a été acheté sur la ligne du bas, tandis que le yen a été vendu sur la ligne du haut. Pour la livre et le chypre, tout était correct aussi. Vous devez donc le vérifier par vous-même. Le conseiller expert fonctionne.

Peut-être que je ne comprends pas bien la logique de l'EA, mais il me semble que si une ligne est utilisée, la condition où l'erreur s'est produite sera remplie et idPriceLevel() sera mis à False. Expliquez-moi, si je me trompe.

 
khorosh:

si une seule ligne est utilisée, la condition où l'erreur s'est produite sera remplie et idPriceLevel() sera mis à False, ce qui n'ouvrira pas la position.

Oui, c'est exact. L'EA a besoin de deux lignes pour son fonctionnement normal : une ligne est au-dessus du prix et la deuxième ligne est en dessous du prix actuel. J'ai corrigé la description sur le site web. Merci !

 
KimIV:
khorosh:

si une seule ligne est utilisée, la condition où l'erreur s'est produite sera remplie et idPriceLevel() sera mis à False, ce qui n'ouvrira pas la position.

Oui, c'est exact. L'EA a besoin de deux lignes pour son fonctionnement normal : une ligne est au-dessus du prix et la deuxième ligne est en dessous du prix actuel. J'ai corrigé la description sur le site web. Merci !

C'est pourquoi ma position ne s'est pas ouverte, car je travaillais avec une seule ligne. Tout est clair maintenant. Merci pour vos efforts désintéressés. Vos fonctions sont très claires et clairement décrites. Peut-être que la plupart de nos EA, qui sont en cours de développement, utiliseront désormais vos fonctions.

 

Fonction ExistOPNearMarket().

Cette fonction renvoie un indicateur qu'un ordre ou une position existe près du marché (à une distance spécifiée en pips du marché). Une sélection plus précise des ordres ou des positions à vérifier est spécifiée par des paramètres externes :

  • sy - Nom de l'instrument. Si ce paramètre est défini, la fonction vérifiera uniquement les ordres ou les positions de l'instrument spécifié. Le "" ou NULL signifie le symbole actuel.
  • op - Type d'opération commerciale, d'ordre ou de position. Valeurs valides : OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP ou -1. La valeur par défaut de -1 signifie toute opération commerciale.
  • mn - Identifiant de l'ordre ou de la position (MagicNumber). La valeur par défaut -1 signifie n'importe quel identifiant.
  • ds - Distance du marché en pips. La valeur par défaut est de 1000000.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от рынка   (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;

  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
            if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
          }
          if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
            if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
          }
        }
      }
    }
  }
  return(False);
}
SZZY. script joint pour des expériences avec la fonction ExistOPNearMarket().
Dossiers :
 

Fonction ExistPosByPrice().

Cette fonction renvoie un indicateur de l'existence d'une position à un prix ouvert donné. 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 vérifiera uniquement les positions d'un 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.
  • pp - Prix d'ouverture de la position. La valeur par défaut 0 signifie n'importe quel prix.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  int    d, 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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS. Dans le trailer, il y a un script pour tester la fonction ExistPosByPrice().
Dossiers :
 

La fonction GetAmountLotFromOpenPos().

Cette fonction renvoie la somme des lots des positions ouvertes. Une sélection plus précise des positions à prendre en compte 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 GetAmountLotFromOpenPos(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) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. Vous trouverez ci-joint un script pour tester la fonction GetAmountLotFromOpenPos().
 

Fonction GetIndexByTicket().

Cette fonction renvoie l'index de l'ordre ou de la position par ticket. La sélection plus précise des ordres ou des positions à rechercher est spécifiée par des paramètres externes :

  • ti - Ordre de passage, position. La valeur de ce paramètre ne peut être vide ou nulle.
  • 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 - Type d'opération commerciale, d'ordre ou de position. Valeurs valides : OP_BUY, OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP ou -1. La valeur par défaut de -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                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-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=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS. Vous trouverez ci-joint un script pour tester la fonction GetIndexByTicket().
Dossiers :
 

Bonjour

J'aimerais savoir si vous disposez d'une fonction permettant de déterminer la corrélation de deux séries qui lui sont passées en paramètre ?

 
scorpionk:

Bonjour

Je voudrais savoir si vous disposez d'une fonction permettant de déterminer la corrélation des deux séries qui lui sont passées en paramètre ?

non... Mais ce sujet m'intéresse. Si vous fournissez les formules pour calculer la corrélation, j'écrirai la fonction.


ZS. Je ne chercherai pas les formules moi-même. Je n'irai pas non plus vers des liens avec des matériaux. C'est-à-dire que je n'ai aucune envie de comprendre le sujet. Il n'y a que le désir d'écrire une fonction en utilisant des formules toutes faites.

 
KimIV:
scorpionk:

Bonjour

Je voudrais savoir si vous disposez d'une fonction permettant de déterminer la corrélation des deux séries qui lui sont passées en paramètre ?

non... Mais ce sujet m'intéresse. Si vous fournissez les formules pour calculer la corrélation, j'écrirai la fonction.


ZS. Je ne chercherai pas les formules moi-même. Je n'irai pas non plus vers des liens avec des matériaux. C'est-à-dire que je n'ai aucune envie de comprendre le sujet. Il n'y a que le désir d'écrire la fonction sur les formules prêtes.


Formule de corrélation