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

 
Sergey Voytsekhovsky:

そうですね、確かに。 それは気がつきませんでした。見た目がよくなり、文字数も少なくなりました。

3つのバージョン(正しい言い方が わからない)を1つのオペレーターの下に置く方法はないのでしょうか?

中括弧のみ - 条件を限定するものです。

 
int a,b,c,d,e,f,g,j;
a=10;
b=5;
d=3;
f=4;
j=1;
a>b?{c=d;e=f;g=j}:{c=0;e=0;g=0};
Print("c=",c," e=",e," g=",g);

こんなデザインを描こうとしたら、コンパイラが何か嫌な匂いをまき散らしてきたんです。どこが間違いなのか?

 
Sergey Voytsekhovsky:

UURRAA、そして魂は歌った。アレクセイ、どうもありがとう !!!!

すべてうまくいきました。配列がないとどう なるのかよくわかりませんが

その記述が削除されたためでは、ここにある余分な配列はまったくなくてもいいのですね。


#property indicator_color3  clrGreen,clrRed

これがその配列です。

 
Sergey Voytsekhovsky:

そうですね、確かに。 それは気がつきませんでした。見た目がよくなり、文字数も少なくなりました。

3つのバージョン(正しい言い方が わからない)を1つのオペレーターの下に置く方法はないのでしょうか?

はい、できます。2つのユーザー定義関数を作成し、それらを呼び出します。

int m = 5;//0;//
m = m == 0 ? f1 : f2;

int f1()
 {
  return(1);
 }
int f2()
 {
  return(2);
 }
 
Konstantin Nikitin:

そういうことなんです。よし、これで終わりだ。彼が知っている限りは...

了解です、ありがとうございます。
ただ、混乱しているんです。すべて初めての経験です。

 
Alexey Viktorov:

できます。2つのカスタム関数を作成し、それらを呼び出します。

ちゃんと理解できたかな?

ColorHistogram_2Colors[i]=ExtMainBuffer[i]>=50?ColorUp(i):ColorDown(i);
//+------------------------------------------------------------------+ 
int ColorUp(int i)
 {
   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
  return(0);
 }
int ColorDown(int i)
 {
   ColorHistogram_2Buffer1[i]=ExtMainBuffer[i];
   ColorHistogram_2Buffer2[i]=50;
  return(1);
 }

インジケータでそうしました - うまくいきました。

 
Sergey Voytsekhovsky:

ちゃんと理解できたかな?

インジケーターでそう処方したのですが......効きますね。

うまくいけば、それが正しいのです。しかし、私はそのようなやり方はしません。

まず、バッファの変更はしない。無条件で常にどちらかに50を書き込めば十分です。

そして、2番目のバッファには、50より大きいか小さいかの値を入れます。そして、条件<=>では、色のみを指定すること。また、別機能はありません。

 
Alexey Viktorov:

うまくいけば、それが正しいのです。でも、こんなやり方はありえない。

まず、=50でバッファの派手な変更はしない。無条件で常にどちらかに50を書き込めば十分です。

そして、2つ目のバッファに50より大きいか小さいかの値を設定する。そして、条件<=>では、色を割り当てるだけでよい。また、別機能はありません。

条件<>50が色だけを定義するのであれば同意しますが、ヒストグラム・キャンドルの始まり/終わりでもあるのです。ですから、私は反論せず、おそらくあなたが正しいのでしょうが、確認してみようと思います。

 
Alexey Viktorov:

うまくいけば、それが正しいのです。でも、そんなことではダメなんです。

はい、確かに、キャンドルの開始/終了を定義する2つのDRAW_COLOR_HISTOGRAM2バッファのいずれかを開始または終了にすることができます。今はすべてがシンプルになりました。

   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
   ColorHistogram_2Colors [i]=ExtMainBuffer[i]>=50?0:1;

サイエンスに感謝します。

 

モード切替時にINDICATOR_MAXIMUMとINDICATOR_MINIMUMの値をリセットする方法を教えてください。

ポイントは、これらの値があるモードでは使われ、他のモードでは使われないという点です。これらの最大値、最小値が不要なモードに切り替えると、なぜか保存される。この問題は、MQL4とMQL5の両方に存在します。

例えば、最初のモードでインジケータを実行する場合、境界線は必要なく、すべてが正しく動作します。

2番目のモードは、インジケータウィンドウの 最大と最小の 境界を設定します。最初のモードから2番目のモードへ切り替えると、すべてが正しく機能します


しかし、2番目のモードから1番目のモードに切り替えると(1番目のモードでは境界線は使用されません)、これらの最大値と最小値が保存され、ユーザーは実際の指標値を見ることができません。


MQL4でのコードは添付ファイルの通りです。

このような悩みをお持ちの方はいらっしゃいませんか?どなたか解決方法をご存じないでしょうか?

ファイル:
test.mq4  4 kb