MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 881

 
Nesneleri kriterlere göre gizleme ihtiyacı vardır. Grafikteki nesneleri (çoğunlukla çizgiler) nasıl gizleyebilirim? Nesneler önek ile seçilebilir.
 
Seric29 :
Nesneleri kriterlere göre gizleme ihtiyacı vardır. Grafikteki nesneleri (çoğunlukla çizgiler) nasıl gizleyebilirim? Nesneler önek ile seçilebilir.

OBJPROP_TIMEFRAMES bu görevde size yardımcı olacaktır. Ama hepsi bir demet halinde değil, her seferinde bir döngüde.

 
Alexey Viktorov :

OBJPROP_TIMEFRAMES bu görevde size yardımcı olacaktır. Ama hepsi bir demet halinde değil, her seferinde bir döngüde.

Bunu yapacağım, periyotlara göre gösterimi istiyorum ve deneyeceğim, tavsiye için teşekkürler.

 

Program nasıl daha hızlı çalışacak?

1 inci. var.- evrensel işlevler yazarsanız. Bu durumda çek sayısı artar, ancak kod miktarı azalır, çünkü sonunda, daha az işlev daha az değişken başlatılır, ancak daha önce belirtilen bir eksi vardır.

2. varyant - daha az karmaşık hesaplamalar üretecek daha fazla fonksiyon yazarsanız. Bu durumda, kod miktarı artar ve dahası, çok daha fazla değişken başlatılır ve derleyici, istenen işlevi bulmak için genellikle kodu boşta çalıştırmak zorunda kalır, ancak bir artı vardır, kontrol sayısı azalır.

Bunun hakkında kim düşünüyor?

 
Seric29 :

Program nasıl daha hızlı çalışacak?

1 inci. var.- evrensel işlevler yazarsanız. Bu durumda çek sayısı artar, ancak kod miktarı azalır, çünkü sonunda, daha az işlev daha az değişken başlatılır, ancak daha önce belirtilen bir eksi vardır.

2. varyant - daha az karmaşık hesaplamalar üretecek daha fazla fonksiyon yazarsanız. Bu durumda, kod miktarı artar ve dahası, çok daha fazla değişken başlatılır ve derleyici, istenen işlevi bulmak için genellikle kodu boşta çalıştırmak zorunda kalır, ancak bir artı vardır, kontrol sayısı azalır.

Bunun hakkında kim düşünüyor?

Seçenek 2, çok sayıda küçük işlev, ancak 2 ay sonra derleyicinin yorumlayıcıdan ne kadar farklı olduğunu anlamayacaksınız, derleyici kodu boşta çalıştırmaz, işlevler, değişkenler, sabitler için bağlantı tabloları oluşturur ... ve daha sonra yürütmeye atlamak için bu tabloları kullanır

buradan okuyun https://habr.com/ru/company/intel/blog/143446/

burada geliştiriciler aynı şeyi bir yere yazdı, konuyu arayın https://www.mql5.com/ru/forum/304239/page36#comment_11049194


Not: derleyici şu şekilde çalışır https://habr.com/en/sandbox/114988/

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

Harika. DRAW_HISTOGRAM2'yi görmek ve DRAW_COLOR_HISTOGRAM2'yi görmemek için belgeleri nasıl okuyabilirsiniz?

Evet ve ekstra arabellekler duyuruldu.

İyi akşamlar. Uzun ve zor denedi. Histogramlar doğru çizilir, ancak farklı renklerde boyama (seviye 50'nin üstünde ve altında) kazanmadı. Lütfen bana nerede hata yaptığımı söyle. Aşağıdaki metin, dosya bağlı

 //+------------------------------------------------------------------+
//|                                       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);
  }
//+------------------------------------------------------------------+ 

Dosyalar:
 
Sergey Voytsekhovsky :

İyi akşamlar. Uzun ve zor denedi. Histogramlar doğru çizilir, ancak farklı renklerde boyama (seviye 50'nin üstünde ve altında) kazanmadı. Lütfen bana nerede hata yaptığımı söyle. Aşağıdaki metin, dosya bağlı


Hata ayıklama modunda, değerleri adım adım inceledim:

  • ExtMainBuffer[i]
  • cl
  • ColorHistogram_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistogram_2Colors[i]
Görünüşe göre her şey doğru, ancak histogramlar sadece yeşil, 50'nin altındakiler kırmızıya dönmüyor.
 
Sergey Voytsekhovsky :

Hata ayıklama modunda, değerleri adım adım inceledim:

  • ExtMainBuffer[i]
  • cl
  • ColorHistogram_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistogram_2Colors[i]
Görünüşe göre her şey doğru, ancak histogram sadece yeşil, 50'nin altındakiler kırmızıya dönmüyor.
 
Sergey Voytsekhovsky :

Hata ayıklama modunda, değerleri adım adım inceledim:

  • ExtMainBuffer[i]
  • cl
  • ColorHistogram_2Buffer1[i]
  • ColorHistogram_2Buffer2[i]
  • ColorHistogram_2Colors[i]
Görünüşe göre her şey doğru, ancak histogramlar sadece yeşil, 50'nin altındakiler kırmızıya dönmüyor.
Kodu Keşfedin
Normalized_Volume
Normalized_Volume
  • www.mql5.com
Индикатор Normalized Volume - индикатор нормализованного объёма. Отображает средний объём в диапазоне баров в виде цветной гистограммы с пороговым уровнем. Имеет два настраиваемых параметра:
 
Igor Makanu :

ama çekicisin...

Bu anlaşılabilir bir durum, programı mecazi olarak derleyici olarak adlandırdım, ancak genel olarak, hangi durumda daha iyi olurdu?