指標となる質問 - ページ 4

 
SDC:

あるいは、このようなものでしょうか?

このようにすると、あなたのインジケータは、すべてのオブジェクトを一度に描画し、新しいバーが形成されたときに新しいオブジェクトを追加するのではなく、新しいティックごとにすべてのオブジェクトを再描画しているため、本当にIndicatorCounted()を使用しなければならない。

これと、外部ブールについての他の投稿は、私にいくつかの他のアイデアを与えてくれます、ありがとう。

私のフォーカスはもっと広範囲である必要がありますが、私はNoBなので、コードの一部分に集中し、外部のような他の部分を無視する傾向があります。
私は今配列に入ったばかりで、バッファを理解するのに大変苦労しましたが、最近それを乗り越え始めています。

ありがとうございました。これも新しいアイデアをたくさん与えてくれるでしょう。
 
SDC:


インジケータを作成する場合、チャート上の各バーにコードを適用することになりますが、これはつまり、過去の各バーにあったmacdインジケータの値を取得する必要があることを意味します。

を、元のコードで使用しました。

最後のパラメータ1は、チャートのバー1、つまり現在のバーの前のバー(バー0としてインデックスされる)であったときのmacdの値です

明らかに、あなたはヒストリカルチャート全体にわたって条件演算子でmacdのその単一の値を使用することを望んでいません。

各バーと同じバーインデックスにmacdをインデックスする必要があり、例えば500バーでは次のようになります。

この最後のパラメータは、インジケータがアルゴリズムを適用しているバーの番号に合わせて変更する必要があります。

そのため、ループの中でこのパラメータを使用する必要があり、ループサイクルのイテレータを最後のパラメータに使用することで、ヒストリカルチャートの各バーにあったmacd値を取得することができます。

これで少しはすっきりしたでしょうか。

なるほど、確かにその通りでした。

でも、if(val1 > 0 && faster > slower) のようなコードを追加すると、ループの外側で faster と slower を宣言したときにうまくいかないんだ。

なるほど、シフトが(i)だからループの内側で必要なんですね OOOOPPPS笑
 
Agent86:
なぜfor(int i = Bars-1 ? <----------------------- バーはちょうど配列のようにインデックスされ、最初のバー0、代わりに1。 だから最後のバーはBars-1;

そしてなぜこれはfor(int i = Bars ?<-----上記参照)より良いのですか?

アドバイスしてください感謝


また

私は、これは指標/カスタム指標だけでなく、すべてのために真であると仮定している?<---私と WHRoeder :について議論したことは 非常に一般的な問題である 具体的なものは何もありません。 私たちは、変数の宣言とその代入など、ループのw.r.t.についてお互いに話していただけです。

 
diostar:

また


for(int i=Bars; i>=0; i--)は、私が使用したコードです。

for(int i=Bars-1; i>=0: i--)が提案されています。

Bars = 現在のチャートのバーの 数 と思っていたのですが、少なくとも辞書には書いてありました。

ということは、--i は、1002 などの最高小節番号からカウントダウンして、--i を実際に -1 までカウントダウンしているのだと思いました。
というのも、i>=0の間は、実際に-1までカウントダウンしてから偽になるはずだからです。もし0以上なら真になり、-1になるまで最後にもう一回ループするはずです。

少なくとも、私はそれが動作すると思った方法thats?私は間違っていますか?

i=0 と ++i でカウントアップした場合、最後のバーまでカウントすると思っていました。

しかし、この場合、あなたの言うBars-1は、実際にはすべてのclose Barsではなく、実際にはまだ閉じていないBar[0]を含むか、何か?

私はBars-1とBarsの違いを本当に理解しているかどうかわからない。それは、単にBarsを参照するときにカウントされていない現在のバー0に関係していますか?

アドバイスよろしくお願いします。


 

そうです、バー0があるので、バー0を含むチャート内のバーの数が表示されます。

小さなチャートで、2本のバー、bar[0]とbar[1]があるだけです。

Barsはその数を表示するので、Bars == 2となります。

もし、チャートの最後のバーからインジケータを適用したいのであれば

i=Barsを試してみてください。

ご存知のように、Bars = 2ですが、bar[2]としてインデックスされたバーはなく、最後のバーはBar[1]です。

なので、i=Bars-1 とする必要があります。

 
Agent86:
for(int i=Bars; i>=0; i--) is the code I used<--- say, for eg. Close[i], this counts from close[Bars] down to close[0].i=Barsのとき、close[i]は存在するのでしょうか?

for(int i=Bars-1; i>=0: i--)を提案します<---例えば、Close[i]の場合、close[Bars-1]からclose[ 0]までを数えます。i=Bars-1のとき、close[i]は存在するのでしょうか?

Bars = 現在のチャートのバーの数だと思ったのですが、少なくとも辞書によるとそうなっています。

ということは --i は 1002 などの最高バー番号からカウントダウンして --i が実際に -1 になるまでカウントダウンしていると考えたのですが close[1002], close[-1] は存在するのでしょうか?
i>=0なので、実際に-1までカウントダウンしてからfalseになるはずだからです。もし0以上なら真になり、-1になるまで最後にもう一回ループするはずです。

少なくともthatsは、それが動作すると思った方法?私は間違っていますか?<---以下の文献を参照してください。

i=0と+iとカウントアップした場合、私はそれが最後のバーに最後までカウントされると思った。<---それは従順に、それを行うでしょう。

しかし、このケースではBars-1あなたの言うことは本当にすべてのクローズバーではなく、実際にはまだ閉じていないバー[0]を含むか何か?<--この場合、終値は現在の入札ティック価格を返します

Bars-1とBarsの違いがよくわかりません。単にBarsを参照するときにカウントされない現在のバー0と関係があるのでしょうか?<---下記の参照先を参照してください

アドバイスお願いします 感謝歓迎





double Close[] です。
現在のチャートの各バーに対応する終値を含む系列配列。

シリーズ配列の要素は逆順に、つまり最後のものから最初のものへとインデックスが付けられます。配列の最後にある現在のバーのインデックスは 0 で、最も古いバー、つまりチャートの最初のバーのインデックスはBars-1 です。
 
なるほど、技術的には配列の要素数を宣言していないので、バッファはすでにこのトピックを処理していると思ったのですが、なぜかバッファは少し違う処理をしていました。

とにかく、私はこれを理解し、意味をなします。

 
Agent86:
なるほど、技術的には配列の要素数さえ宣言していないので、バッファはすでにこのトピックを処理していると思ったのですが、少し違うようですね。

とにかく、私はこれを理解し、意味をなします。



えっ、そうなんですか?まさか、インジケーターバッファーのことだとは思わなかったよ。ということで、https://www.mql5.com/en/articles/1500 から引用したこれらの文献を読んでみてください。

(1) インジケータバッファとユーザ配列 - 両者は同じであり、かつ異なる。 & インジケータバッファがユーザによってサイズ決定されない理由は、それがすでに解決されていることとは関係がない。

double ExtMapBuffer1[];

これは通常の配列です。しかし、次元は表示されず、初期化も行われていません。この配列は後でデータバッファとして 設定されます。

(2) 出力と入力(上のデータバッファ)のインジケータバッファは、同じように見えて、違うものです。

SetIndexBuffer(0,ExtMapBuffer1);

この関数は、配列とバッファ 番号を"バインド "しています。つまり、指定された番号のバッファが、指定された配列をデータの格納に使用することを示すのです。つまり、この配列の要素を変更すると、バッファの値も変更されます。第一引数には 、バインドする配列の名前を 指定します。


これで全部うまくいきましたね。さて、このコードが何をするのか見てみましょう。

for(int i=0;i<Bars;i++)

データ・バッファのすべての 要素を通過させるために、cycleforを 使用しています。あるバーがバッファの各要素に対応して いるので、ゼロのバー(利用可能な最後のバー)から始まり、利用可能な最初のバーで終わるサイクルを使用します(これは変数Barsより 連続して1つ少なくなります(バーをゼロから数えるため))。

{
   ExtMapBuffer1[i]=MathRand()%1001;
}

各反復でカウンタは1つずつ増加し、最後の 利用可能なバーから 最初の バーに移動すると同時に、各バッファ要素(特定のバーに対応する )に0から1000までの乱数を割り当てています。もし、あるバッファエレメントがあるバーに対応していることが理解しにくい場合は、以下の方法でサイクルを変更し、ターミナルで結果を確認してください。

for(int i=0;i<Bars;i++)
{
   ExtMapBuffer1[i]=i;
}



 
diostar:

ダブルクローズ[]の場合
現在のチャートの各バーに対する終値を含むシリーズ配列。

シリーズ配列の要素は、逆順に、つまり最後のものから最初のものへとインデックスが付けられます。配列の最後にある現在のバーのインデックスは0、最も古いバー(チャートの最初のバー)のインデックスはBars-1 です。

OK、これでわかった気がします。
 
皆さん、ありがとうございます。

私は指標についてより多くを学ぶように、私が使用しているデザインは、EAで使用するために非常に有用ではないだろうと思われますが、おそらく視覚的および/または手動で使用するために良いだけです。

カウンターが1をカウントダウンするので - おそらく私は唯一の特定のシフトを参照してください[i]その場合には私は唯一のそれらの特定のバーに位置する取引信号のために使用したいそれらの配列要素を 具体的に参照する方法を考えなければならない場合を除き、この方法を使用して取引で使用するための任意の配列オブジェクトに良いことではないだろうと思われる。

これをそのまま使うと、インジケータと同じようにチャート全体で売買が行われることになりそうです。

ということで、これからはインジケーターの配列要素から値や時間、BARなどを参照する方法を勉強していこうと思います。

iCustomのインジケーターを作ってEAで使えるようにするにはどうしたらいいか、いろいろと考えることができそうです。