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

 
Es necesario ocultar los objetos según un criterio. ¿Cómo puedo ocultar objetos en un gráfico (principalmente líneas)? Los objetos se pueden seleccionar por prefijo.
 
Seric29:
Es necesario ocultar los objetos según un criterio. ¿Cómo puedo ocultar objetos en un gráfico (principalmente líneas)? Los objetos se pueden seleccionar por prefijo.

OBJPROP_TIMEFRAMES ayuda a hacerlo. Pero no todos en un montón, sino en un bucle uno por uno.

 
Alexey Viktorov:

OBJPROP_TIMEFRAMES ayudaría a ello. Pero no todos en un montón, sino en un bucle de uno en uno.

Así lo haré, quiero un mapeo periodo a periodo y experimentaré, gracias por el consejo.

 

¿Cómo va a funcionar el programa más rápido?

1. var.- si escribes funciones universales. En este caso, el número de comprobaciones aumenta, pero la cantidad de código disminuye, porque al final hay menos funciones, menos variables inicializadas, pero hay una desventaja mencionada anteriormente.

La segunda variante es si escribimos más funciones que realicen cálculos menos complejos. En este caso, la cantidad de código aumenta, se inicializan más variables y el compilador tendrá que ejecutar el código sin hacer nada para encontrar la función deseada, pero hay un plus, el número de comprobaciones disminuye.

¿Quién piensa en ello?

 
Seric29:

¿Cómo va a funcionar el programa más rápido?

1. var.- si escribes funciones universales. En este caso, el número de comprobaciones aumenta, pero la cantidad de código disminuye, porque al final hay menos funciones, menos variables inicializadas, pero hay una desventaja mencionada anteriormente.

La segunda variante es si escribimos más funciones que realicen cálculos menos complejos. En este caso, la cantidad de código aumenta, se inicializan más variables y el compilador tendrá que ejecutar código ociosamente a menudo para encontrar la función correcta, pero hay un plus, el número de comprobaciones disminuye.

¿Quién piensa en ello?

2ª opción, un montón de pequeñas funciones, pero te faltan 2 meses para entender la diferencia entre compilador e intérprete, el compilador no ejecuta código sin hacer nada, crea tablas de enlaces a funciones, variables, constantes... y luego utiliza esas tablas para saltar en tiempo de ejecución

aquí leerhttps://habr.com/ru/company/intel/blog/143446/

los desarrolladores escribieron lo mismo aquí en algún lugar buscar el hilohttps://www.mql5.com/ru/forum/304239/page36#comment_11049194


SZZ: así es como funciona el compiladorhttps://habr.com/ru/sandbox/114988/

Делиться не всегда полезно: оптимизируем работу с кэш-памятью
Делиться не всегда полезно: оптимизируем работу с кэш-памятью
  • habr.com
Делиться с ближним своим для нас, божьих тварей, это очень характерно, считается добродетелью, и вообще, как утверждает первоисточник, положительно отражается на карме. Однако в мире, созданном архитекторами микропроцессоров, такое поведение не всегда приводит к хорошим результатам, особенно если это касается разделения памяти между потоками...
 
Alexey Viktorov:

Es simplemente increíble. ¿Cómo se puede leer la documentación para ver DRAW_HISTOGRAM2 y no ver DRAW_COLOR_HISTOGRAM2

Ah, y se han declarado topes adicionales.

Buenas noches. Lo he intentado durante mucho tiempo y en vano. El histograma se dibuja correctamente, pero la coloración en diferentes colores (por encima y por debajo del nivel 50) no ha ganado. Por favor, dígame dónde he metido la pata. Texto abajo, el archivo está enlazado.

//+------------------------------------------------------------------+
//|                                       Stoch_HISTOGRAM_MQL5_4.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_plots   3

#property indicator_type1   DRAW_LINE       // основная
#property indicator_color1  clrLightSeaGreen
#property indicator_style1  STYLE_SOLID

#property indicator_type2   DRAW_LINE       // сигнальная
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID

#property indicator_type3   DRAW_COLOR_HISTOGRAM2
#property indicator_color3  clrGreen,clrRed
#property indicator_style3  STYLE_SOLID

#property indicator_width1  3 
#property indicator_width2  2 
#property indicator_width3  1 
//--- input parameters
input int InpKPeriod=5;  // K period
input int InpDPeriod=3;  // D period
input int InpSlowing=3;  // Slowing
//--- indicator buffers
double    ExtMainBuffer[];
double    ExtSignalBuffer[];
double    ColorHistogram_2Buffer1[]; 
double    ColorHistogram_2Buffer2[]; 
double    ExtHighesBuffer[];
double    ExtLowesBuffer[];
double    ColorHistogram_2Colors[];
color     colors[]={clrRed,clrGreen};
int       cl;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMainBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ColorHistogram_2Buffer1,INDICATOR_DATA);
   SetIndexBuffer(3,ColorHistogram_2Buffer2,INDICATOR_DATA);
   SetIndexBuffer(4,ExtHighesBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,ExtLowesBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(6,ColorHistogram_2Colors,INDICATOR_COLOR_INDEX);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set levels
   IndicatorSetInteger(INDICATOR_LEVELS,3);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,2,80);
////--- установим пустое значение для HISTOGRAM2
//   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);   
//--- set maximum and minimum for subwindow 
   IndicatorSetDouble(INDICATOR_MINIMUM,0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Stoch_HISTOGRAM("+(string)InpKPeriod+","+(string)InpDPeriod+","+(string)InpSlowing+")");
   //PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);
   PlotIndexSetString(0,PLOT_LABEL,"Main");
   PlotIndexSetString(1,PLOT_LABEL,"Signal");
   PlotIndexSetString(2,PLOT_LABEL,"UP");
   PlotIndexSetString(3,PLOT_LABEL,"LOW");
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpKPeriod+InpDPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Stochastic Oscillator                                            |
//+------------------------------------------------------------------+
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,k,start;
   
   //PlotIndexSetInteger(2,PLOT_LINE_COLOR,0);
   
//--- check for bars count
   if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
      return(0);
//---
   start=InpKPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++)
        {
         ExtLowesBuffer[i]=0.0;
         ExtHighesBuffer[i]=0.0;
        }
     }
//--- calculate HighesBuffer[] and ExtHighesBuffer[]
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1;k<=i;k++)
        {
         if(dmin>low[k])  dmin=low[k];
         if(dmax<high[k]) dmax=high[k];
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }
//--- %K
   start=InpKPeriod-1+InpSlowing-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtMainBuffer[i]=0.0;
     }
//--- main cycle
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sumlow=0.0;
      double sumhigh=0.0;
      for(k=(i-InpSlowing+1);k<=i;k++)
        {
         sumlow +=(close[k]-ExtLowesBuffer[k]);
         sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
        }
      if(sumhigh==0.0) ExtMainBuffer[i]=100.0;
         else          ExtMainBuffer[i]=sumlow/sumhigh*100;
      if(ExtMainBuffer[i]>50){
         cl=0;
         ColorHistogram_2Buffer1[i]=50; 
         ColorHistogram_2Buffer2[i]=ExtMainBuffer[i]; 
         ColorHistogram_2Colors[i]=colors[cl];
         } 
      if(ExtMainBuffer[i]<50){
         cl=1;
         ColorHistogram_2Buffer1[i]=ExtMainBuffer[i]; 
         ColorHistogram_2Buffer2[i]=50; 
         ColorHistogram_2Colors[i]=colors[cl];
         } 
     }
//--- signal
   start=InpDPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtSignalBuffer[i]=0.0;
     }
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sum=0.0;
      for(k=0;k<InpDPeriod;k++) sum+=ExtMainBuffer[i-k];
      ExtSignalBuffer[i]=sum/InpDPeriod;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+ 

Archivos adjuntos:
 
Sergey Voytsekhovsky:

Buenas noches. Lo he intentado durante mucho tiempo y en vano. El histograma se dibuja correctamente, pero la coloración en diferentes colores (por encima y por debajo del nivel 50) no ha ganado. Por favor, dígame dónde he metido la pata. Texto abajo, el archivo está enlazado.


En el modo de depuración estuve mirando los valores paso a paso:

  • ExtMainBuffer[i]
  • cl
  • ColorHistograma_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistograma_2Colores[i]
Parece que lo hace todo bien, pero los gráficos de barras sólo son verdes, los que están por debajo de 50 no están coloreados en rojo.
 
Sergey Voytsekhovsky:

En el modo de depuración, mira los valores paso a paso:

  • ExtMainBuffer[i]
  • cl
  • ColorHistograma_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistograma_2Colores[i]
Parece que cuenta correctamente, pero los histogramas sólo son verdes, los que están por debajo de 50 no se colorean de rojo.
 
Sergey Voytsekhovsky:

En el modo de depuración, mira los valores paso a paso:

  • ExtMainBuffer[i]
  • cl
  • ColorHistograma_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistograma_2Colores[i]
Parece que lo hace todo bien, pero los histogramas sólo son verdes, los que están por debajo de 50 no están coloreados en rojo.
Compruebe el código
Normalized_Volume
Normalized_Volume
  • www.mql5.com
Индикатор Normalized Volume - индикатор нормализованного объёма. Отображает средний объём в диапазоне баров в виде цветной гистограммы с пороговым уровнем. Имеет два настраиваемых параметра:
 
Igor Makanu:

pero estás en el tirón ...

Bueno, es comprensible, acabo de llamar al programa compilador de forma figurada, pero en general, ¿en qué caso sería mejor?

Razón de la queja: