Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 669

 
psyman:

He leído su correspondencia a raíz de mi tema, todo es divertido :-) pero ¿qué pasa con la pregunta que causó todo este revuelo?

Declarar un array medianteSetIndexBuffer(1, tmp1) no me da nada. Por supuesto, puedo aumentar el tamaño del array en el mismo bucle, pero quiero conocer una forma más sencilla y eficiente.

Muéstrame el código completo: lo que has hecho ahí, lo que querías y lo que has conseguido.

 

Quiero vigilar la volatilidad. Por lo menos, para empezar, el promedio de un período se hace con las 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:

Quiero vigilar la volatilidad. Por lo menos, para empezar, la apertura y el cierre, el promedio de un período se hace con SMA.


SetIndexBuffer(1, tmp1) ¿por qué no en OnInit() ?

¿Por qué no hay IndicatorBuffers(2)?

¿Por qué no lo calculas de forma óptima? Hay un bucle completo en cada garrapata.

¿Por qué iMA() y no iMAOnArray()?

 

=¿Por quéno hay IndicatorBuffers(2) ?


#property strict no se queja de ello, probablemente por eso no lo he escrito.


=¿Por quéiMA() y no iMAOnArray()?


No tengo suficientes conocimientos y el libro de texto no dice nada al respecto.

La falta de conocimiento del sistema es una grave limitación.


=Bucle completoen cada tic.


No entiendo nada al respecto, por favor, explicadme por qué o dadme un enlace de dónde se hace.

Tengo un TF mínimo de una hora.

 
=На cada tic es un ciclo completo.


No entiendo nada de esto, por favor, explicadlo o dadme un enlace donde se haga.

Tengo un TF mínimo de una hora.

En cada llamada a OnCalculate tienes el bucle for para recorrer los datos desde 1 hasta rates_total, es decir, hacer el mismo trabajo. Esto, por supuesto, es algo malo.

 
psyman:

=¿Por quéno hay IndicatorBuffers(2) ?


#property strict no se queja de ello, probablemente por eso no lo he escrito.


=¿Por quéiMA() y no iMAOnArray()?


No tengo suficientes conocimientos y el libro de texto no dice nada al respecto.

La falta de conocimiento del sistema es una grave limitación.


=Bucle completoen cada tic.


No entiendo nada de eso, por favor, explíquenme o denme un enlace donde se haga.

Tengo un TF mínimo de una hora.

Sabes, adjunté una plantilla de indicador justo en este hilo -en algún lugar de la mitad- puedes encontrarla y hacer lo que quieras con ella. Búscalo. También escribí que muchas veces la gente se interesa por lo que pasa, así que decidí hacer una plantilla de indicadores y ponerla en este hilo.

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta de los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos

Andrei Novichkov, 2018.10.17 22:06

En cada llamada a OnCalculate tienes un bucle for para recorrer los datos desde 1 hasta rates_total, es decir, haciendo el mismo trabajo. Esto es ciertamente algo malo.


Si dices que es malo, dime cómo hacerlo bien. ¿Debo trasladar los cálculos a OnInit?

 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta para los novatos en MQL4, ayuda y discusión sobre algoritmos y códigos

Artyom Trishkin, 2018.10.17 22:10

Usted sabe, yo directamente en esta rama - en algún lugar en el medio de ella, adjunta una plantilla de indicador - se puede encontrar, y hacer directamente de ella lo que quiere. Búscalo. He escrito que mucha gente está interesada en cómo funciona y por eso he decidido hacer una plantilla de indicadores y ponerla en este hilo.


Buscando las palabras "plantilla de indicadores" y su nombre no encuentra nada, y escribió aquí ya sobre el volumen de Guerra y Paz.

Me viene a la mente cualquier combinación de palabras del post.

 
¿Cómo crear una matriz de instancias de clase?
Hecho ClassName* className[], luego ArrayResize en él, pero no da acceso de puntero inválido a los métodos
 
Roman Sharanov:
¿Cómo crear una matriz de instancias de clase?
Hecho ClassName* className[], luego ArrayResize en él, pero no da acceso de puntero inválido a los métodos

Hay un ejemplo enCArrayObj

Razón de la queja: