Fonctions utiles de KimIV - page 109

 
J'ai un peu modifié la fonction. Maintenant, il calcule les intersections sans se planter.
Paramètres d'entrée : |
nm1 - nom de la première ligne |

nm2 - nom de la deuxième ligne

sur la production M - le niveau des prix.

void Middle(string nm1,string nm2)
  {
  double x1, x2, x3, x4;
  double y1, y2, y3, y4;
  double k1, k3;
  
  if(ObjectFind(nm1)==0 && ObjectFind(nm2)==0)
    {
    y1=ObjectGet(nm1, OBJPROP_PRICE1);
    y2=ObjectGet(nm1, OBJPROP_PRICE2);
    x1=ObjectGetShiftByValue(nm1, y1);
    x2=ObjectGetShiftByValue(nm1, y2);
    
    y3=ObjectGet(nm2, OBJPROP_PRICE1);
    y4=ObjectGet(nm2, OBJPROP_PRICE2);
    x3=ObjectGetShiftByValue(nm2, y3);
    x4=ObjectGetShiftByValue(nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
    if(k1 != k3)
      {
      T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
  return(0);
  }

PS. Désolé pour l'auteur de ce fil de discussion d'avoir posté mon code ici. Je pensais juste que peut-être quelqu'un avait aussi du mal à traverser...

 
Shuba: Je me disais juste que peut-être quelqu'un avait aussi du mal avec les croisements...

Il me vient à l'esprit (déjà dans les Annales) :

Novozar 23.07.2011 12:18
S'il vous plaît, dites-moi comment sortir. J'ai un indicateur appelé Average Directional Movement Index et il dessine des lignes en pointillés. Je veux attraper les lignes de croisement. Je ne pense pas qu'il soit nécessaire de dessiner des lignes en pointillés.
 
Shuba:

PS. Je m'excuse auprès de l'auteur de ce fil de discussion pour avoir posté mon code ici. Je pensais juste que peut-être quelqu'un avait aussi du mal avec les intersections...

Très bien. Pardonnez-lui...
 
Shuba:
J'ai un peu modifié la fonction. Maintenant, il calcule les intersections sans se planter.
Paramètres d'entrée : |
nm1 - nom de la première ligne |

nm2 - nom de la deuxième ligne

production M - niveau des prix.

PS. Je suis désolé pour l'auteur de ce fil de discussion d'avoir posté mon code ici. Je pensais juste que peut-être quelqu'un avait aussi du mal à traverser...

Eh bien, peut-être que cette fonction devrait retourner ce même niveau de prix (comme dans la variante précédente) ! De plus, il y a une variable non déclarée "T" dans votre code.
 
TarasBY:
Eh bien, peut-être que cette fonction devrait retourner ce même niveau de prix (comme dans la variante précédente) ! De plus, votre code contient une variable non déclarée "T".

Eh bien, il le renvoie)

à propos des variables non déclarées - désolé. Je me suis trompé.

double M - franchissement du niveau de prix. Cette variable est déclarée au début.

void Middle(string nm1,string nm2)
  {
  double x1, x2, x3, x4;
  double y1, y2, y3, y4;
  double k1, k3;
  
  if(ObjectFind(nm1)==0 && ObjectFind(nm2)==0)
    {
    y1=ObjectGet(nm1, OBJPROP_PRICE1);
    y2=ObjectGet(nm1, OBJPROP_PRICE2);
    x1=ObjectGetShiftByValue(nm1, y1);
    x2=ObjectGetShiftByValue(nm1, y2);
    
    y3=ObjectGet(nm2, OBJPROP_PRICE1);
    y4=ObjectGet(nm2, OBJPROP_PRICE2);
    x3=ObjectGetShiftByValue(nm2, y3);
    x4=ObjectGetShiftByValue(nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
    if(k1 != k3)
      {
      double T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
  return(0);
  }

La bande-annonce est un conseiller expert pour voir comment la fonction fonctionne.

 

Je n'ai pas réussi à le charger tout de suite...

Dossiers :
proba_per_1.mq4  11 kb
 
Shuba:

Je n'ai pas réussi à le charger tout de suite...


Vous ne devriez pas remuer les eaux, IMHO - bombarder les bibliothèques de fonctions avec des descriptions ici et c'est tout...

Ceux qui en ont besoin la trouveront.

 

La fonction ClosePosByTakeProfitZone().

Cette fonction ferme une position au prix du marché si le prix piétine pendant un certain nombre de barres dans la zone proche du TakeProfit ou tente de sortir de cette zone. La sélection 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). La valeur par défaut de -1 signifie n'importe quel MagicNumber.
  • tf - Période du graphique, sur laquelle il faut compter les barres, pendant lesquelles le prix se trouve dans la zone TakeProfit. La valeur par défaut 0 correspond à l'horizon temporel actuel.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.04.2012                                                     |
//|  Описание : Закрытие позиций при нахождении цены в зоне TakeProfit         |
//|             в течение заданного количества баров,                          |
//|             а также при попыте выйти из этой зоны.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    tf - таймфрейм                  ( 0   - текущий таймфрейм)              |
//+----------------------------------------------------------------------------+
void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
  double pa, pb, po, pp, tp;
  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 ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
          else {
            if (OrderType()==OP_BUY) {
              RefreshRates();
              pb=MarketInfo(OrderSymbol(), MODE_BID);
              pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
              tp=OrderTakeProfit()-TP.ZonePoint*po;
              if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
            }
            if (OrderType()==OP_SELL) {
              RefreshRates();
              pa=MarketInfo(OrderSymbol(), MODE_ASK);
              pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
              tp=OrderTakeProfit()+TP.ZonePoint*po;
              if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
            }
          }
        }
      }
    }
  }
}
Vous trouverez ci-joint un conseiller expert pour tester la fonction ClosePosByTakeProfitZone(). Vous pouvez la tester à la fois dans le testeur et en ligne.
 

Bonsoir, Igor !

J'ai commencé à étudier vos fonctions il y a peu de temps, à la page 36 je n'ai pas bien compris les fonctions, s'il vous plaît aidez-moi à comprendre :


Fonction GetArrowInterval().


//+------------------------------------------------------------------+
//| Retourne l'intervalle de réglage du pointeur de signal |
//+------------------------------------------------------------------+
int GetArrowInterval() {
int p = Period() ;

switch (p) {
case 1 : return(4) ;
case 5 : return(5) ;
case 15 : return(6) ;
case 30 : return(8) ;
case 60 : return(10) ;
case 240 : return(20) ;
case 1440 : return(40) ;
case 10080 : return(80) ;
case 43200 : return(150) ;
} xml-ph-0015@deep

c'est-à-dire que cette fonction a été utilisée pour définir des flèches à l'aide de la fonction SetArrow(), à savoir au lieu du niveau de prix dans la ligne ObjectCreate(nm, OBJ_ARROW, 0, 0,0), dites-moi comment cela s'est passé, je ne comprends pas bien la signification des valeurs de retour (4,5,6,8,10....)


La nouvelle version de la fonction reste également peu claire :





//+----------------------------------------------------------------------------+
//| Auteur : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Version : 12.10.2007 |
//+----------------------------------------------------------------------------+
//| Description : Renvoie l'intervalle du pointeur de signal |
//| Paramètres : |
//| pr - pourcentage relatif à la taille du prix de la fenêtre |
//+-------------------

retourner((WindowPriceMax()-WindowPriceMin())/100*pr/Point) ;


La fonction WindowPriceMax() renvoie la valeur maximale de l'échelle verticale, c'est-à-dire la valeur maximale du prix, mais sur quelle période ?

Et merci pour votre travail acharné....))))

 
Lisi4ka330:

J'ai commencé à étudier vos fonctions il y a peu de temps, à la page 36 je n'ai pas bien compris les fonctions, s'il vous plaît aidez-moi à comprendre :

c'est-à-dire que cette fonction a été utilisée pour définir des flèches à l'aide de la fonction SetArrow(), notamment à la place du niveau de prix dans la ligne ObjectCreate(nm, OBJ_ARROW, 0, 0,0), dites-moi comment cela a été fait...

Vous avez dû mal comprendre le but de ces fonctions. Ils n'opèrent pas avec les prix et ne mettent pas d'icônes ; ils ne renvoient que la distance en pips en fonction de la période en cours. Veuillez vous référer à l'image ci-dessous.

Si vous placez un tel marqueur non pas près du prix, mais à une certaine distance, par exemple sur l'échelle de temps H1, et que vous passez ensuite à M1, vous ne verrez probablement pas le marqueur. L'échelle change et l'icône se déplace vers le bas ou vers le haut. Les fonctions que vous avez mentionnées sont conçues pour garantir que les icônes sont toujours visibles sur le graphique, quelle que soit la période.

Lisi4ka330:

...que signifient les valeurs de retour (4,5,6,8,10....)

Distance en pips, en fonction du cadre temporel actuel.


Lisi4ka330 :

La fonction WindowPriceMax() renvoie la valeur maximale de l'échelle verticale, c'est-à-dire qu'il s'agit de la valeur maximale du prix, mais sur quelle période ?

Pas pour n'importe quelle période... Seulement dans la fenêtre actuelle. Par exemple, dans la figure ci-dessous, le prix maximum est de 97.35

Raison: