Fonctions utiles de KimIV - page 111

 
Lisi4ka330:
Veuillez me dire pourquoi il y a des plus dans return(StrToTime(ye+"."+mo+".01").
Les plus dans ce contexte remplacent la fonctionStringConcatenate().
 
Merci.... big)))))
 

Fonction ProfitIFStopInCurrency()

L'autre jour, j'avais besoin d'une fonction pour mon panneau d'information qui renverrait le profit/la perte estimé(e) dans la devise du dépôt lorsqu'un groupe de positions déclenche ses stops. Ce n'est pas la première fois que j'écris une telle fonction. Je l'ai testé longuement et durement dans différentes sociétés de courtage et sur différents instruments avec différentes méthodes de calcul des bénéfices. Si vous ne le savez pas, il en existe trois : le Forex, les CFD et les Futures. Mais je n'arrive pas à trouver la différence entre le Forex et les Futures, mais j'ai quand même inclus la possibilité d'un calcul différent dans le code. La perte maximale qui peut être restituée par la fonction est artificiellement limitée par le solde du compte courant. Traditionnellement, vous pouvez passer des paramètres à la fonction et ainsi filtrer les positions dont vous avez besoin pour l'analyse :

  • 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). La valeur par défaut -1 signifie n'importe quel MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(s);
}

HH. Voici en pièce jointe le script permettant de tester la fonction ProfitIFStopInCurrency().

 

Fonction ProfitIFTakeInCurrency()

Cette fonction est similaire à la précédente, mais elle renvoie le profit/la perte estimé(e) dans la devise du dépôt lorsqu'un groupe de positions a déclenché sa prise. La méthode de calcul des bénéfices est également prise en compte : Forex, CFD et Futures .Le bénéfice maximum que la fonction peut renvoyer est artificiellement limité par le nombre 999,999,999. Paramètres :

  • sy - Nom de l'instrument. Si vous spécifiez ce paramètre, la fonction ne vérifiera que 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). La valeur par défaut -1 signifie n'importe quel MagicNumber.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания тейка открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (OrderTakeProfit()>0) {
              if (m==0) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=999999999;
          }
          if (OrderType()==OP_SELL) {
            if (m==0) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            if (m==1) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v/t/l*OrderLots();
            if (m==2) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(s);
}

HH. J'ai joint un script pour tester la fonction ProfitIFTakeInCurrency().

 
Une liste de tous mes articles avec de brèves descriptions et des liens vers les articles de publication.
Dossiers :
 
Bonjour, n'avez-vous pas une sorte de modèle (pour les débutants) pour faciliter l'écriture d'un EA pour le testeur et pour le trading réel. Quelque chose ne bouge pas((((
 
Chuma:
Bonjour, n'avez-vous pas une sorte de modèle (pour les débutants) pour faciliter l'écriture d'un EA pour le testeur et pour le trading réel. Quelque chose ne bouge pas((((
Un modèle ? :)) Eh bien, prenez n'importe lequel de mes EA comme point de départ...
 
KimIV:
Un modèle ? :)) Alors prenez n'importe lequel de mes EA comme point de départ...

Merci.... des choses intéressantes et utiles en général.... mais pour l'instant j'envisage de créer un conseiller de trading qui ouvrirait et fermerait des positions basées sur les signaux les plus simples (croisement de moyennes par exemple) pour commencer, mais toutes ces vérifications, détermination du lot etc. .... quoi, quand et comment... un peu compliqué....

 
alors l'idée d'un modèle m'a aussi traversé l'esprit.... Je soutiens les "collègues inexpérimentés" ))))))
 

Igor, je m'excuse de mes fréquentes questions et j'espère vraiment que ce n'est pas trop difficile pour vous...... Pourriez-vous me dire ce que signifie

gbDisabled

dans la fonction OpenPosition() pour la mise en ligne.

Voici une partie du code :

// Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза

Lors de la compilation, un message d'erreur indique que la variable n'est pas définie.

Raison: