MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1898

 
Vitaly Muzichenko #:

なぜ、最初にデータを記録してからシフトするのですか?

  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }

実際のティックチャートには対応しない!

これが正しいやり方です。

  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  Buffer1[0]=b;
  Buffer2[0]=a;
 
Vitaly Muzichenko #:

繰り返しますが、ArrayCopy() の内部にはループがあり、おそらく複数のループが存在します。そのため、この置き換えによってコードが単純化・高速化されることはほとんどありません。

もう上で何度も言っていることですが、ループなしではやっていけないのです

 
Mihail Matkovskij #:

なぜ、最初にデータを記録してからシフトするのですか?

実際のティックチャートには対応しない!

これが正しいやり方です。

カシャはもちろんですが、同じです)。

はい、そして、いくつかの代入比較で最大1000回の短いサイクルは簡単です。 だから、困難ではないはずです。

 
EVGENII SHELIPOV #:

新しい極限がなく、それらの0、1、2の3つのバーの後に、フラクタルが形成されます。

何も変わっていない。

あるいはまた何かが間違っている

D1上でフラクタルインジケータを実行し、フラクタルがあるかないかを確認します。
 
Valeriy Yastremskiy #:

カシャはもちろんですが、同じです)。

同じではありません。最初にティックを書いてから配列をシフトすると、シフトした残りのティックと一緒に1小節分左にシフトされます。しかし、配列を先にずらしてから、ゼロのインデックスにtickの値を書き込むと、まずtickのためのスペースを作ってから、そこに書き込むことになります。そして、その結果、どこにもシフトされない。

 
Mihail Matkovskij #:

何度も言いますが、サイクルはなくてはならないものなのです

ちゃんと理解できていると思います。


詰め物を入れ替えようとすると、エラーが発生する


 
Vitaly Muzichenko #:

フィルを入れ替えようとしたら、エラーが発生した


不思議ですね、どうしてこうなんでしょう...?すべてうまくいくように見えますが、目盛りが左にずれるのではなく、その場所にあることだけは確かです。

P.S. 余分な配列はやはり追加すべきだった(冒頭で述べた ように)。そうしないと、新しいバーが表示されたときに、すべてのティックが自動的に左に移動してしまいます。なぜなら、ティックはインジケーターバッファだからですあるいは、新しいバーが現れた瞬間を追跡して、バッファをシフトさせることもできますが、すでに右側にシフトしています。
 
配列を移動せず、循環バッファとして 使用し、最初の要素の現在位置を記憶させる場合はどうでしょうか。
 
Mihail Matkovskij #:

同じではありません。最初にティックを書いてから配列をシフトすると、シフトした残りのティックと一緒に1小節分左にシフトされます。しかし、配列を先にずらしてから、ゼロのインデックスにtickの値を書き込むと、まずtickのためのスペースを作ってから、そこに書き込むことになります。そして、その結果、どこにもシフトしていないのです。

そうですね、私の場合は0番ではなく、1番から始めるべきですね)良い指摘です。

SZY、そうなんですが、まずシフトして、それからNULLを代入するんです。

SZZY シフト前にゼロの値を上書きすることで、ゼロインデックスの値を失う。

 
JRandomTrader バッファとして 使用し、最初の要素の現在位置を記憶させる場合はどうでしょうか。

リングバッファ(μl)とは