標準インジケーターの色

Mikhail Filimonov  

こんにちは。

標準インジケーターの色を変えるには?

ミハイルさん、ありがとうございました。

Yedelkin  
Mikalas:

標準のインジケータープログラムの色を変更するにはどうすればよいですか?

今までやったことがないのですが、こんなアイデアもあります。標準のインジケータのコードを開いて、indicator_color*の 行を見つける必要があります。

みたいな感じ。

//--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

そして、必要な色を入れることになります。MQL5 Reference / Custom Indicators / Indicator Properties and Functions andMQL5 Reference / Standard Constants, Enumer and Structures / Indicator Constants / Drawing Styles も参照してください。

Mikhail Filimonov  

もちろん、ありがとうございます。

しかし、そのたびにコードを修正しなければならないことが判明したのです。

ミハイル

Yedelkin  
Mikalas:

もちろん、ありがとうございます。

でも、それって、毎回コードを変えなきゃいけないんですか?

標準」のインジケータを自分流にアレンジし、そこにオプションを挿入する。例えば(純粋なアイデア):入力パラメータに色を入れ、Oninit()で関数PlotIndexSetInteger(N-1,PLOT_LINE_COLOR, nColor) により処理します。リファレンスに掲載されている例が参考になります。そうすると、コード自体を編集するのではなく、インジケーターの起動時や変更時に、プロパティから希望の色を設定することができます。
Andrey F. Zelinsky  
Mikalas:

もちろん、ありがとうございます。

しかし、毎回コードを修正しなければならないことが判明したのですか?

あなたの論理には何かある。当初のご質問は

ミカラス

標準インジケーターの色をプログラムで変更するには?

Mikhail Filimonov  
abolk:

あなたの論理には何かある。元々聞いていたんですね。

abolkさんへ

明らかに、あなたのコードから。

ミハイル

Mikhail Filimonov  
Yedelkin:
自社製」インジケーターを自分のものにする、つまり、オプションを挿入する。例えば(純粋なアイデア):入力パラメータに色を入れ、Oninit()で関数PlotIndexSetInteger(N-1,PLOT_LINE_COLOR, nColor) により処理します。リファレンスに掲載されている例が参考になります。そうすると、コード自体を編集するのではなく、インジケーターの起動時や変更時に、プロパティから希望の色を設定することができます。

ありがとうございました。

開発者がそれを考えなかったのが残念です。

このコードはうまくいくはずだったのですが、しかし・・・残念です。

params[0].type = TYPE_INT;
        params[0].integer_value = 10;
        
        params[1].type = TYPE_INT;
        params[1].integer_value = 0;
        
        params[2].type = TYPE_INT;
        params[2].integer_value = MODE_SMA;
        
        params[3].type = TYPE_INT;
        params[3].integer_value = PRICE_MEDIAN;
        
        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
        
        ma_handle = IndicatorCreate( NULL, PERIOD_CURRENT, IND_MA, 5, params );
        if ( ma_handle != INVALID_HANDLE )
      {
        ChartIndicatorAdd( 0, 0, ma_handle );
      }
Yedelkin  
Mikalas:

このコードはうまくいくはずだったのですが、しかし・・・残念です。

IndicatorCreate() 関数で動作しなかった-カスタムインジケーターを 作成する方が簡単であることが判明。それにしても、コードの一部しか引用していないので質問ですが、変数paramsを使う前にゼロにしたのでしょうか?例えば、こんな風に。

MqlParam params;
ZeroMemory(params); 

また、あなたのエントリーで再生されるエラーコードは何ですか?

そうだったんですね。

ArrayResize(params,5);
?

また、IND_MA(iMA)インジケータには「色」というパラメータがありませんが、指定 されていますね。 iMAの使用例はこちら: MQL5 Reference / Access to timeseries and indicators / IndicatorCreate.

Slava  
Mikalas:

このコードで動作するはずでした

それはなぜでしょうか?まず、なぜ色が実数なのかを説明してください。

        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
Mikhail Filimonov  

stringoさん、Yedelkinさん、こんにちは。

私のメッセージをよく読まなかったのでしょう、次のように書いてあります。

"開発者が思いつかなかった "のが残念です。"

さて、なぜ上記のようなコードを書いたのか、その理由を説明します。

Moving Averageの設定から、このインディケータが7つのパラメータ(5つのメインパラメータ+2つのライン)を持っていることがよくわかります。

これは、「パラメータ」タブに書かれていることです。

もし、すべての パラメータを「手動」で変更できるのであれば、それは、何か原因があるはずです。

開発者がやったこと、それはすべての パラメータをプログラムで変更することです。

IndicatorCreate 関数で、最後までやらない( or it's a BAG)

単位料金区域

MqlParam 構造体では、色 -TYPE_COLOR(ENUM_DATATYPE) を入力 することができます。

MQL5リファレンスより。

カラータイプは 色情報を格納するためのもので、メモリ内で4バイトを占有 する。 1 バイト目は無視され、残りの 3 バイトが RGB 成分となる。

......

整数表現は16進数または10進数で表記する。16進数で表すと、0x00BBGGRR です。

//--- 整数表現
0xFFFFFFFF //白色
16777215 //ホワイト
0x008000 //緑
32768 //グリーン

引用終わり。

struct MqlParam
{
ENUM_DATATYPE type; // 入力パラメータ型、ENUM_DATYPE 列挙値
long integer_value; // 整数値を格納するためのフィールド
double double_value; // double または float の値を 格納するためのフィールド.
string string_value; // string 型の値を 格納するためのフィールド
};

(最初にlongを試しましたがうまくいかず、次にdoubleを試しましたが、これもうまくいかず、コードに残っています).

こんな感じでいいんじゃないでしょうか。

MqlParam params[5]。


.........

params[4].type =TYPE_COLOR;
params[4].integer_value = clrBlue; // - 青色 0x00FF0000 (16711680)

stringoさん、「なんでやねん」という質問には答えましたよ。

今回も、開発者がカラーチェンジをしなかったのが残念です。

敬称略、ミハイル

Yedelkin  
Mikalas:

stringoさん、Yedelkinさん、こんにちは。

私のメッセージをよく読まなかったのでしょう、次のように書いてあります。

"開発者が思いつかなかった "のが残念です。"

ミカラス さん、ここにはもう専門家がたくさんいて、他人のために結論を急ぐから、怖いんですよ。増やさないでください。

次に、感情的でない具体的な質問をすることで、あなたを助けました。それに答えず、「どうしてこんなことになったのか」と言う。 何がしたいのか。-自分が検出したバグがあると誰かを説得したり、「プログラム的に」コードを改善したりすること?もし、何らかの「バグ」を発見した場合、その状況を詳しく説明した上で、サービスデスクにご連絡ください。プログラム的に」仕事をしたいなら-指標の作成と運用を深く掘り下げる。

理由: