Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 224

 
Nell'Expert Advisor, le prime righe di
OnTick()

Dopo queste linee, altro codice sarà eseguito una volta per ogni candela. Al momento della sua formazione.

Chiamate questo indicatore dall'EA, se ho capito bene?

 
Aleksei Stepanenko:
Nell'Expert Advisor, le prime righe di

Dopo queste linee, altro codice sarà eseguito una volta per ogni candela. Al momento della sua formazione.

Stai chiamando questo indicatore dall'EA, se ho capito bene?

Beh, in realtà, inserisco questo indicatore in un altro indicatore che invia il segnale ad un altro programma. Cioè, non c'è nessun Expert Advisor. Cioè, dovrebbe essere inserito da qualche parte nell'indicatore stesso, ma come?
 
Quale programma apre le offerte? È un consigliere. Non è vero?
 
Aleksei Stepanenko:
E quale programma apre l'affare? È l'Expert Advisor. Non è vero?

Ah, beh, forse... Ma poi le cose sembrano diventare molto più complicate... Non c'è modo di incorporarlo in questo codice, vero? E non c'è nemmeno il codice del secondo indicatore.

OnTick()
Come diavolo funziona...:)))))
 
Puoi provare un altro modo, dove chiami questo indicatore tramite iCustom, metti anche 1 alla fine di questa funzione invece di 0.
 
A proposito, l'indicatore disegna ancora molte frecce, ma quando ricarico il grafico, ne rimangono solo alcune. :( Come se l'indicatore si salvasse sulla storia, come se guardasse come faccio trading bene, ma in tempo reale è completamente diverso. :(
 
ElenkaVladi:
A proposito, l'indicatore disegna ancora un sacco di frecce,

Sì? Hmm, gli darò un'occhiata più tardi.

 
Aleksei Stepanenko:
Puoi provare un altro modo, dove chiami questo indicatore tramite iCustom, metti anche 1 alla fine di questa funzione invece di 0.

Vuoi dire come questo?

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);

Come questo?

 
Aleksei Stepanenko:

Sì? Hmm, gli darò un'occhiata più tardi.

Forse è quel messaggio. Non dovremmo fare quello che c'è scritto?

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

Ad ogni modo, grazie mille per averci fatto divertire qui... :)))

Allegando i file per una migliore comprensione della situazione.

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

Ecco il codice funzionante:

//---- 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);
   }
Notate che la freccia è disegnata all'indietro BufferDn[i+1]=... Questo è un peccato.