カスタムシンボル。エラー、バグ、質問、提案。 - ページ 28

 

つい先日、カスタムシンボルを作成 する際に、このようなエラーに遭遇しました。手作業でいろいろと再確認。また、ArrayCopyの後、いくつかのtickがランダムな値になるという非常に奇妙なバグに気づきました。クリーンなマシンで繰り返すのはかなり辛いので、キャストから別の合成カスタム品を生成していますが、最近のこちらのレポートに対する姿勢は独特で、つまり完全無視なので、レポートを作成する気にはなれませんでした。しかし、CustomTicksAddを 1回呼び出すだけで解決しました。つまり、すべてのチックは、最初に1つの配列に入力され、その後手動でコピーされ、カスタムシンボルの1回の呼び出しでそれを行うことができます。そうすれば、エラーは発生しない。試してみてください。

追伸:CopyTicksでいろいろと変なバグにぶつかったので、CopyTicksRangeに乗り換えました。

 
fxsaber:

コードをもっとよく見てみるとポーション受信時のダニが足りない。Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0 のとき、この状況が起こりえます。

これに対応して、スキップを追加した場合、フラグが一致しない場合があります。


今回のテストでは、重複がないことを保証するために意図的に省略しています。この問題の病因はまだ明らかではなく、重複したティックが原因である可能性もあるからです(Andreyの類推により、「迅速かつ汚い」方法でまさにその可能性を排除することにしました)。

フラッグについて、詳しく教えてください。ティックの内容(フラグを含む)は変更されませんし、フラグがティックの配列に何らかの影響を与えるという話も読んだことがありません。少なくとも、エラーコードの 説明には、フラグについて何も書かれていません。

 
Stanislav Korotky:

フラッグについて、詳しく教えてください。ティックの内容(フラグを含む)を変更する人はいませんし、フラグがティックのシーケンスに影響を与えるという話も読んだことがありません。少なくともエラーコードの 説明には、フラグについては何も書かれていない。

フラッグについては、仮説です。少し前に問題が発生したので、自分で外付けのダニのフラグを生成してから送信しました。


例えば、最初のティックの後、異なる入札価格を持っていますが、それについてのフラグはありません。

 

msをインクリメントした変数_startが他に使われていないのであれば、なぜこの行が使われているのかは明らかではありません。
そして、その関数が終了すると破棄される。
見たところ、タイムシフトはどこにも使われていないし、記憶にも残っていない。
そして、入力変数として機能するこの _start 変数に、なぜ何かを代入しているのか。
この値をwhile関数に戻すことになり、その使用にはデッドロックが発生します。
ですから、このコードはかなり混乱し、不明瞭です。あるいは、この構成が理解できない ))

_start = array[size - 1].time_msc + 1;
 
Roman:

msが1つインクリメントされた変数_startが他のどこにも使われていない場合、なぜこの行になるのかが不明です。
そして、その関数が終了すると破棄される。
見たところ、タイムシフトはどこにも使われていないし、記憶にも残っていない。
そして、入力変数として機能するこの _start 変数に、なぜ何かを代入しているのか?
この値をwhile関数に戻すことになり、その使用にはデッドロックが発生します。
ですから、このコードはかなり混乱し、不明瞭です。それとも私がこの構造を理解していないのでしょうか))

この変数参照は、呼び出し元のコードから「その場」で関数パラメータに投げ込まれ、常に変化し、繰り返し使用される。

 
fxsaber:

国旗について-仮説一度、問題があったので、サードパーティのティックについては、自分でフラグを生成してから送信しました。


例えば、最初のティックを通過した後、異なる入札価格を持っていますが、それについてのフラグはありません。

考え方は明快です。しかし、MQの説明がなければ、すべては我々の推測のレベルにとどまってしまう(このエラーの出現に影響を与えた可能性があるという意味で)。

 
Stanislav Korotky:

この変数参照は - 呼び出しコードから「その場」で関数パラメータに投げ込まれ、常に変化し、繰り返し使用されます。

はい、私は言及に注意を払わず、それのために提供したいと思いましたが、それはあります。
それでも明示的に変数を割り当てることで、増加した時間を節約するようにしてください。

 

新しいミステリー。ビルド 2507 で CopyTicks に問題が発生、古いビルド(特に 2374)では正常に動作していました。

アプリ内の簡単なテストスクリプトに縮小した。前回のポーリングからの新しいティックを問うものです。

最初のループパスが成功すると、スクリプトはfromパラメータで指定された時刻よりも早い時刻、つまり現在の日の始まりからの時刻を配列にコピーしはじめます。

何が問題なのか?

ファイル:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

新しいミステリー。ビルド 2507 で CopyTicks に問題が発生、古いビルド(特に 2374)では正常に動作していました。

アプリ内の簡単なテストスクリプトに縮小した。前回のポーリングからの新しいティックを問うものです。

最初のループパスが成功すると、スクリプトはfromパラメータで指定された時刻よりも早い時刻、つまり現在の日の始まりからの時刻を配列にコピーしはじめます。

何が問題なのか?

2509のバグを確認しました。

このバリエーションは失敗しないようです。

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
カスタムシンボルによる 曖昧さ。大文字と小文字の違いだけで2つのシンボルを作成することは可能ですが(例えば、「xEURUSD」と「XEURUSD」)、「duplicate」にクォートを追加しても動作しません - CustomRatesUpdateは、エラーなしで0を返します。大文字と小文字を区別して名前を付けるか(そのような文字を完全に動作させるため)、そのような「類似した」名前の作成を許可しないかのどちらかが必要です。