Explication détaillée d'iCustom - page 4

 
honest_knave: Je ne savais pas que ça s'appelait "camel case". Merci !
Il semble que le modérateur ait supprimé mon précédent message parce qu'il contenait un lien vers WikiPedia. Il suffit donc de faire une recherche sur WikiPedia (ou sur Google) pour obtenir des informations sur l'histoire et les détails de "Camel Case".
 
Fernando Carreiro:
Il semble que le modérateur ait supprimé mon précédent message parce qu'il contenait un lien vers WikiPedia, alors faites une recherche sur WikiPedia (ou Google) pour obtenir des informations sur l'histoire et les détails de l'"Affaire du chameau".
Votre message a été supprimé car il s'agissait d'un double. Le même lien est déjà posté.
 
En continuant à partir du #23 et en encapsulant dans une fonction #26, je montre maintenant une structure qui fonctionne à la fois sur MT4 et MT5. (Pour post-build 600, j'ai changé les points invalides(#29) dans les noms de variables, et approprier les ints aux énumérations standards).
Non compilé, non testé.
struct SFX{                            // SFX indicator at #1
   #define  SFX_NAME_PATH   "SFX"       // Indicator filename without extension,
                                       // including blanks if any.
   enum SFXbuffer{SFX_STD, SFX_STDMA};
   string                  PairName;
   ENUM_TIMEFRAMES         tf;
   int                     StdDev_MA_Period;
   int                     StdDev_MA_Shift;
   ENUM_MA_METHOD          StdDev_MA_Method;
   ENUM_APPLIED_PRICE      StdDev_MA_Price;
   int                     MA_Fast_Period;
   ENUM_MA_METHOD          MA_Fast_Method;
   int                     MA_Fast_Shift;
   #define  CheckOncePerBar true;
   void SFX()      : PairName(_Symbol),            tf(PERIOD_CURRENT),
                     StdDev_MA_Period(12),         StdDev_MA_Shift(0),
                     StdDev_MA_Method(MODE_SMA),   StdDev_MA_Price(PRICE_CLOSE),
                     MA_Fast_Period(3),            MA_Fast_Method(MODE_SMMA),
#ifndef __MQL5__
                     MA_Fast_Shift(0){}
   double get(SFXbuffer buf, int iBar = 0){
      return iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar,
                     buf, iBar);
   }  // get
#else // MQL5
                     MA_Fast_Shift(0),             Handle(INVALID_HANDLE){}
   void ~SFX(){   if(Handle != INVALID_HANDLE) IndicatorRelease(Handle);   }
   double get(SFXbuffer buf, int iBar = 0){
      if(Handle == INVALID_HANDLE){
         Handle = iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar);
         if(Handle == INVALID_HANDLE){
            PrintFormat("%s: iCustom(%s) Failed: %i",
                        __FUNCTION__, SFX_NAME_PATH, _LastError);
            return 0;
         }
      }
      double  value[1]; CopyBuffer(Handle, buf, iBar, 1, value);
      return  value[0];
   }  // get
 Private:
   int                  Handle;     // MT5 only
#endif   // __MQL5__
}; // SFX
///////////////////////////////////////////////////////////////////////////////
SFX   SFXindicator;
// SFXindicator.StdDev_MA_Period = ...;   // modification of default parameters.
:
double     STDBuffer = SFXindicator.get(SFX_STD,   0);   // example calls
double     stddevma  = SFXindicator.get(SFX_STDMA, 0);
Non compilé, non testé.
 

Bonjour, j'ai une question rapide (et indolore, j'espère) sur iCustom : disons que j'ai 3 indicateurs appelés Ind_A, Ind_B et Ind_C, et j'ai un Expert Advisor appelé EA.

l'EA appelle les 3 indicateurs en utilisant icustom, en passant leurs arguments et en obtenant les résultats en indexant leurs tampons respectifs.

J'attache mes 3 indicateurs sur le graphique EURUSD et j'exécute mon EA ; concentrons-nous sur l'indicateur Ind_A, il fonctionne comme indicateur mais en même temps est exécuté par l'EA : l'instance est la même ou nous avons deux instances d'ind_A qui fonctionnent ? (je veux dire, une instance fonctionne seule et l'autre instance vit dans l'EA).

Dans ce cas, chaque instance a son propre buffer ? ou le buffer est-il partagé entre toutes les instances de l'indicateur ?

Merci beaucoup !

 

Désolé de réveiller ce fil de discussion à nouveau. Mais je pense que ma question appartient à ce sujet.

J'essaie d'accéder à 2 tampons à partir d'un indicateur personnalisé trend-target, l'indicateur a une entrée = 60, et deux tampons Band UP et Band LO.

en utilisant

double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



double Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,0,1);double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



Comment("iCustom returned v1= "+Value1+ " and value2= ",Value2);

La façon dont j'ai configuré les paramètres de cet iCustom est correcte ? car il semble que je n'obtienne pas les valeurs Band Up et Band LO exactes pour les tampons dans le panneau de surveillance des données, veuillez vérifier l'image jointe. Seuls les 2 ou 3 premiers chiffres décimaux ou 3e sont corrects mais pour une cotation FX les 4 chiffres doivent être corrects n'est-ce pas ?

J'espère que le codeur et les utilisateurs expérimentés de MQL5 pourront m'aider à corriger rapidement ce problème ? Merci d'avance

-----------------------------------------------------------------------------------------------------
A propos de ce qui est votre indicateur a 5 entrées et 4 tampons,

double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);

double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);

double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);

double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);


Comme ceci ci-dessus ?

 
ntk2017: Désolé de réveiller à nouveau ce fil de discussion. Mais

Veuillez modifier votre message (original) et utiliser le bouton CODE (Alt-S)! (Pour les grandes quantités de code, joignez-le.)
Règles générales et meilleures pratiques du forum. -Général - Forum de programmation MQL5
Editeur de messages

 
ntk2017: A propos de quoi, votre indicateur a 5 entrées et 4 tampons,
double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);
double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);
double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);
double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);

Comme celle ci-dessus ?

Absolument pas.

iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,BufferIndex,BarIndex);
 
William Roeder:

Absolument pas.

Je devrais utiliser comme ceci
double value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0,0); //with BarIndex=0, when only check on close or 1= when check on every tick;
 double value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,1,0,0,0);
double value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,1,0,0);
double value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,1,0);

merci pour votre correction je viens de trouver un exemple "Combined Use of Programs"(https://book.mql4.com/samples/shared) dans mql5 je pense que cet exemple dans codig est ce dont j'ai besoin. Je vais étudier cette partie, si j'ai des questions dans ma programmation, j'espère que vous m'aiderez à la faire fonctionner de manière plus stable et plus rentable.

Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
  • book.mql4.com
It was said earlier that according to MQL4 rules trade functions cannot be used in custom indicators, that is why for automated trading Expert Advisors or scripts should be used. However, the resource-saving technology used for calculations in indicators (see Creation of Custom Indicators) is widely used when creating trading programs. In most...
 
William Roeder:

Absolument pas.

J'ai le code de cette façon maintenant je peux voir les tampons 1, 2 de la TrendTarget (mais toujours pas les 4 chiffres corrects !!!), j'ai mis la valeur BarsIndex sur chaque stick à 1 parce que j'aime revérifier la TrendTarget.

   double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP,Band_UP,Band_LO;

   double Value1,Value2 ;





   Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,1,1);

   Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,2,1);

   Band_UP = Value1;

   Band_LO = Value2;

   Comment(" !!!!!!! ICUSTOM returned Value1= "+Value1+ " and value2= ",Value2+"\n");

Mais j'ai toujours un problème. J'utilise TrendTarget comme un filtre
.
if(tik <= 5 && Ask>Band_UP) ///////////////ONLY can open SELL////////////////
        {
         ////////////////////// TP1 SL1 ///////////////////////////////////
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL1*point(), sellPrice-TP1*point(),"_Sell_1",MagicNumber,exp,Crimson);
        }

      if(tik <= 5 && Bid<Band_LO)   ///////////////ONLY can open BUY////////////////

        {
         ////////////////////// TP1 SL1 ///////////////////////////////
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(),"_Buy_1",MagicNumber,exp,Navy);
        }
mais après son exécution, j'attache l'indicateur TrendTarget et je vois que l'EA ouvre encore beaucoup de trades entre le canal !!!!!.

Dans l'image, j'ajoute le TrendTarget après le démarrage. Lorsque je crée un modèle de test avec TrendTarget inclus(paramètre TF=60) le canal ne s'affiche que pour les X premières barres, ensuite je ne peux voir que la courbe des prix, pourquoi ?
Comment puis-je ajouter simplement l'indicateur Trend Target pour vérifier visuellement où les ordres sont ouverts ?

Je voudrais utiliser dans le code la valeur_UP dans le passé, similare l'utilisation de la fermeture : avant hier Close[2], hier Close[1], curren close Close[0] ? Est-il possible ?
Dossiers :
 
Les problèmes que j'ai toujours avec le scap test EA sont les suivants :

1er problème :
Je peux voir les tampons 1, 2 du TrendTarget (mais toujours pas tous les 4 chiffres corrects !!!), est-ce important ? pour la cotation EURUSD 1.0907 je pensais que lorsque la valeur du prix devait être comparée avec le canal supérieur ou le canal inférieur du TrendTarget, ces valeurs du TrendTarget devraient être exactes au moins 4 chiffres décimaux.
J'ai réglé la valeur de BarsIndex sur chaque stick à 1 parce que j'aime revérifier le TrendTarget

2ème problème :
Mais j'ai toujours un problème. J'utilise TrendTarget comme un filtre.

mais après son exécution, j'attache l'indicateur TrendTarget et alors je vois que l'EA ouvre encore beaucoup de trades entre le canal !!!!!

3ème problème :
Dans l'image ci-jointe, je dois ajouter le TrendTarget après son lancement. Lorsque je crée un modèle de test avec TrendTarget inclus (paramètre TF=60), le canal TrendTarget n'est affiché que pour les X premières barres, peut-être 100, puis je ne peux voir que la courbe des prix, pourquoi ?

4ième problème :
Comment puis-je ajouter simplement l'indicateur Trend Target pour un contrôle visuel en cours d'exécution où les ordres sont ouverts ?

5ème problème :
Je voudrais utiliser dans le code la valeur_UP dans le passé, similaire à l'utilisation de close : avant hier Close[2], hier Close[1], fermeture actuelle Close[0] ? Est-ce possible ? Parce qu'il pourrait y avoir un break-out plus long que quelques barres, dans ce cas j'aimerais changer la stratégie pour le trading de breakout, au lieu de cela, seulement une théorie je ne peux toujours pas savoir comment le faire dans le codage

6ème problème :
Quand la condition est touchée, par exemple j'aimerais ouvrir seulement 1 ordre, ici parce que le prix reste plusieurs barres au-dessus du canal supérieur donc la condition est toujours correcte, il est ouvert jusqu'à ce que mon compte soit épuisé ! Comment faire pour envoyer un seul ordre, puis attendre que la condition change ?

7ème problème :
Quelqu'un sait-il ce qu'est le trendtarget ? Il me semble qu'il s'agit d'une ligne de tendance ou d'une MA(x) du prix avec +/- 1xATR(14) ajouté de chaque côté, est-ce correct ? Quelqu'un a-t-il le code pour cela ?