Questions des débutants MQL4 MT4 MetaTrader 4 - page 224

 
Dans le conseiller expert, les premières lignes de
OnTick()

Après ces lignes, d'autres codes seront exécutés une fois par bougie. Au moment de sa formation.

Vous appelez cet indicateur depuis l'EA, si je comprends bien ?

 
Aleksei Stepanenko:
Dans le conseiller expert, les premières lignes de

Après ces lignes, d'autres codes seront exécutés une fois par bougie. Au moment de sa formation.

Vous appelez cet indicateur depuis l'EA, si je comprends bien ?

En fait, j'insère cet indicateur dans un autre indicateur qui envoie le signal à un autre programme. C'est-à-dire qu'il n'y a pas de conseiller expert. C'est-à-dire qu'il devrait être inséré quelque part dans l'indicateur lui-même, mais comment ?
 
Quel programme ouvre les marchés ? Il s'agit d'un conseiller. N'est-ce pas ?
 
Aleksei Stepanenko:
Et quel programme ouvre l'affaire ? C'est le conseiller expert. N'est-ce pas ?

Ah, bien, peut-être... Mais ensuite, les choses semblent devenir beaucoup plus compliquées... Il n'y a aucun moyen de l'intégrer dans ce code, n'est-ce pas ? Et il n'y a pas non plus de code dans le deuxième code indicateur.

OnTick()
Comment diable cela fonctionne-t-il... :)))))
 
Vous pouvez essayer une autre méthode, où vous appelez cet indicateur via iCustom, mettez 1 à la fin de cette fonction au lieu de 0 également.
 
Au fait, l'indicateur dessine toujours beaucoup de flèches, mais lorsque je recharge le graphique, il n'en reste que quelques-unes. :( Comme si l'indicateur se sauvegardait sur l'historique, comme regarder comment je trade bien, mais en temps réel c'est complètement différent. :(
 
ElenkaVladi:
D'ailleurs, l'indicateur attire encore beaucoup de flèches,

Oui ? Hmm, j'y jetterai un coup d'oeil plus tard.

 
Aleksei Stepanenko:
Vous pouvez essayer une autre méthode, où vous appelez cet indicateur via iCustom, mettez 1 à la fin de cette fonction au lieu de 0 également.

Tu veux dire comme ça ?

if (IndicatorName != "") {
      up = iCustom(NULL, 0, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 0, IndicatorName, IndiBufferPut, SignalType);
if (IndicatorName != "") {
      up = iCustom(NULL, 1, IndicatorName, IndiBufferCall, SignalType);
      dn = iCustom(NULL, 1, IndicatorName, IndiBufferPut, SignalType);

Comme ça ?

 
Aleksei Stepanenko:

Oui ? Hmm, j'y jetterai un coup d'oeil plus tard.

C'est peut-être ce message. Ne devrions-nous pas faire ce qu'il dit ?

https://www.mql5.com/ru/forum/160587/page223#comment_19618305

En tout cas, merci beaucoup d'avoir joué avec nous ici... :)))

Je joins les fichiers pour mieux comprendre la situation.

Вопросы от начинающих MQL4 MT4 MetaTrader 4
Вопросы от начинающих MQL4 MT4 MetaTrader 4
  • 2020.11.29
  • www.mql5.com
Если у Вас вопросы по MQL4, MT4, MetaTrader 4, пожалуйста пишите в этой теме. Особенно когда вопросы касаются торговых функций...
 
ElenkaVladi:

Voici le code de travail :

//---- indicator settings
#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Blue
#property  indicator_color2  Red
//---- indicator parameters
extern int  period = 4; //12
extern int  shift  = 0; //сдвиг по бару
//---- indicator buffers
double BufferUp[],BufferDn[];
double Ma[],MaOn[];

datetime LastTime=0;
int i, st=5;

int OnInit()
   {
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_ARROW,2);
   SetIndexArrow(0,233);
   SetIndexStyle(1,DRAW_ARROW,2);
   SetIndexArrow(1,234);

   SetIndexBuffer(0,BufferUp);//стрелка синяя верх
   SetIndexBuffer(1,BufferDn);//стрелка красная вниз
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("T3MA-ALARM ("+period+")");
   
   ArraySetAsSeries(Ma,true);
   ArraySetAsSeries(MaOn,true);
//---- initialization done
   if(Digits==3 || Digits==5) st*=10;
   return(INIT_SUCCEEDED);
   }
   
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {
   if(rates_total<=MathMax(period,shift)) return(0);
   int limit=rates_total-prev_calculated;   
   if(prev_calculated>0) limit++;

   if(LastTime!=time[1])
      {
      LastTime=time[1];
      ArrayCopy(Ma,Ma,rates_total-ArraySize(Ma),0,WHOLE_ARRAY);
      ArrayCopy(MaOn,MaOn,rates_total-ArraySize(MaOn),0,WHOLE_ARRAY);
      }

   for(i=limit; i>=1; i--) Ma[i]=iMA(NULL,0,period,0,MODE_EMA,PRICE_CLOSE,i);
   for(i=limit; i>=1; i--) MaOn[i]=iMAOnArray(Ma,rates_total,period,0,MODE_EMA,i);
      
   for(i=limit; i>=1; i--)
      {
      if(MaOn[i+shift]-MaOn[i+1+shift]<0 && MaOn[i+1+shift]-MaOn[i+2+shift]>0){BufferDn[i+1]=high[i+1]+st*Point;}
      if(MaOn[i+shift]-MaOn[i+1+shift]>0 && MaOn[i+1+shift]-MaOn[i+2+shift]<0){BufferUp[i+1]=low[i+1]-st*Point;}
      }
   return(rates_total);
   }
Notez que la flèche est dessinée vers l'arrière BufferDn[i+1]=... C'est regrettable.
Raison: