コーディングヘルプ...アラートの代わりにインジケータをフィルタリングする方法を教えてください。 - ページ 2

 
Aaragorn:
インジケータにbufferindexesを書き込んで、上下の単語をそのように使って、上下の行の値を返すようにすればいいのでしょうか?

インジケータにではなくEAの中です。(インジケータでは可能ですが、同じインジケータを自分のコードの中で使うことはできません!!!!)

 
elihayun:
インジケータにではなくEAに。(インジケータではできるけど、同じインジケータを自分のコードの中で使っちゃダメ!!!!!!)

EAにバッファのインデックスを 書くことはできますが、インジケータからどのように値を取得するのでしょうか?このようなことは、EAを開発する上で、とても重要なことです。コーディングするときも、コーディングについて人に話すときも、それが悩みの種です。

 

私の投稿が情報過多であることを、私を助けようとしてくれている人々にお詫びします。私は基本的に多くのコードを投稿していますが、それは2つのウィンドウを隣り合わせに開いて、一方のウィンドウはこのスレッド、もう一方はメタエディタで、コードのある部分を一方のウィンドウで、別の部分をもう一方のウィンドウで見て、自分が見ている問題を通して自分の方法を考えるのに役立てるためです。私はかなり視覚的なので、自分が何をしているのか、何をしたいのかを考える助けになります。私は、たくさんのコードで誰かを圧倒して、そのすべてに目を通さなければならないようにするつもりはありません。時々、EA全体やインジケータ全体を投稿した後に、どこで何をする必要があるのかをゼロにしようと、スニペットを選び出すようにしています。私がやっていることに時間を割いて見てくれて、建設的な意見を提供してくれる人たちに感謝しています。もし私が投稿するものの量が多ければ、私がやろうとしていることを探すためにフィルターをかけて、私がやっていることの文脈としてそこにあるだけである他のものに埋もれないようにしてください。

 
Aaragorn:
EAにバッファインデックスを書き込むことはできますが、インジケータからどのように値を取得するのでしょうか?このように、EAにバッファーインデックスを書くことはできますが、どうやってインジケータから値を取得するのでしょうか?それがコーディングの問題であり、コーディングについて他の人に話すことの問題でもあります。

方法について悩まないでください。メタトレーダーは、あなたのためにそれを行うことができます。あなたは、あなたが好きな情報を得るためにコードを使用するだけです。

ヒント:EAを実行すると、「Trend Bands loaded succesfully」と表示されます。

 
elihayun:
方法については気にしないでください。メタトレーダーがそれをやってくれます。 ヒント:EAを実行すると、"Trend Bands loaded succesfully "と表示されます。

好きな情報を得るためにコードを使うという響きがいい、それが私の学びたいことです。私が好きな情報を得るためにコードを使用する方法。

トレンドバンドのティック値を取得する最善の方法は、iCustome()を使用することだとお考えですか?

このコードはすでにEA内に書かれているので、そこから値を取得する方法があるのでしょうか?

 
elihayun:
インジケータを書くことと、EAを書くことは別物です。混同しないようにしましょう。インジケータではヒストリを正しく描画するためにヒストリを処理する必要があります。EAを書くときは、現在のティックしかなく、ティックごとに値を計算する必要があります(トレードを中断したくない場合)。そこで、現在のティックの上端と下端の値を取得するために、次の2つのことを行うことができます。
  1. オリジナルのインジケータをカストマーインディケータとして使用する
  2. 自分のEAにインジケータのロジックを書き込む。

1つ目の方法はそれほど難しいものではありません。まず、上のラインと下のラインで使用するバッファーインデックスが何であるかを知る必要があります。

それを見つけるには、インジケータのコードを見る必要があります。

ちょっと待てよ、バッファがあるじゃないか!なんで見逃しちゃったんだろう?

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

//| Trend Bands.mq4 |

//| Dwt5 and adoleh2000 |

//| Copyright © 2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

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

//| Custom indicator initialization function |

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

#property indicator_chart_window

#property indicator_buffers 5

#property indicator_color1 Red

#property indicator_color2 Black

#property indicator_color3 Blue

#property indicator_color4 Red

#property indicator_color5 Blue

double upper[], middle1[], middle2, lower[];

double Xup[], Xdown[];

extern int period = 34;

int init()

{

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexShift(0,0);

SetIndexDrawBegin(0,0);

SetIndexBuffer(0,upper);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexShift(1,0);

SetIndexDrawBegin(1,0);

SetIndexBuffer(1,middle1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexShift(2,0);

SetIndexDrawBegin(2,0);

SetIndexBuffer(2,lower);

SetIndexStyle(3,DRAW_ARROW,EMPTY,2);

SetIndexArrow(3, 162);

SetIndexShift(3,0);

SetIndexDrawBegin(3,0);

SetIndexBuffer(3,Xdown);

SetIndexStyle(4,DRAW_ARROW,EMPTY,2);

SetIndexArrow(4, 162);

SetIndexShift(4,0);

SetIndexDrawBegin(4,0);

SetIndexBuffer(4,Xup);

//---- indicators

//----

return(0);

}

上、中、下、そして上下の5つのバッファがありますね。

私が欲しい情報は、上段と下段のバッファからだと思うのですが...。

 
 
Aaragorn:
これは前の投稿の編集ではなく、新しい投稿にするつもりでした。サイト操作はまだ時々私を混同しています...

インジケータを使わない方法が一番いいと思います。一番シンプルな方法です。まずはこれで十分だと思います。

私がインジケータに加えた変更をご覧ください。もしこれを使いたいなら、コード内に正しい名前を書いていることを確認してください。

欲しい情報がどのバッファにあるかさえ分かれば、コードの中にいくつのインジケータがあっても問題ない。

 
elihayun:
インジケータを書くことと、EAを書くことは別のことです。混同しないでください。インジケータでは、正しく描画するためにヒストリを処理する必要があります。EAを書くときは、現在のティックしかなく、ティックごとに値を計算する必要があります(トレードを中断したくない場合)。そこで、現在のティックの上端と下端の値を取得するために、次の2つのことを行うことができます。
  1. オリジナルのインジケータをカストマーインディケータとして使用する
  2. 自分のEAにインジケータのロジックを書き込む。

1つ目の方法はそれほど難しいものではありません。まず、上のラインと下のラインで使用するバッファーインデックスが何であるかを知る必要があります。

それを見つけるには、インジケーターのコードを見る必要があります。

SetIndexBuffer(0,upper)。

SetIndexBuffer(1,middle1)を設定します。

SetIndexBuffer(2,lower)を設定します。

見ての通り、上の線はインデックス0、真ん中の線はインデックス1、下の線はインデックス2です。

さて、この情報を得たところで、インジケータがいくつのパラメータを持っているかを知る必要があります。この情報を得るには、externalという 単語で始まる行を探さなければなりません。

私は1行だけ見つけました。

extern int period = 34;

さて、このインジケータを実際に使ってみましょう。

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0).LowLevel=iCustome(NULL,0,0,0)です。

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0)とします。

34はインジケータのパラメータ

0はバッファインデックス(下は2)

最後の0はバーのシフト(EAではカレントが必要なので0を使用します。)

これで上限値と下限値が決まりましたので、価格と照らし合わせることができます。

それがあなたの進歩になることを願っています。

エリ

上下の線の現在値をEAに取り込むには、次のようにします。

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0)です。

家庭教師のおかげで理解できてきたような気がします・・・。

ということは、EAの中でインジケータのコードを書かなくても、EAからこのように呼び出せば、ラインの現在のバーの値を返してくれて、それを利用すればいいということですね。 ...ほら、誰かがこれをする方法を知っていると思った! (それはただ私ではなかった)...

もし私がインジケータに使用するピリオドの数を変更できるようにしたいのなら、次のようにします...

extern double back = 300 //--これは好きなように変更できる。

double upLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0);

チャートで使っている期間よりも長い期間からインジケータの値を呼び出したいと仮定すると...こうなりますか...?

extern double back = 300 //--これは好きなように変更できる。

extern double TF = 30 //--これは好きなように変更できます。

double upLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0).ここで、NULLは現在のシンボルを使用します。

ここで、NULLは現在のシンボルを使用します。

TFは指定したチャートバー期間を使用します。

Trend Bandsはインジケータを呼び出します。

back は、インディケータの平均化に使用するバーの数 です。

0または2でどのバッファにアクセスするかを指定します。

そして最後の0は現在のバーを使用するように指示します。

これでうまくいくでしょうか?

 
Aaragorn:
ということですね。

素晴らしい!!!このアイデアには脱帽です!!!

もし、5Mと15Mが同時にエッジに到達することを確認 したい場合は、それぞれのTFから値を取得し、一緒にテストすることができます。

でも、それは後回しにして......。