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

 

これは、価格が上限または下限のラインに達したときにアラートを生成します。

これらの線に近づくまで取引を実行させたい。価格が近づきすぎた場合は、取引を開始することを許可しません。

ここにあるのは配列だけですが、このロジックを現在のバーの終値で発生させるにはどうしたらよいでしょうか?

for(int x=0; x<limit; x++) {

Xdown[x] = 0; Xup[x] = 0;

middle1[x] = iMA(NULL, 0, period, 0, MODE_EMA, PRICE_TYPICAL, x);// drawn line

middle2= iMA(NULL, 0, period, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

avg = findAvg(period, x);

upper[x] = middle2 + (3.5*avg);

lower[x] = middle2 - (3.5*avg);

if (MathAbs(upper[x] - High[x]) < 2*Point)

{

Xdown[x] = upper[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach upper edge");

}

if (MathAbs(lower[x] - Low[x]) < 2*Point)

{

Xup[x] = lower[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach lower edge");

}

}

return(0);

}
 

頑張っているようですね、お疲れ様です。MQLの "NAvigator->Search "機能をフルに使ってみてください。例えば、"array "を検索すると、Current Barのarray indexは0、Last Barのarray indexは1、などということが分かります。

もし、検索機能の項目がすべて圧倒的であれば、現段階ではあなたにとって難しすぎることをやろうとしているのでしょう。上記の例のほとんどは、codersguruの初心者向け講座で触れられていると思いますので、もう一度読んでみることをお勧めします。

また、簡単なEAを選んで、それを少し単純化・改造してみると、その仕組みがわかるかもしれません。それができたら、複雑にしてみるのもいいでしょう。

的外れだったらごめんなさい。

さて、一般的に終値で 動作させるには、新しいバーのオープニングをテストし、配列のインデックス1に条件を記述します。新しいバーのOpeningを検出するコードです。

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0];

return(true)とする。

}

return(false);

}

これが役に立つといいのですが、頑張ってください。

 

そうです、あなたは正しい道を歩んでいるのです。

私なら、すべてを中断して、c++プログラミングを再読します。

残念ながら、オブジェクト指向はmq4には向いていないので、基本で補うしかないでしょう。

その調子で頑張ってください。

 
Aaragorn:
これは、価格が上限または下限のラインに達したときに警告を生成します。

この線に近づくまでトレードを実行させたい。価格が近づきすぎたら、取引を開始しないようにしたい。

というロジックを、現在のバーの終値で実現したいのですが、ここにあるのは配列だけなのですが、どうすればいいのでしょうか?

これは 例として持っていることができます。これは、あなたが取得したいものに近いです。私が見る限り、これはあなたが使っているのと同じインジケータです。

 
pipeline:
頑張ってるんですね、お見事です。MQLの "NAvigator->Search "機能をフルに使ってみてください。例えば、"array "を検索すると、Current Barのarray indexは0、Last Barのarray indexは1、などということが分かります。

検索機能のエントリーが圧倒的に多い場合は、現段階では自分にとって難しすぎることをやろうとしているのでしょう。上記の例のほとんどはcodersguruの初心者向け講座で触れられていると思いますので、もう一度読んでみることをお勧めします。

また、簡単なEAを選んで、それを少し単純化・改造してみると、その仕組みがわかるかもしれません。それができたら、複雑にしてみるのもいいでしょう。

的外れだったらごめんなさい。

さて、一般的に終値で動作させるには、新しいバーのオープニングをテストし、配列のインデックス1に条件を記述します。新しいバーのOpeningを検出するコードです。

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0];

return(true)とする。

}

return(false);

}

お役に立てると良いのですが、頑張ってください。

その検索関数について ですが、何も返さないんです。メタエディターで何度か使ってみたのですが、何も返ってきません。欲しいものを入力してリターンを押しても何も起こらないし、検索文字列の横にある小さなGOボックスをクリックしても何も起こりません。まったく機能しないので、なんといい加減な検索なんだろうと思っていたところです。メタエディタのナビゲータウィンドウの検索機能のことなのですが、私の知らないところで、何か動作させるためのプロトコルがあるのでしょうか?

 
fx-programmer:
はい、その通りです。

私なら全部やめて、c++プログラミングを再読します。

残念ながらオブジェクト指向はmq4には向いていないので、基本で補うしかないでしょう。

その調子です。

励ましてくれてありがとうございます。私の理論的なゴールは何かわかりますか?この目標を達成するためのより良い方法(あなたの言う基本的なもの)を提案していただけませんか?

 
pipeline:

さて、一般的に終値を扱うには、新しいバーが開くかどうかをテストし、配列のインデックス1に条件を記述します。新しいバーのオープンを検出するコードです。

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0];

return(true)とする。

}

return(false);

}

お役に立てると良いのですが、頑張ってください。

というのは、ほとんど意味がわかると思います。trueを返すとして、では、新しいバーがあることが検出された現在の終値で、配列からインジケータの値を取り出すにはどうしたらよいでしょうか。

 
 
Aaragorn:

昨夜、ググっていたら、こんなのを見つけました...。

http://www.gordago.com/?act=download

誰か経験したことある人、これってマジ?

ゴルダゴはカスタムインジケータを扱わない、もしくはまだ扱えない。これは大きな欠点です。

プログラミングを学ぶ唯一の方法は、今あなたがしているように、じっくりと取り組むことです...例から学ぶのです。Coders' Guruのものは学習には最適です。

がんばってください。

マジ

 
インジケータはもういいとして、過去(x)のバーの最高値と最安値を参照できるようなものを作れないかと考えている今日この頃です。

インジケータを見れば見るほど、これは魅力的に思えるのですが...。

OK 定義済み変数にhigh()がありますね。例えば、過去30時間の最高値を取得するにはどうしたらいいでしょうか?

 

インジケータを書くことと、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を使用します。)

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

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

エリ

理由: