リアルタイムで見るTiki - ページ 7

 
prostotrader:

何かを証明したり反証したりするためには、コードを掲載しなければならないのです

あなたは、隣接するOnTickイベント間にレコードが存在し、それがCopyTicks-historyに入り、OnBookEventを介してリアルタイムにキャッチできることを証明するために、自分自身を犠牲にしたのです。

残念ながら、上記のログではわかりません。

 
fxsaber:

隣接するOnTickイベント間にレコードが存在し、それがCopyTicksの履歴に入り、OnBookEventを介してリアルタイムにキャッチできることを証明していますね。

残念ながら、上記のログではわからない。

動作するコードを掲載して証明し、なぜ速く、リアルタイムで動作するのかを説明しました。

MQL5関数の ヘルプや個人的な経験に基づいています。

自分で確認したい?あるいは、動作するコードでその逆を証明する。

 
prostotrader:

私は、動作するコードを掲載し、なぜ速く、リアルタイムで動作するのかを説明することで、これを証明しました。

残念ながら、OnTick CopyTicks-historyのエントリーが欠落しているという形で主な証明リンクが欠落している場合、それを受け入れることはできません。

 
fxsaber:

残念ながら、OnTick CopyTicks-history レコードの欠落という形で、証明の主要なリンクが欠落している場合、それを受け入れることはできません。

で、何が問題なんだ?

ぜひ、ご自身でお確かめください。

 
prostotrader:

で、何なんだ?

ぜひ、ご自身でお確かめください。

あなたの証明は論理的な根拠だけでは受け入れられず、他の視点との矛盾を指摘されただけです。

 
fxsaber:

ただ、あなたの証明は論理的な理由だけでは受け入れられず、他の視点との矛盾を指摘したに過ぎません。

なるほど、でもOnBookEvent()のヘルプを読むことをお勧めします。

私は何かを証明するつもりはなく、トピックの主題で いくつかの動作する コードを書き、(フォーラムのユーザーの要求で)説明しただけです。

なぜこのメソッドがOnTick()よりも優れているのか、もし信じない人が いたら、自分で調べてみてください。

あるいは、私の説明を否定するような動作するコードを投稿してください。

によって追加されました。

このフォーラムには、OnBookEvent()を使ったことがないFOREX関係者が何千 人もいます。

しかもタンブラーで。

このスレに書き込んでくれる人全員に何かしてあげればいいのか?

 
prostotrader:

最初のOnTick()の時刻2020.01.30 19:31:11.112

秒の時間 OnTick()2020.01.30 19:31:11.802

つまり、690msが経過しており、その間、この690msのOnTick()

OnBookEvent()が15回発生した

このクリック音は、ダニとは 関係ないと思っているのでしょうか?

エッジバンド(ビッド/アスク)やフリッパーに影響しないスタックの変化を呼び出さないのであれば、はい、これらのトリガーはティックに無関係です。


プロストトレーダー

もうひとつ、多くの人が忘れている本質的なポイントがあります。

EAが入力データを解析して判断を下すまでのスピードです。

OnTick()の代わりにOnBookEvent()を使用すると、私のEAはあなたのEAより速く なります。

あなたは勘違いしている、何度でも言う。

このEAは、1つのターミナルで2つのチャートで実行できます。1つは「OnBookEventを使用」モードで、もう1つは「OnTickを使用」モードです(これは入力パラメータです)。イベントハンドラ内のコードは同一です(別の関数に入れ、そこから呼び出すこともできますが、それは意味がありません)。

//---
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK        // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;

//---
bool is_book;
long last_tick_time = 0;
MqlTick cur_ticks[], last_tick;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        if ( Mode == USE_BOOK )
        {
                is_book = MarketBookAdd(Symbol());
                if ( !is_book ) Alert( "MarketBookAdd failed with error #", GetLastError(), "!" );
        }

        last_tick_time = 0;

        return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
        if(is_book == true) MarketBookRelease(Symbol());
}

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
        if ( Mode != USE_BOOK || symbol != _Symbol ) return;

        if ( last_tick_time <= 0 )
        {
                if ( CopyTicks( _Symbol, cur_ticks, COPY_TICKS_ALL, 0, 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[0].time_msc;
                        last_tick = cur_ticks[0];
                }
        }
        if ( last_tick_time > 0 )
        {
                int new_ticks = CopyTicks( _Symbol, cur_ticks, COPY_TICKS_ALL, last_tick_time, 0 );
                for ( int i = 0; i < new_ticks; i ++ )
                {
                        PrintTick( "OnBook", cur_ticks[i] );
                }
                if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks-1].time_msc;
                        last_tick = cur_ticks[new_ticks-1];
                }
        }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
        if ( Mode != USE_TICK ) return;

        if ( last_tick_time <= 0 )
        {
                if ( CopyTicks( _Symbol, cur_ticks, COPY_TICKS_ALL, 0, 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[0].time_msc;
                        last_tick = cur_ticks[0];
                }
        }
        if ( last_tick_time > 0 )
        {
                int new_ticks = CopyTicks( _Symbol, cur_ticks, COPY_TICKS_ALL, last_tick_time, 0 );
                for ( int i = 0; i < new_ticks; i ++ )
                {
                        PrintTick( "OnTick", cur_ticks[i] );
                }
                if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks-1].time_msc;
                        last_tick = cur_ticks[new_ticks-1];
                }
        }
}

void PrintTick( string func_name, MqlTick &tick )
{
        if ( tick.time_msc == last_tick.time_msc &&
                        tick.bid == last_tick.bid &&
                        tick.ask == last_tick.ask &&
                        tick.last == last_tick.last ) return;
        Print( GetTickCount64(), ": tick received from ", func_name, ": ",
                        tick.time, "   ", tick.time_msc, "  ",
                        DoubleToString( tick.bid, _Digits ), " / ",
                        DoubleToString( tick.ask, _Digits ), " / ",
                        DoubleToString( tick.last, _Digits ) );
};

そして、EAのログを見て、ティック受信の時刻を分析します。


何か面白いことを見つけたら(例えば、OnTickからのティック(GetTickCount64)の取得時間がOnBookからの同じ時間(同じティックの場合)より長いなど)、ここに投稿してください。

 
Andrey Khatimlianskii:

エッジバンド(ビッド/アスク)やフリッパーに影響しないカップの変化を呼び出さないのであれば、そう、それらのトリガーはティックとは関係ないのです。


あなたは間違っている、何度でも言う。

このEAを1つの端末で2つのチャートで実行します。1つは「Use OnBookEvent」モードで、もう1つは「Use OnTick」モードです(これは入力パラメータです)。イベントハンドラ内のコードは同一です(別の関数に入れ、そこから呼び出すこともできますが、それは意味がありません)。

そして、EAのログを見て、ティック受信の時刻を分析します。


何か面白いことを見つけたら(例えば、OnTickからのティック(GetTickCount64)の取得時間がOnBookからの類似の時間(同じティックの場合)より長い)、ここに投稿してください。

言ったとおりだ!

ログ(共同作業)の1行目に、私の説明の直接の確認があります。

OnTick()のトリガーが遅いため、古いデータを受信する。


ファイル:
20200131.log  220 kb
 
prostotrader:

言ったとおりだ!

ログ(コラボレーション)の1行目は、私の説明をそのまま裏付けるものです

OnTick()のトリガーが遅いので、古いデータを取得する。

このログの前に何らかの情報を表示する。

発売直後(一番最初のエントリー)だったのでしょうか?EAをどのような順番で実行したのですか?

ps: 添付のログを参照してください、今見てみます。

 
Andrey Khatimlianskii:

このログの前に何らかの情報を表示する。

発売直後(一番最初のエントリー)だったのでしょうか?EAをどのような順番で実行したのですか?

オンブックが先、オンティックが先、ログは上記に添付