Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 787

 

Trovato uno strano inconveniente quando si disegna sul grafico MT5: le frecce invece delle candele basse sono posizionate in luoghi arbitrari, come se fossero spostate sul grafico




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

Trovato uno strano inconveniente quando si disegna sul grafico MT5: le frecce invece delle candele basse sono posizionate in luoghi arbitrari, come se fossero spostate sul grafico




1. L'indicatore ha già una matrice bassa. Deve essere applicato.

2. Non è necessario eseguire la visualizzazione alla massima velocità.

3. Il codice è terribilmente glitch - perché ad ogni tick c'è un passaggio attraverso TUTTE le barre.

 
Vladimir Karputov:

1. L'indicatore ha già una matrice bassa. Applicalo.

2. Non è necessario eseguire la visualizzazione alla massima velocità.

3. Il codice è terribilmente glitch - perché ad ogni tick c'è un passaggio attraverso TUTTE le barre.

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1. L'indicatore ha già una matrice bassa. Applicalo.

2. Non è necessario eseguire la visualizzazione alla massima velocità.

3. Il codice è terribilmente glitch - perché ad ogni tick c'è un passaggio attraverso TUTTE le barre.

Non ho postato il codice qui, ma ho scritto quello più semplice per semplificare l'analisi.

Dimmi di più su ciò che è sbagliato, sulla velocità massima non è chiaro.

 
Vitaly Muzichenko:

Vitaly, l'inizializzazione non funziona per qualche motivo. Ho provato a scriverePlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); neanche questo funziona :(

 
psyman:

Non ho postato il codice qui, ma ho scritto quello più semplice per semplificare l'analisi.

Dimmi di più su ciò che non va, la velocità massima non è chiara.

Iniziate a correggerlo un passo alla volta. Per esempio, sistematelo prima:

L'indicatore ha già un array basso. Dovete applicarlo.

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow funziona come serie true, Buf_0 è false, low[] è anche false. Cioè l'elemento 0 nel vostro caso ottiene rates_total-1 (speculare)

Dovete girarne uno, per esempio:

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

Trovato uno strano inconveniente quando si disegna sul grafico MT5: le frecce invece delle candele basse sono posizionate in luoghi arbitrari, come se fossero spostate sul grafico



Conoscere l'indovinello sulle mele da Pinocchio aiuterà sicuramente a risolvere questo problema. Non lo ricordo in dettaglio, aspetteremo che qualcuno lo racconti senza errori.

 
Igor Zakharov:

iLow funziona come serie true, Buf_0 è falso, low[] è anche falso. Cioè l'elemento 0 nel vostro caso ottiene rates_total-1 (speculare)

Dovete girarne uno, per esempio:

Questo è un indicatore! Ci sono già degli array in OnCalculate.

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

Perché dovreste stipare le funzioni iXXXX in un indicatore?

 
Vladimir Karputov:

Questo è un indicatore! OnCalculate ha già degli array

Perché mettere le funzioni iXXXXXXXX in un indicatore?

Come faccio a saperlo? L'interrogante ha usato iLow(), significa che ne ha bisogno. Forse è più facile da percepire, forse ha intenzione di indirizzare un altro simbolo o un periodo di tempo attraverso una variabile di ingresso (non ricordo, c'è una copia in quattro?)

Aggiunto: la domanda sul cinque è stata posta nel thread del quaternario. L'ho trascurato, mi pento. Ma la risposta è sempre la stessa.