ミリ秒単位のタイムスタンプを提供する新しいmql4....

 

現在、mql4は受信ティックに対して秒単位までの時間しか提供することができません。 以下の関数を 使用しています。

MarketInfo(Symbol(), MODE_TIME)

1) ミリ秒のタイムスタンプを提供できる別の関数、またはプラットフォームに来るティックデータのミリ秒を決定するために使用できる関数はありますか?

2) mql5の機能を組み合わせた新しいmql4は、受信ティックのミリ秒(またはサブ秒)タイムスタンプを要求または取得することができるのでしょうか?

mt4 (および mt5) プラットフォームは、「同じ時間」に入力されたティックをどのように適切に区別するのでしょうか?

 
4evermaat:

現在、mql4は受信ティックに対して秒単位までの時間しか提供することができません。以下の関数を使用しています。

MarketInfo(Symbol(), MODE_TIME)

1) ミリ秒のタイムスタンプを提供できる別の関数、またはプラットフォームに来るティックデータのミリ秒を決定するために使用できる関数はありますか?

2) mql5の機能を組み合わせた新しいmql4は、受信ティックのミリ秒(またはサブ秒)タイムスタンプを要求または取得することができるのでしょうか?

mt4 (および mt5) プラットフォームは、「同じ時間」に入力されたティックをどのように適切に区別するのでしょうか?

1) GetTickCount(), Liveで動作するはずです。ヒストリカルデータでは無意味です。

2) mt5_data でさえ、ミリ秒単位で保存されていない。しかし、Liveではノープロブレム。

3)どこがどうなっているのかわからない。ミリ秒単位で同じ時間なら、ミリ秒があってもしょうがないでしょう。ミリ秒単位で異なる時間なら、GetTickCount()で解決できるかもしれません。この場合、コードが1ミリ秒以内に現在のティックを処理するという意味で役に立ちます。どの程度重要かは、何を達成しようとしているかによると思います。

 

少なくとも2つの選択肢があります。

1.MQLのGetTickCount()で刻みを区別する、これは16msの精度です。

2.2.Kernell32.dllのGetLocalTime()を使ってPCの時刻にアクセスし、ナノ秒の精度を得る(これはLinuxのエミュレータでは動作しません、彼らはまだ16ミリ秒の精度を返します)。

 

4evermaat: ティックはVolumeで区別されていると思います。ブローカーから新しいティックが送信されるたびに、ボリュームは1つずつ増えていきます。例えば、M1チャートを見ている場合、特定のバーのボリュームは、その分、何ティックが送信されたかを示します。

実は昨日、ミリ秒単位で時間を記録する関数を作ろうとしたんです。TimeCurrent() とGetTickCount()を使って いました。数学的には正しいのですが、GetTickCount()は十分に正確ではありません。イベント時間を最後の1秒に丸める(つまりTimeCurrent()を使う)方が、私の関数よりも誤差が小さいことが分かりました... :/。

また別の日に試してみますが、私が見る限り、1秒以内の精度が必要な場合は、GetTickCount()に頼ることはできません。

多分、C++の専門家は、より正確なGetTickCount()の同等物にアクセスできるのではないでしょうか...?

 
Ovo:

少なくとも2つの選択肢があります。

1.MQLのGetTickCount()で刻みを区別する、これは16msの精度です。

2.2. Kernell32.dllのGetLocalTime()を使ってPCの時刻にアクセスし、ナノ秒の精度を得る(これはLinuxのエミュレータでは動作しません、彼らはまだ16ミリ秒の精度を返します)。


1) 私のテストから、私はGetTickCount()が16msの精度を持っているとは思えません。確かに、16msは私が得る小さな値ですが(0を除いて)、16msについての値が最も近い16msに正確であるとは思いません :/。

2) ああ、それは素晴らしいアイデアです。試してみます。

 
alladir:


1) 私のテストでは、GetTickCount()が16msの精度を持つとは思えません。確かに16msは(0を除けば)小さな値ですが、16ms程度の値が最も近い16msの精度を持つとは思えません :/。

2) ああ、それはいい考えですね。試してみます。


すみません、私は精度と正確さをよく混乱させるので、どちらがどちらなのか今でもよくわかりません。
 
Ovo:

すみません、私はよく精度と正確さを混同してしまうので、今でもどれがどれだかよくわかりません。

私もそうです。私が知っているのは、数学的にうまくいくはずの数式が、現実にはうまくいかないということだけです...だから、GetTickCount() のせいにしています :)
 
alladir:

4evermaat: ティックはVolumeで区別されていると思います。ブローカーから新しいティックが送信されるたびに、ボリュームは1つずつ増えていきます。例えば、M1チャートを見ている場合、あるバーのボリュームは、その分間に送られたティックの数です。


これは何度も見たことがあるのですが、本当にそうなのでしょうか?ECNブローカーで何度か確認しましたが、ティック ごとにボリュームがかなり異なっており、おそらくそのブローカーで実際に取引されたロットが流れているのでしょう。例えば、私は10ロットを販売するとき、次のティックのロットは+1ではなく、+10になります。

 

10ロット取引すると出来高が10増える?!?それは経験したことがありません。私はティックコレクターを動かして、すべてのティックを 記録しています。時々、出来高が2~3倍になることがありますが、それはブローカーが送らなかったか、私のティックコレクターのスタート機能がまだ動いている間に届いた、非常に速いティックだと推測しています。

ええ、私はググってボリューム=ティックとしか思っていませんが、私が見ているデータとは一致するようです。

 
szgy74:

私は前に何度もこれを見たことがありますが、あなたはこれについて確信していますか?私は私のECNブローカーでこれを何回かチェックし、ボリュームは非常にすべてのティックで異なって増加し、それはおそらく、そのブローカーを介して流れる実際の取引ロットです。例えば、私は10ロットを販売するとき、次のティックのロットは+1ではなく、+10になります。

ボリュームは、実際には "ティックカウント "であるものの悪い名前です ... それは、取引量/ロットとは 何の関係もありません ... それは1以上によって変更することができる理由は、あなたがティックを見逃すことができるからである。
 
4evermaat:

現在、mql4は受信ティックに対して秒単位までの時間しか提供することができません。 以下の関数を使用しています。

MarketInfo(Symbol(), MODE_TIME)

1) ミリ秒のタイムスタンプを提供できる別の関数、またはプラットフォームに来るティックデータのミリ秒を決定するために使用できる関数はありますか?

2) mql5の機能を組み合わせた新しいmql4は、受信ティックのミリ秒(またはサブ秒)タイムスタンプを要求または取得することができるのでしょうか?

mt4 (および mt5) プラットフォームは、「同じ時間」に入力されたティックをどのように適切に区別するのでしょうか?

mql5にもそのような情報はありません。しかし、ミリ秒単位で使用できるTimer イベントがあります。
理由: