あらゆる取引のテーブル。MQL5経由でのアクセス - ページ 3

 
prostotrader:

どなたかエラーの内容をご存知の方はいらっしゃいますか?

インジケータは正常に動作しますが、より多くのバーが表示されます。

設定されているよりも

コードを見たわけではありませんが、新しいバーができるたびに、インジケーターの線も 自動的に左に移動することを考慮していないのでしょう(チャートを見ればわかります)。つまり、指標となる線を(チャートを見て)右側にずらす必要があるのです。
 
Karputov Vladimir:
コードを見たわけではないのですが、新しいバーが出現するたびに、インジケーターの線も 自動的に左に移動することを考慮していないのだと思われます(チャートを見ればわかります)。つまり、新しいバーが現れたら、指標線を(チャートを見て)右にずらすのです。
ありがとうございます、バグを発見しました。
ファイル:
DealsLent.mq5  10 kb
 
prostotrader:
最後の仕上げに...

最後の1枚ではないことが判明.

もう少し最適化する必要がある。

完成させてテストする...。

 
このような場合は、ティックインジケータ-オープンインタレスト・インジケータ(取引所に接続された実際の口座で実行)を維持します。
ファイル:
 
Karputov Vladimir:
このような場合は、ティックインジケータ-オープンインタレスト・インジケータ(取引所に接続された実際の口座で実行)を維持します。
うれしいですね。
 

重大な問題が発覚しました。

異なるstart_timeでtickが重複している :(

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

場合,start_time が異なり,tick が繰り返しコピー される。

同じ時を刻む

詳しくは明日説明します。

最新ビルド

ファイル:
DealsLent.mq5  12 kb
 

眠れないので、近況を書き留めようと思って。

(完全なインジケーターコードは上の投稿にあります)。

取引所からのティックは、時間間隔を厳密に守って端末に来るわけではありません。

が、ブロック単位で(スクリーンショット参照)ブロック1、ブロック2など。

端末は、取引所から受信したものを(ブロックごとに)テーブルに「格納」して表示する。

どちらの ブロックでも、同じ 時刻の取引が可能である。

CopyTicks()をリアルタイムでなく(例えば翌日や数秒後)呼び出した場合。

の場合、CopyTicks()関数は正確な データを返します。

しかし、 リアルタイムでは 次のようなことが起こります。

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

start_time = (23:49:58.114) の場合、完全にブロック1が得られます(赤丸で囲った部分)。

そして、時間変化を待ってBlock2(緑で囲った部分)を取得する。

ブロック1の重複を避けるため(OnBookEventは非常に早くトリガーされる可能性があります)。

時刻が変更されたことを確認するためのチェックを導入しています。

if(start_time==ulong(ticks[copied-1].time_msc)) return;

start_time = (23:49:58.596) のとき、ブロック2が得られるはずである。

が、CopyTicks()関数はBlock 2と全てのtickを 時間(23:49:58.114)と共に返します。

ブロック2が同じ時刻(23:49:58.114)を少なくとも1つ持つ場合

これはとても悲しいニュースだ...。:(

これを修正しない限り、Real Time Tape of tradesを取得することは不可能 です。


 
prostotrader:


また、時刻で問い合わせたときに、ある時刻とFUTUREから履歴がダウンロードされるのはなぜでしょうか?実際、時間によるティックを要求すると、ある時間からFUTUREにティックをダウンロードすることになります。例えば、こんな感じです。

入力データ(要求20000刻み)、時刻2016.08.25 20-00-00

リクエスト 20,000ティック、時間 2016.08.25 20-00-00。


受け取る。

2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Получено тиков: 10823 код ошибки: 0
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.25 20:00:00 bid: 14377.0 ask: 0.0 last: 0.0 [0]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.26 00:02:08 bid: 0.0 ask: 0.0 last: 0.0 [10822]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Size 0 Mb

つまり、要求時刻2016.08.25 20:00:00から FUTUREに向かってティックを受信する(最後のティックは時刻2016.08.26 00:02:08を 持つ)

ファイル:
 
Karputov Vladimir:

また、時間による問い合わせの際に、ある時間からティックがダウンロードされ、履歴にFUTUREされるのはなぜでしょうか?実際、時間によるティックを要求すると、ある時間からFUTUREにティックをダウンロードすることになります。例えば、こんな感じです。

入力データ(要求20000刻み)、時刻2016.08.25 20-00-00



受け取る。

つまり、要求時刻2016.08.25 20:00:00から FUTUREに向かってティックを受信する(最後のティックは時刻2016.08.26 00:02:08)。

深く考えるのではなく、深さから「付け焼き刃」を見る。

なぜ考えるのか?

インジケーターを動かして、ご自分の目で確かめてください。

そして、書かれていることをちゃんと読んでいるのか?

Если мы вызываем CopyTicks() НЕ в реальном времени (скажкем, на следующий день),

то функция CopyTicks() будет возвращать точные данные.
 
夕方、案件が少なくなってから、かなり偶然に気づきました。
理由: