エラー、バグ、質問 - ページ 2000

 
Alexey Viktorov:

そして、OnCalculateで既にこれを行うのは意味がない。配列を何かで初期化してから、数式から何らかの値で埋める理由はないのでしょうか?バーを追加し、それぞれ配列セルを追加したとき、そこに何かを記入し、すぐに計算式の値や空の値を記入する意味はあるのでしょうか?

すべてのバーで計算式を適用した場合です。最後の1枚にしか適用されないとしたら?私などは、計算が重くなることもあるので、計算するバーの本数を設定できるインデックスをたくさん持っています。初期化が必要です。

一般的には、やりたくないならやらないことです。これ以上、議論することはない。;-)

 
fxsaber:

つまり、ArrayResizeではなく、ArrayInitializeの話です。ArrayResizeは、MT4でゼロを保証します。

よく読むと?もう一度引用させていただきます。

ArrayInitialize(array, init_val) という式で配列を初期化してもこの配列のために確保されたリザーブの要素が同じ値で初期化 されるわけではありません。 ArrayResize() 関数が、その後現在のリザーブ内で配列のサイズを増加さ せるとき、値が定義されておらず、ほとんどの場合init_val と等しくない要素は、配列の末尾に追加 される。

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky:

よく読むと?もう一度引用します。

ArrayInitialize(array, init_val) という式で配列を初期化してもこの配列のために確保された予備の要素の初期化には ならない。 ArrayResize() 関数が、その後現在のリザーブ内で 配列のサイズを増加さ せるとき、値が定義されて おらず 、ほとんどの場合init_val と等しくない 要素は、配列の末尾に追加 される。

ただ、そこにinit_valがないことを説明するのが難しくなるように、安全性を高めただけなのです。しかし、もちろん、「その値がnullであること」に置き換えることも可能です。
 
Stanislav Korotky:

また、なぜそのような非現実的なシナリオを作るのか、本来はMQLプログラマーのエラーなのでしょうか?当然ながら、完全な初期化は一度だけ、あるいはデータダンプが検出された場合にのみ行われる。その場合、カーネルで行うのが効率的でしょう。

二重初期化について、私はどこに書いたのでしょうか?ちょうど同じように、前述した、ループ内の全要素の充填、について話していました。もしあれば、初期化は不要であり、リソースを浪費するだけである。

まあ、それと、すべてのバーをカウントしていないのであれば、自分でゼロを埋めるように気をつけましょう。

 
Stanislav Korotky:

すべてのバーで計算式を適用した場合です。最後の1枚にしか適用されないとしたら?私などは、計算が重くなることもあるので、計算するバーの本数を設定できるインデックスをたくさん持っています。初期化が必要です。

一般 的には、やりたくないならやらないことです。これ以上、議論することはない。;-)

ここに金言がある...。でも、「やらなくていいところはやらない」という方がいいんです。あるいはその逆で「必要なところだけやる」。

 
fxsaber:

新しい配列要素のみ 初期化されます。そして、ポイントはやはり同じです。たとえコードに誤りがあったとしても(多くの場合、自分の誤りではありません)、実行ごとに同一の結果が得られるのです。上記で数学ライブラリを使った 例を挙げました。

ゴミは悪である。

コメントする言葉も見つからない。

もし、それで自分を汚してくれと言われたら...。狙っているわけではないのでは?1回目は何だかわからないとして、2回目は?

なんで開発者に糞ゲーから守ってくれって言ってるの?自分の身は自分で守る。あるいは、それが必要だという反論の余地のない論拠があるのなら、それを国民に隠さないでください。

mql3って、身の毛もよだつような間違いだらけの書き込みをするところだったんですね...しかもEAは関係ない、とにかく動く...ちゃんと動くか、そんなのどうでもいいじゃん。

なぜかアレイの外に出ることについては議論がないんですよね。そして、これは配列や変数にゴミを入れるよりも悪くはないと思われます。まあ、昔のように配列にそんなインデックスがあるわけでもないので、ご遠慮なく、作業を進めましょう。手、仕事に戻ろう。全部うまくいった...。

 
Alexey Viktorov:

では、なぜデベロッパーにくだらないものから守ってもらうことを要求するのでしょうか?自分の身は自分で守る。あるいは、そうすることに説得力のある論拠があるのなら、それを国民に隠さないことです。

要求がなかった、反証可能性が示される。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2017.09.12 16:17

#property strict

void OnStart()
{
  uchar Array[];
  
  const int Size = ArrayResize(Array, 10000);
  
  bool Res = false;
  
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
    
  Print(Res);
}

MT4では、ゴミがなければすべてゼロなので、常にfalseを返します。MT5ではその通りです。

そのため、MT4テスターで同じコードを実行しても、実行ごとに常に同じ結果を示すことになります。MT5テスターでは、そうなりません。

 
fxsaber:

要件はなく、反証可能性が示される

たった1行の追加を禁じたのは誰?

  uchar Array[];
  const int Size = ArrayResize(Array, 10000);
  bool Res = false;
  ArrayInitialize(Array, 0);
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
  Print(Res); 

それとも、falseは0、それ以外は符号に関係なくtrueであることを知らないのでしょうか?その場合、配列を ゼロで初期化 するのは合理的ですが、その必要がないのに強制的にヌル化を行うのは、システムに負担をかけるのではないでしょうか。

申し訳ないが、この例はまったくナンセンスだ。

 
Alexey Viktorov:

たった1行の追加を禁じたのは誰?

これは私のことではありません。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

バグ、バグ、質問

fxsaber さん 2017.09.12 16:52

ある数学ライブラリ(IncludeMath -7Mb source code)が1箇所か2箇所で初期化されていないことを考えるとぞっとしますよ。また、MT5のテスターでは異なるシングルランが表示され、MT4では同じランが表示されるのですが、このエラーをどのように掘り起こせばよいのでしょうか?

 
fxsaber:

私のことではないんです。

あとは、他人のライブラリーをすべて手放すだけです。そして、私はそれらのライブラリを見たことも使ったこともないのです。バグを確認するために山を掘り進むより、必要なものをすべて書き込む方が簡単ですから...。しかも、たった2、3個の機能を使うために...。