Fonctions utiles de KimIV - page 74

 
allarkoms писал(а) >>

Bonjour Igor !

J'essaie d'apprendre MQL4 et, en raison du manque de description des opérateurs du langage, un problème m'a laissé perplexe. J'ai un indicateur avec 8 buffers de données accumulées, j'ai besoin qu'il s'affiche sur un timeframe que j'ai choisi et avec la période du timeframe suivant. Pour ce faire, il utilise l'opérateur iCustom(). Mais il renvoie une valeur double et je ne sais pas comment et si iCustom peut et doit être utilisé dans ce cas.

J'espère vraiment que vous pourrez m'aider.

Bonjour, Alexey !

Vous devriez créer un nouvel indicateur qui utiliserait la fonction iCustom(). Affectez les valeurs renvoyées par cette fonction aux tampons du nouvel indicateur.

 
ProfitTrader писал(а) >>

Bonjour Igor et bonjour à tous !

Je suis intéressé par le code qui doit être saisi pour que le Conseiller Expert ne fasse plus de transactions ce jour-là lorsqu'il ferme une transaction....

Je l'ai trouvé mais il ne fonctionne pas dans le testeur de stratégie, je veux le tester, quel code dois-je utiliser à la place ?

Alors je devrais l'ajouter dans la condition d'entrée.

Bonjour, Sergiy !

Je ne vois même pas pourquoi l'utilisation de ma fonction donnée par vous ne peut pas fonctionner dans le testeur de stratégie. Si cela vous concerne toujours, je vous suggère de poster le code complet de l'EA. Essayons de comprendre...

 

Il y a des questions sur les différences et les particularités des fonctions SetOrder() et OpenPosition() dans la gestion des erreurs.


SetOrder() :

      if ( err==8 || err==141) Sleep(1000*100);
      if ( err!=135 && err!=138) Sleep(1000*7.7);
      if ( err==139 || err==140 || err==148) break;

OpenPositions() : les erreurs 8 (ERR_TOO_FREQUENT_REQUESTS), 138 (ERR_REQUOTE) et 139 (ERR_ORDER_LOCKED) ne sont pas traitées, contrairement à SetOrder() :

      if ( err==141) Sleep(1000*100);
      if ( err!=135) Sleep(1000*7.7);
      if ( err==140 || err==148 || err==4110 || err==4111) break;

Dans SetOrder(), l'erreur 130 (ERR_INVALID_STOPS) est traitée par la correction des arrêts, mais dans OpenPositions(), elle n'est traitée d'aucune façon.

Dans OpenPositions(), le traitement 145 (ERR_TRADE_MODIFY_DENIED) est présent. Le sens de son traitement ici n'est pas clair.

En outre, la première page de cette discussion mentionne les erreurs dont la gestion est absente dans les deux fonctions :

KimIV >>:

На паузу 7.7 секунды нарвутся ошибки 129 (Неправильная цена bid или ask), 130 (Неправильные стопы), 134 (Недостаточно денег), 136 (Нет цен).

En outre, il n'y a pas de traitement d'autres erreurs (probablement importantes dans ce cas), par exemple, 3 (ERR_INVALID_TRADE_PARAMETERS), 6 (ERR_NO_CONNECTION), 7 (ERR_NOT_ENOUGH_RIGHTS), 9 ERR_MALFUNCTIONAL_TRADE, 137 (ERR_BROKER_BUSY), 144( !), 4067 (ERR_TRADE_ERROR), 4106 (ERR_UNKNOWN_SYMBOL), 4107 (ERR_INVALID_PRICE_PARAM)


Igor, veuillez commenter les points décrits.

Les fonctions SetOrder() et OpenPositions() que j'ai mentionnées sont tirées de la bibliothèque b-Orders du 05.11.2008 et b-Positions du 29.10.2008 du site kimiv.ru.


Je voudrais ajouter. Si l'erreur 5 ERR_OLD_VERSION se produit, elle peut être traitée de la même manière que 2, 64, 65, 133 ; 4109 ERR_TRADE_NOT_ALLOWED de la même manière que 4110, 4111

 
Que signifie l'erreur 142 ? Je ne l'ai pas trouvé dans les codes d'erreur. Je voudrais également savoir s'il est possible de réduire les délais quelque part pour le pipsator ?
 
khorosh >> :
Que signifie l'erreur 142 ? Je ne l'ai pas trouvé dans les codes d'erreur.

https://docs.mql4.com/ru/trading/errors

142 Une commande a été mise en file d'attente. Il ne s'agit pas d'une erreur, mais d'un des codes de communication entre le terminal client et le serveur de trading. Ce code peut être reçu dans un cas rare, lorsqu'au cours d'une opération de trading il y a eu une rupture de connexion et que la connexion a été rétablie par la suite. Elle doit être traitée de la même manière que l'erreur 128.

 
Здравствуйте Игорь! И всем Добрый день!

Je suis intéressé par une question sur les PEG, ils ne sont pas décrits dans le livre, et il y a beaucoup de nouveautés dans ce sujet. J'aimerais savoir comment faire pour qu'une transaction s'ouvre chaque fois qu'un GEP apparaît. Je veux savoir comment ouvrir des ordres lorsque le GEP apparaît. Je l'ai, mais pour une raison quelconque cet algorithme ne fonctionne pas, quelle est l'erreur ici ?

extern int     Magic                = 777;
extern int       TP                 = 6;
extern int       SL                 = 2;
extern double  Lots                 = 0.01;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>1*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}

   return(0);
  }
//+------------------------------------------------------------------+
 
Dans la première condition, la première sous-condition est superflue, la deuxième condition sur la vente n'est pas du tout réalisable. Un point est-il un écart ? Vous avez un slippage de 2 et un stop de 2, il pourrait y avoir des chevauchements.
 
Roger >> :
Dans la première condition, la première sous-condition est redondante, la deuxième condition en vente est impossible. Un point est-il un écart ? Votre slippage est de 2 et le stop est de 2.

Merci, mais pourquoi la première préface est-elle superflue ? Vous souhaitez qu'une position d'achat s'ouvre lorsqu'une nouvelle barre est supérieure à la clôture de la précédente et vice versa. >> Est-ce la bonne façon de faire ?

if(  iClose(NULL,0,1)<iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if(  iClose(NULL,0,1)>iOpen(NULL,0,0) && (iClose(NULL,0,1)-iOpen(NULL,0,0))>2*Point )
   { //продаем
 OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
C'est vrai.
if(  iClose(NULL,0,1)-iOpen(NULL,0,0)>10*Point )
   { //покупаем
  OrderSend(Symbol(),OP_BUY, Lots,Ask,2,Bid- SL*Point,Bid+ TP*Point,
                                               NULL, Magic,0,CLR_NONE);}
                                                  
if( iOpen(NULL,0,0)- iClose(NULL,0,1)>10*Point )
   { //продаем
OrderSend(Symbol(),OP_SELL, Lots,Bid,2,Ask+ SL*Point,Ask- TP*Point,
                                              NULL, Magic,0,CLR_NONE);}
 
Roger >> :
>> C'est exact.

D'après ce que je comprends, la première condition implique automatiquement que le prix de clôture est supérieur au prix d'ouverture. Dans le second, c'est l'inverse ??????.

Raison: