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

 
psyman:

Ho letto la vostra corrispondenza derivante dal mio argomento, è tutto divertente :-) ma che dire della domanda che ha causato tutto questo brusio?

Dichiarare un array tramiteSetIndexBuffer(1, tmp1) non mi dà nulla. Naturalmente, posso aumentare la dimensione dell'array nello stesso ciclo, ma voglio conoscere un modo più semplice ed efficiente.

Mostrami il codice per intero - cosa hai fatto lì, cosa volevi e cosa hai ottenuto.

 

Voglio osservare la volatilità. Almeno l'open-close per cominciare, la media su un periodo è fatta usando le SMA.


//+------------------------------------------------------------------+
//|                                                        _null.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot OC
#property indicator_label1  "O-C"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrSteelBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         ip1Buf[];

input int ip1=100;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  
string s_name1;

s_name1="O-C (" + IntegerToString(ip1) + ")";

IndicatorShortName(s_name1);
SetIndexLabel(0, s_name1);


//--- indicator buffers mapping
   SetIndexBuffer(0,ip1Buf);
   
//---
   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[])
  {


int i;
double tmp1[];

SetIndexBuffer(1, tmp1);


      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total-1; i++)
      {
      tmp1[i]=close[i];      
      ip1Buf[i]=iMA(NULL,0,100,0,0,tmp1[i],0);
      
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
psyman:

Voglio osservare la volatilità. Almeno open-close per iniziare, la media su un periodo è fatta con SMA.


SetIndexBuffer(1, tmp1) perché non in OnInit() ?

Perché nessun IndicatorBuffers(2) ?

Perché non lo calcola in modo ottimale? C'è un ciclo completo su ogni tick.

Perché iMA() e non iMAOnArray()?

 

=Perchénessun IndicatorBuffers(2)?


#property strict non se ne lamenta, probabilmente è per questo che non l'ho scritto.


=PerchéiMA() e non iMAOnArray()?


Non ho abbastanza conoscenze e il libro di testo non dice nulla al riguardo.

La mancanza di conoscenza del sistema è una grave limitazione.


=Ciclo completosu ogni tick.


Non ci capisco niente, per favore spiegatemi perché o datemi un link dove si fa.

Ho un minimo di un'ora di TF.

 
=На ogni tick è un ciclo completo.


Non capisco niente di tutto questo, per favore spiegatelo o datemi un link dove si fa.

Ho un TF minimo di un'ora.

Ad ogni chiamata a OnCalculate avete il ciclo for per scorrere i dati da 1 a rates_total, cioè fare lo stesso lavoro. Questo, ovviamente, è un male.

 
psyman:

=Perchénessun IndicatorBuffers(2) ?


#property strict non se ne lamenta, probabilmente è per questo che non l'ho scritto.


=PerchéiMA() e non iMAOnArray()?


Non ho abbastanza conoscenze e il libro di testo non dice nulla al riguardo.

La mancanza di conoscenza del sistema è una grave limitazione.


=Ciclo completosu ogni tick.


Non ci capisco niente, per favore spiegatemi perché o datemi un link dove si fa.

Ho un minimo di un'ora di TF.

Sai, ho allegato un modello di indicatore proprio in questo thread - da qualche parte nel mezzo - puoi trovarlo e farne quello che vuoi. Cercatelo. Ho anche scritto che molte volte la gente è interessata a quello che succede, così ho deciso di fare un modello di indicatore e metterlo in questo thread.

 

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici

Andrei Novichkov, 2018.10.17 22:06

Ad ogni chiamata a OnCalculate avete un ciclo for per setacciare i dati da 1 a rates_total, cioè fare lo stesso lavoro. Questo è certamente un male.


Se dici che è male, dimmi come farlo bene. Volete spostare i calcoli su OnInit?

 

Forum sul trading, sistemi di trading automatico e test di strategia

Qualsiasi domanda per i neofiti su MQL4, aiuto e discussione su algoritmi e codici

Artyom Trishkin, 2018.10.17 22:10

Sai, ho direttamente in questo ramo - da qualche parte nel mezzo di esso, allegato un modello di indicatore - puoi trovarlo, e fare direttamente da esso ciò che vuoi. Cercatelo. Ho scritto che molte persone sono interessate a come funziona e ho deciso di fare un modello di indicatore e metterlo in questo thread.


Cercando le parole "indicator template" e il tuo nome non trova nulla, e ha scritto qui già sul volume di Guerra e Pace.

Mi viene in mente qualsiasi combinazione di parole del post.

 
Come creare un array di istanze di classe?
Fatto ClassName* className[], poi ArrayResize su di esso, ma non dà accesso ai metodi con puntatore non valido
 
Roman Sharanov:
Come creare un array di istanze di classe?
Fatto ClassName* className[], poi ArrayResize su di esso, ma non dà accesso ai metodi con puntatore non valido

C'è un esempio inCArrayObj