Fonctions utiles de KimIV - page 14

 
KimIV:

Mais il permet d'arrêter le conseiller expert en appuyant sur le bouton "Conseillers experts" de la barre d'outils.

Je pense que cela fera l'affaire, merci. Il n'y a pas trop de paramètres pour quitter l'EA, ce ne sera pas difficile.

 

Un exemple d'utilisation de la fonction ClosePosBySizeProfitInCurrency()

Spécialement pour démontrer la fonction ClosePosBySizeProfitInCurrency(), j'ai écrit un conseiller expert.
e-CloseByProfitPosInCurrency, qui ferme uniquement les positions dont le profit dans la devise de dépôt dépasse une certaine valeur spécifiée. Le conseiller expert peut être installé sur un seul graphique ou sur plusieurs. Vous pouvez spécifier une liste de positions à fermer en utilisant des paramètres externes du conseiller expert :

  • symbol="0" - Instrument commercial. Les valeurs suivantes sont autorisées : "0" - n'importe quel instrument de négociation, "" - uniquement l'instrument actuel et n'importe quelle valeur de l'aperçu du marché (EURUSD, GBPUSD, etc.).
  • Opération=-1- Opération commerciale. Valeurs valides : -1 - toute transaction, 0 - OP_BUY, 1 - OP_SELL.
  • Profit=50- Profit dans la devise du dépôt.
  • MagicNumber=0- Identifiant de la position.
 

Bon après-midi à tous.

Igor, avez-vous une fonction qui ferme les positions à perte d'une manière similaire à ClosePosBySizeProfitInCurrency() lorsqu'une perte spécifiée est atteinte. (Ou, peut-être, une combinaison, où l'on peut spécifier la fermeture sur le bénéfice et sur la perte).

Si je comprends bien, nous pouvons simplement définir dans les paramètres pr pour OrderProfit() - avec le signe moins et nous obtiendrons ce que nous recher chons.

Est-il possible de fixer le seuil en points (et non en monnaie de dépôt) ? Si oui, comment ? (TakeProfit et StopLoss ne sont pas suggérés)

 
rid писал (а):
Igor, avez-vous une fonction qui ferme les positions à perte d'une manière similaire à ClosePosBySizeProfitInCurrency() lorsqu'une perte spécifiée est atteinte. (Ou peut-être une combinaison, où vous pouvez spécifier la fermeture sur le bénéfice et sur la perte).

Non, je ne dispose pas encore d'une telle fonction. Cependant, vous pouvez refaire ClosePosBySizeProfitInCurrency() :


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.04.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых убыток в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит/убыток                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; 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) {
            if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
          }
        }
      }
    }
  }
}

J'ai fait en sorte que la perte puisse être transmise comme un nombre positif (perte) et négatif (profit avec un signe moins).

rid a écrit :
Si je comprends bien, il suffit de définir dans les paramètres pr pour OrderProfit() - avec le signe moins et nous obtiendrons ce que nous recher chons.

Est-il possible de fixer le seuil en points (et non dans la monnaie de dépôt) ? Si oui, comment ? (Les options Take Profit et Stop Loss ne sont pas disponibles).

Regardez le code de e-CloseByProfit.

 
Merci.
 

La fonction ClosePositions().

Cette fonction ferme les positions dont les paramètres correspondent aux valeurs spécifiées :

  • sy - Nom de l'instrument. Si vous définissez ce paramètre, la fonction vérifiera uniquement les positions de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
  • 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 - Identifiant de la position (MagicNumber). Valeur par défaut -1 - tout MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; 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) ClosePosBySelect();
        }
      }
    }
  }
}
 
S'il vous plaît, aidez-moi !!! Cela fait maintenant 4 jours que je me pose des questions sur une tâche apparemment simple. Je dois prescrire, si le CCI est devenu supérieur à 100, alors ouvrir une position d' achat jusqu'à ce que la valeur soit inférieure à -100, et quand elle est inférieure à -100, alors ouvrir une position de vente jusqu'à ce qu'elle soit supérieure à 100.
 

La fonction ClosePosFirstProfit().

Cette fonction ferme les positions dans un certain ordre, c'est-à-dire les positions rentables en premier, suivies de toutes les autres positions. Une sélection plus précise des positions à fermer est définie par des paramètres externes :

  • sy - Nom de l'instrument. Si ce paramètre est défini, la fonction vérifiera uniquement les positions de l'instrument spécifié. NULL signifie l'instrument actuel, tandis que "" (par défaut) signifie n'importe quel instrument.
  • 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 - Identifiant de la position (MagicNumber). Valeur par défaut -1 - tout MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();

  // Сначала закрываем прибыльные позиции
  for (i=k-1; i>=0; 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) {
            if (OrderProfit()+OrderSwap()>0) ClosePosBySelect();
          }
        }
      }
    }
  }
  // Потом все остальные
  k=OrdersTotal();
  for (i=k-1; i>=0; 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) ClosePosBySelect();
        }
      }
    }
  }
}
 

La fonction ClosePosWithMaxProfitInCurrency().

Cette fonction ferme une position avec le profit positif maximum dans la devise de dépôt. C'est-à-dire que sur cinq positions, chacune ayant un profit de -34, 15, 73, -90, 41, la position avec un profit de 73 unités dans la devise de dépôt sera fermée. Une sélection plus précise des positions à fermer est spécifiée à l'aide de paramètres externes :

  • sy - Nom de l'instrument. Si nous définissons ce paramètre, la fonction ne vérifiera que les positions de l'instrument spécifié. NULL signifie l'instrument actuel, tandis que "" (par défaut) signifie n'importe quel instrument.
  • 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 - Identifiant de la position (MagicNumber). Valeur par défaut -1 - tout MagicNumber.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие одной позиции с максимальным положительным профитом   |
//|             в валюте депозита                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (pr<OrderProfit()+OrderSwap()) {
            pr=OrderProfit()+OrderSwap();
            np=i;
          }
        }
      }
    }
  }
  if (np>=0) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();
    }
  }
}
 
B_Dima:
Si la valeur CCI est supérieure à 100, alors ouvrez une position d'achat jusqu'à ce que la valeur soit inférieure à -100 et lorsqu'elle est inférieure à -100, alors ouvrez une position de vente jusqu'à ce qu'elle soit supérieure à 100.

Pour toi, Dima, je peux te suggérer cette fonction :

int CCI_period=14;
int Applied_Price=PRICE_CLOSE;

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.24.2008                                                     |
//|  Описание : Возвращает торговый сигнал:                                    |
//|              1 - покупай                                                   |
//|              0 - сиди, кури бамбук                                         |
//|             -1 - продавай                                                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nb - номер бара                 (    0       - текущий номер бара)      |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sy="", int tf=0, int nb=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double cci0=iCCI(sy, tf, CCI_period, Applied_Price, nb);
  double cci1=iCCI(sy, tf, CCI_period, Applied_Price, nb+1);
  int bs=0;

  if (cci1<=+100 && cci0>+100) bs=+1;
  if (cci1>=-100 && cci0<-100) bs=-1;

  return(bs);
}

Cette fonction renvoie 1 lorsqu'il faut acheter et -1 lorsqu'il faut vendre. Les conditions d'achat et de vente sont celles que vous souhaitez. Il ne vous reste plus qu'à faire ce qui suit à chaque tique :

1. Obtenez la valeur de GetTradeSignal().

2. Si la valeur reçue ==0, alors ne rien faire.

Si la valeur reçue >0, alors fermez toutes les ventes et achetez.

4. Si la valeur obtenue est <0, alors fermez tous les achats et vendez.