ICustom機能 - ページ 8

 
 

MQLのヘルプにあるiCustom関数を見て ください。

 

それだ!

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

 

アイ・カスタム

こんにちは。

iCustomを呼び出した結果としてインジケータが実行された場合と、チャートにアタッチされている場合に通常実行される場合とで、インジケータの動作が若干異なる必要がある場合があります。

MQLの中で、インジケータがチャートに取り付けられているために明示的に実行されたのか、それともiCustomへの呼び出しの結果として実行されたのかを判断するために使用できる簡単な関数や メソッドはありませんか?

私は、自分のインジケータにデフォルト値falseの'Custom'というブーリアン・パラメータを追加して、誤魔化しています。iCustomを呼び出してインジケータを実行する場合、このパラメータを代わりにtrueに設定します。そうすることで、iCustomへの呼び出しの結果としてインジケータが実行されているかどうかを、私のインジケータ内で知ることができるのです。

きっと、IsCustom()のような関数があり、iCustom経由でインジケータが実行された場合はtrueを返し、そうでない場合はfalseを返すのでしょう。

どなたか、iCustom経由で呼び出された結果、インジケータが実行されたかどうかを判断するエレガントでシンプルな方法をお持ちの方はいらっしゃいますか?

よろしくお願いします。

Laurence.

 

皆さん、ありがとうございました

aj

 

icustom質問

icustomで他のインジケータを呼び出すだけのインジケータを作ろうと思っています。こんなコード行を作りました。

double COG=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

私はこの行をコードの別の場所に置いてみたり、doubleの名前で遊んでみたり、たくさんのチュートリアルを読んできました。私は、バッファの数のようなものを始めに置かなければならないと思うのですが、どうでしょうか?

このままでは、コンパイルするときにエラーが出ます。

'init' - カンマまたはセミコロンが必要です。

init' - グローバルスコープでの式は許可されていません。

というのも、今まで読んだチュートリアルでは、icustomのコードの行は示されていましたが、その行だけではうまくいかないように感じました。

 

Iveは、このImの主要な試みを持っていた自分自身の非常に誇りに思っています!私はCodersguruからいくつかのコードを取得し、私は指標のために変更しました。Codersguruからいくつかのコードをもらって、それをインジケータ用に変更したんだけど、コンパイル時にエラーは出なかった(初めて!!)けど、チャートに追加したときにメタトレーダーが「応答しない」んだ。

Codersguruが作ったコード(彼はicustomでsupertrendを呼び出すコードを作りました)をよく見てみると、バッファの名前を変えていたので、それが原因だろうと思い、指標のバッファの名前を全て変更しました(val1, val2, val3, val4からval1, value2・・・etc.)。

//+------------------------------------------------------------------+

//| COG call.mq4

//+------------------------------------------------------------------+

#property indicator_separate_window インジケーターウィンドウ

#property インジケーターバッファー 4

#property indicator_color1 ライム

#property indicator_color2 レッド

#property indicator_color3 CLR_NONE

#property indicator_color4 CLR_NONE

//---- バッファ

double value1[];

double value2[];

double value3[];

double value4[];

//+------------------------------------------------------------------+

//| カスタムインジケータ 初期化関数

//+------------------------------------------------------------------+

int init()

{

//---- インジケータ

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Lime) を設定します。

SetIndexBuffer(0,value1)を設定します。

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Red);

SetIndexBuffer(1,value2)。

SetIndexStyle(2,DRAW_NONE)を設定します。

SetIndexBuffer(2,値3);

SetIndexStyle(3,DRAW_NONE)を設定します。

SetIndexBuffer(3,value4)。

//----

return(0);

}

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| カスタムインジケーターイテレーション関数

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//エラーの可能性をチェック

if (counted_bars<0) return(-1);

//---- 最後にカウントされたバーが再カウントされる

if (counted_bars>0) counted_bars--;

int pos=Bars-counted_bars;

while(pos>=0)

{

value1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true); value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true); value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

}

return(0);

}

//+------------------------------------------------------------------+

 

このスレッドでCodersguruが作成したコードを入手しました。

https://www.mql5.com/en/forum/173108

私のコードでは、両端のposとpos--の部分が抜けていることに気がつきました。

value1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos); value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos); value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

pos--。

試してみましょう

 

笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑笑

OK 進んだよ!画面にインジケータの半分が表示されたよ!(インジケータの赤い部分だけ、笑 緑の部分はどこ?)これは私が初めて半分動くようにしたものだけど、信じられないよ!誰か私が間違ったことをしたのかわかる人?

 

なぜかわからないけど、赤い線が平らになって、緑に なった!!!やったー!!!でも、正しくない。

でも、このままじゃ、もっと悪いかもしれない!誰か助けて!私以外はみんな寝てるんだ。