あなたのコードからは何をしようとしているのかわかりませんが、2箇所で変数iに値を与えていません。これに対処する必要があります。
int start() // Special function start() { if (Crosses()) count++; int i, n, // Bar index Counted_bars; Buf_1[i]= count; // Number of counted bars double Sum_H; //-------------------------------------------------------------------- Counted_bars=IndicatorCounted(); // Number of counted bars i=Bars-Counted_bars-1; // Index of the first uncounted while(i>=0) // Loop for uncounted bars { Sum_H=0; // Nulling at loop beginning for(n=i;n<=i+Aver_Bars-1;n++) // Loop of summing values { Buf_0[i]=Buf_1[n]; // Value of 0 buffer on i bar i--; // Calculating index of the next bar } } //-------------------------------------------------------------------- return(0); // Exit the special funct. start() } //-------------------------------------------------------------------- bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE); }
手前味噌ですが、あなたのコードは、あなたの能力をはるかに超えたものを達成しようとしていることを示しています。
例
bool Crosses() { int i; double H=iHigh(NULL,PERIOD_M1,i); double L=iLow(NULL,PERIOD_M1,i); double O=iOpen(NULL,PERIOD_D1,i); if (O > L && O < H) return(true); else return(EMPTY_VALUE);
例えば、i = 1 とします。
double O=iOpen(NULL,PERIOD_D1,1);
これは、昨日の始値を 返します。
double H=iHigh(NULL,PERIOD_M1,1); double L=iLow(NULL,PERIOD_M1,1);
この2つは、最後に閉じた1分前のバーの値を返します。
つまり、1分前の値と昨日の始値を比較するわけです。
i = 2 の場合、2 分前の値と 2 日前の始値を比較することになります。
これは、あなたが望んでいるものではないことがわかるはずです。
手前味噌ですが、あなたのコードは、あなたの能力をはるかに超えたものを達成しようとしていることを示しています。
例
例えば、i = 1 とします。
これは、昨日の始値を返します。
この2つは、最後に閉じた1分前のバーの値を返します。
つまり、1分前の値と昨日の始値を比較するわけです。
i = 2 の場合、2 分前の値と 2 日前の始値を比較することになります。
これはあなたが望むものであるはずがないことがわかるはずです。
GumRaiさん、こんにちは。
お時間を割いていただき、ありがとうございました。あなたの言う通り、私は初心者で、EAをコーディングすることを学ぶために熱心に努力しています。私がしようとしていることは次のとおりです。
1.PERIOD_D1 OpenをD1バー上のPERIOD_M1バーと毎分比較する。そして、if (O > L && O < H) の条件を満たすM1バーをカウントする。
2.2. 数えたバーを配列に格納し、再び次のD1バーに進み、このサイクルを繰り返す。
3.3.カウントされたバーは、日足チャート上にプロットされます。例えば、M1バーのうち、条件を満たすものが5本であれば、この5本が日足Bar1の値としてプロットされます。そして、次の日足でM1が10になったとすると、前のバーがBar2に移動したため、再びBar1にプロットされます。
親切に、私は苦労して、この単純な文に見えたコーディングに最適な方法を教えてください。あなたがさらに説明を必要とする場合は、私に知らせてください。
こんにちは、GumRaiさん。
お時間を割いていただきありがとうございます。あなたの言うとおり、私は初心者で、EAをコーディングすることを学ぶために熱心に努力しています。以下は、私がやろうとしていることです。
1.PERIOD_D1 OpenをD1バー上のPERIOD_M1バーと毎分比較する。そして、if (O > L && O < H) の条件を満たすM1バーをカウントする。
2.2. 数えたバーを配列に格納し、再び次のD1バーに進み、このサイクルを繰り返す。
3.3.カウントされたバーは、日足チャート上にプロットされます。例えば、M1バーのうち、条件を満たすものが5本であれば、この5本が日足Bar1の値としてプロットされます。そして、次の日足でM1が10になったとすると、前のバーがBar2に移動したため、再びBar1にプロットされます。
親切に、私は苦労して、この単純な文に見えたコーディングに最適な方法を教えてください。さらに説明が必要であれば教えてください。
私は喜んで協力しますが、これではレアムの助けにならないので、コードは書きません。
まず、1440本のM1バーが常に1日周期に対応するとは限らないことを認識する必要があります。ティックがない場合、そのバーは履歴から失われ、あなたが期待するよりも少ないかもしれません。
そこで、D1ローソクのオープンのdatetime値が必要になります。これは可能ですか?それを試して、あなたのコードを投稿してください。
それほど速くない
あなたが何をしようとしているのか、あなたのコード(if (O > L && O < H))では、あなたが望むものは得られないでしょう。
添付のチャートを見てください。
上向きの矢印は今日の始値
右向きの矢印は 、あなたのコード(if (O > L && O < H))に一致する最初のバー です。
しかし 、注意してみると、このバーは今日の始値の上で閉じているので、実際にはカウントは2(少なくとも(ティックチャートでは分からないが、もう少しクロスがあるかもしれない))に なるはずである。
しかし、あなたのコードではcount = 1しかない
それほど速くない
あなたが何をしようとしているのか、あなたのコード(if (O > L && O < H))では、あなたが望むものは得られないでしょう。
添付のチャートを見てください。
上向きの矢印は今日の始値
右向きの矢印は 、あなたのコード(if (O > L && O < H))に一致する最初のバー です。
しかし 、注意してみると、このバーは今日の始値の上で閉じているので、実際にはカウントは2(少なくとも(ティックチャートでは分からないが、もう少しクロスがあるかもしれない))に なるはずである。
しかし、あなたのコードではcount = 1しかない
私の理解では、彼は始値を またぐバーをカウントしたいのだと思います - 私は間違っているかもしれませんが:)
- Zaldy: どなたか助けてくださいは、全く可能性がないのでしょうか?私たちに向かって大声を出さないでください。もちろん可能です。
- 整数とブーリアン演算は変換可能です。False == 0, True = 0 以外。
return(true); else return(EMPTY_VALUE); return(true); else return(2147483647); return(true); else return(true);
- また、あなたはD1、チャート、M1という3つのタイムフレームを扱っています。変換する必要があります。コンパイルやテストはしていません。
Counted_bars=IndicatorCounted(); // Number of counted bars for(iCht = Bars - 1 - Counted_bars; iCht >= 0; iCht--){ // Chart bars int iD1 = iBarShift(NULL, PERIOD_D1, Time[iCht]; double openD1 = iOpen(NULL, PERIOD_D1, iD1); int iM1Beg = iBarShift(NULL, PERIOD_M1, Time[iCht], iM1End = -1; if(iCht > 0) iM1End = iBarShift(NULL, PERIOD_M1, Time[iCht-1]; for(Buf_0[i] = 0; iM1Beg > iM1End; iM1Beg--){ double hM1 = iHigh(NULL, PERIOD_M1, iM1Beg), lM1 = iLow(NULL, PERIOD_M1, iM1Beg); // count Bars of M1 Period that crisscross Open price of D1 Period if( hM1 >= openD1 && openD1 >= lM1) Buf_0[iCht]++; } }
コンパイルもテストもされていません。
それほど速くない
あなたが何をしようとしているのか、あなたのコード(if (O > L && O < H))では、あなたが望むものは得られないでしょう。
添付のチャートを見てください。
上向きの矢印は今日の始値
右向きの矢印は 、あなたのコード(if (O > L && O < H))に一致する最初のバー です。
しかし 、注意してみると、このバーは今日の始値の上で閉じているので、実際にはカウントは2(少なくとも(ティックチャートでは分からないが、もう少しクロスがあるかもしれない))に なるはずである。
しかし、あなたのコードではcount = 1しかない
Qjolさん、はい、右向きの矢印が最初にカウントされます。D1オープンのみで交差しているものは、カウントされます。お疲れ様でした。
- ザルディ どなたか助けてくださいは、全く可能性がないのでしょうか?大声を出さないでください。もちろん可能です。
- 整数とブーリアンは変換可能です。False == 0, true = 0 以外です。
- D1、チャート、M1という3つのタイムフレームを扱っているわけですから。変換する必要があります。コンパイルもテストもされていません。
コンパイルもテストもしてない。
WHRoederさん、ありがとうございます。あなたの提案を試して、結果をここに戻ってきます。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
ご挨拶このインジケーターについて教えてください。D1期間のOpen priceのレベルに遭遇したM1期間のBarsの 数をカウントするために異なる方法を試しています。私はそれをコード化しようとする試みを添付しましたが、正常に実行することができません。この件に一生懸命取り組んできましたが、壁にぶち当たりましたので、ここで親切な紳士たちの助けを求めます
このインジケーターに必要なものは以下の通りです。
1.M1期間のバーがD1期間のOpenの価格と重なったとき、それをカウントする。D1期間ごとにM1期間のバーが1440本あるので、1440本ごとにテストされることになります。
2.2. D1バーごとに、D1バーのカウントを合計し、ある値で平均化します。 平均値を30とすると、この30がD1バーの本数となります。
3.3. 平均値をプロットしたものが指標となります。