MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 881

 
ある基準でモノを隠したいという ニーズがあります。グラフ上のオブジェクト(主に線)を非表示にするにはどうすればよいですか?プリフィックスでオブジェクトを選択することができます。
 
Seric29:
基準でモノを 隠す必要性がある。グラフ上のオブジェクト(主に線)を非表示にするにはどうすればよいですか?オブジェクトはプレフィックスで選択することができます。

OBJPROP_TIMEFRAMESは、それを支援します。でも、全部が束になってではなく、ひとつひとつがループしているんです。

 
Alexey Viktorov:

OBJPROP_TIMEFRAMESがあれば、そのようなことはないでしょう。でも、全部が束になってではなく、1つずつループしているんです。

そうします、期間ごとのマッピングが欲しいので実験してみます、アドバイスありがとうございました。

 

プログラムの実行速度はどうなるのでしょうか?

1.var.-ユニバーサル関数を書く場合。この場合、チェックの回数は増えますが、最終的に関数や初期化される変数が少なくなるため、コード量は減りますが、先に述べたデメリットがあります。

2つ目のバリエーションは、より複雑でない計算を行う関数をより多く書く場合である。この場合、コード量は増え、変数の初期化も増え、コンパイラは正しい関数を見つけるために頻繁にコードを無為に実行しなければならなくなるが、チェックの回数が減るというプラス面もある。

誰が考えているのか?

 
Seric29:

プログラムの実行速度はどうなるのでしょうか?

1.var.-ユニバーサル関数を書く場合。この場合、チェックの回数は増えますが、最終的に関数や初期化される変数が少なくなるため、コード量は減りますが、先に述べたデメリットがあります。

2つ目のバリエーションは、より複雑でない計算を行う関数をより多く書く場合である。この場合、コード量は増え、変数の初期化も増え、コンパイラは正しい関数を見つけるために頻繁にコードを無為に実行しなければならなくなるが、チェックの回数が減るというプラス面もある。

誰が考えているのか?

2番目のオプションは、多くの小さな関数ですが、あなたは、コンパイラとインタプリタの違いを理解するのに2ヶ月かかります、コンパイラは、コードを漫然と実行するのではなく、関数、変数、定数...へのリンクのテーブルを作成します。そして、それらのテーブルを使用して実行時にジャンプします

ここで、https://habr.com/ru/company/intel/blog/143446/ をお読みください。

開発者が同じことを書いているスレッドがありますhttps://www.mql5.com/ru/forum/304239/page36#comment_11049194


SZZ:コンパイラの仕組みはこうなっているhttps://habr.com/ru/sandbox/114988/

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

とにかくすごいんです。ドキュメントを読むとDRAW_HISTOGRAM2が表示され、DRAW_COLOR_HISTOGRAM2が表示されないのはどうしてですか?

あ、あとバッファが余分に宣言されています。

こんばんは。長い間試行錯誤を繰り返したが、無駄だった。ヒストグラムは正しく描画されますが、異なる色(レベル50以上と以下)での色付けは勝ち目がありません。どこで失敗したのか教えてください。テキストは以下、ファイルはリンク先です。

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

ファイル:
 
Sergey Voytsekhovsky:

こんばんは。長い間試行錯誤を繰り返したが、無駄だった。ヒストグラムは正しく描画されますが、異なる色(レベル50以上と以下)での色付けは勝ち目がありません。どこで失敗したのか教えてください。テキストは以下、ファイルはリンク先です。


デバッグモードで、一歩一歩値を調べていたのです。

  • ExtMainBuffer[i](エクストメインバッファー)。
  • クリップ
  • ColorHistogram_2Buffer1[i]。
  • ColorHistogram_2Buffer2[i]。
  • ColorHistogram_2Colors[i]の場合
すべて正しく表示されているようですが、棒グラフは緑色だけで、50以下のものは赤色に着色されていません。
 
Sergey Voytsekhovsky:

デバッグモードで、順を追って値を調べていった。

  • ExtMainBuffer[i](エクストメインバッファー)。
  • クリップ
  • ColorHistogram_2Buffer1[i]。
  • ColorHistogram_2Buffer2[i]。
  • ColorHistogram_2Colors[i]の場合
正しくカウントされているようですが、ヒストグラムは緑色のみで、50以下のものは赤色に着色されません。
 
Sergey Voytsekhovsky:

デバッグモードで、順を追って値を調べていった。

  • ExtMainBuffer[i](エクストメインバッファー)。
  • クリップ
  • ColorHistogram_2Buffer1[i]。
  • ColorHistogram_2Buffer2[i]。
  • ColorHistogram_2Colors[i]の場合
すべて正しく表示されているようですが、ヒストグラムは緑色のみで、50以下のものは赤色で表示されないのです。
コードを見てみましょう
Normalized_Volume
Normalized_Volume
  • www.mql5.com
Индикатор Normalized Volume - индикатор нормализованного объёма. Отображает средний объём в диапазоне баров в виде цветной гистограммы с пороговым уровнем. Имеет два настраиваемых параметра:
 
Igor Makanu:

と思ったら、引いてる・・・。

まあそれは理解できるのですが、私はプログラムを比喩的にコンパイラと呼んだだけで、一般的にはどのようなケースが良いのでしょうか?