Uniquement "Fonctionnalités utiles de KimIV". - page 11

 
Tout ce que j'ai obtenu, ce sont ces fonctions, et j'ai décidé de comprendre la logique du programmeur. C'est pourquoi je pose des questions. C'est à ça que sert ce forum.
 
satop:

Fonction DistMarketAndPos().

C'est parti ! Voici des fonctions plus intéressantes ! Par exemple, il renvoie la distance en pips entre le marché et la position la plus proche. La sélection plus précise des positions à contrôler 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é. Le "" ou NULL signifie le symbole 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 - Identifiant de la position (MagicNumber). La valeur par défaut de -1 signifie n'importe quel MagicNumber.


satop:

La fonction DistMarketAndPos().

C'est parti ! Passons à des fonctions plus intéressantes ! Par exemple, il renvoie la distance, en points, entre le marché et la position la plus proche. La sélection plus précise des positions à contrôler 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é. Le "" ou NULL signifie le symbole 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 - Identifiant de la position (MagicNumber). La valeur par défaut -1 signifie n'importe quel MagicNumber.


J'essaie de le faire fonctionner dans les deux sens et d'ouvrir des ordres dans les deux sens. J'ai une erreur, aidez-moi à la corriger.

extern int TakeProfit = 150 ;

extern double Lot = 0.01 ;

extern inttern MAGIC = 1234 ;

int start()

{

si (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point)

}

retour(0) ;

}

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1)

{

double d, p ;

int i, k=OrdersTotal(), r=1000000 ;


si (sy=="" || sy=="0") sy=Symbole() ;

p=MarketInfo(sy, MODE_POINT) ;

si (p==0) si (StringFind(sy, "")<0) p=0.00001 ; sinon p=0.01 ;

pour (i=0 ; i<k ; i++)

{

si(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

si (mn<0 || OrderMagicNumber()==mn)

{

si (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p ;

si (r>d) r=NormalizeDouble(d, 0) ;

}

si (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p ;

si (r>d) r=NormalizeDouble(d, 0) ;

}

}

}

}

}

//----------------------------------------------------------------------------------------------------------------------------------------------


si (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point) ;

}

retour(0) ;


{

int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //cette ligne donne 1 erreur,

//si cette ligne est supprimée,

//il compile, mais ensuite

//Je ne mets pas op=OP_SELL,

//et sans elle, le conseiller expert pensera,

//que l'ordre à partir duquel vous voulez calculer

//distance est OP_BUY

si (sy=="" || sy=="0") sy=Symbole() ;

p=MarketInfo(sy, MODE_POINT) ;

si (p==0) si (StringFind(sy, "")<0) p=0.00001 ; sinon p=0.01 ;

pour (i=0 ; i<k ; i++)

{

si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

si ((OrderSymbol()==sy) && (op<0 || OrderType()==op))

{

si (mn<0 || OrderMagicNumber()==mn)

{

si (OrderType()==OP_BUY)

{

d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p ;

si (r>d) r=NormalizeDouble(d, 0) ;

}

si (OrderType()==OP_SELL)

{

d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p ;

si (r>d) r=NormalizeDouble(d, 0) ;

}

}

}

}

}

retour(r) ;

retour(r) ;

}

}

//-------------------------------------------------------------------------------------------

MERCI

 
qwanya:


J'essaie de le faire fonctionner dans les deux sens et d'ouvrir des commandes dans les deux sens avec lui. J'ai un bug dont je n'arrive pas à me débarrasser, aidez-moi à le corriger.

MERCI


Vous devriez essayer :

Et avec des questions ici...

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  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)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Veuillez laisser vos commentaires dans la branche source. Door to source (Caractéristiques utiles de KimIV).
 
Veuillez laisser vos commentaires dans la branche source. Door to source (Caractéristiques utiles de KimIV).
 
satop:

Fonction MovingInWL().

Quelqu'un peut-il expliquer pourquoi il faut poster des fonctions qui ne fonctionnent pas ?

'LevelWLoss' - identificateur non déclaré
'LevelProfit' - identificateur non déclaré
'ModifyOrder' - fonction non définie
'LevelWLoss' - identificateur non déclaré
'LevelProfit' - identificateur non déclaré
'ModifyOrder' - fonction non définie
6 erreur(s), 0 avertissement(s)

et ceci dans la fonction elle-même

 
DenisovOleg:

Quelqu'un peut-il expliquer pourquoi il faut poster des fonctions qui ne fonctionnent pas ?

'LevelWLoss' - identificateur non déclaré
'LevelProfit' - identificateur non déclaré
'ModifyOrder' - fonction non définie
'LevelWLoss' - identificateur non déclaré
'LevelProfit' - identificateur non déclaré
'ModifyOrder' - fonction non définie
6 erreur(s), 0 avertissement(s)

et ceci est à l'intérieur de la fonction elle-même

La fonction fonctionne, mais elle appelle la fonction ModifyOrder, qui doit être ajoutée au code de l'EA et ajoute également à l'EA les variables LevelWLoss et LevelProfit, comme ceci

extern int LevelProfit = 1000 ;

extern int LevelWLoss = 50 ;

 
Виктор
Iurii Tokman

Merci beaucoup pour ce fil de discussion. Un grand merci à lurii Tokman pour les fonctionnalités. Personnellement, je suis presque prêt à l'assimiler à Stroustrup.
Merci !

 
Iurii Tokman:

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 n'importe quel identifiant.

Ne revient pas ! !!

quelle que soit la façon dont je le fais, soit des zéros, soit " fonction de traitement des événements non trouvée" 4.mq4 1 1
"

 
Aleksey Maryaskin:

Merci beaucoup pour ce fil de discussion. Un grand merci à lurii Tokman pour les fonctionnalités. Personnellement, je suis presque prêt à l'assimiler à Stroustrup.
Merci !

N'oubliez pas de remercier également l'auteur des articles.