mql5言語の特徴、微妙なニュアンスとテクニック - ページ 67

 
fxsaber:
実例で見る整数の比較のニュアンス

Sleep(1000)できっちり1秒を計るつもりなのか?

プロセッサのタイマーに15msの誤差があることをご存知ですか?

 
スラバ

Sleep(1000)を滑らせて正確に1秒を計るのか?

CPUのタイマーは15msの誤差があることをご存知でしょうか?


こんにちは、タイマーの設定 エラーをなくすために、タイマーバッファをリセットする方法があれば教えていただけませんか?

 
ウラジスラフ・アンドルシェンコ

こんにちは、タイマーの設定 エラーを防ぐために、タイマーバッファをリセットする方法があれば教えてください。

システムメッセージキューが満杯のため、タイマ設定エラーが発生しました。これにはいろいろな理由が考えられます。通常、キューのオーバーフローは一時的なものです(そうでない場合は、コンピュータで作業することができなくなります)

タイマーを監視するには、OnTickを使用します。タイマーが設定されていない場合は、OnTickに設定する

一方、タイマーの設定をメッセージキューの状態から独立させるための作業も行っています。

PS システムタイマーを有効にすることと、アプリケーションのタイマーを設定することは関連性がありません

 
スラバ

Sleep(1000)を滑らせて正確に1秒を計るのか?

いや、この2行の整数値比較 のことだ。

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

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2018.01.24 21:48

実例を使った整数の比較のニュアンス
//  if (GetMicrosecondCount() > StartTime + 1000000) // Неправильно
  if (GetMicrosecondCount() - StartTime > 1000000) // Правильно

一見すると、どちらのラインも同じ結果になるはずです。でも、そうじゃないんです。最初のものは、時々間違った出力をすることがあります。

時間のある例は、わかりやすくするために選んだだけです。
スラバ

また、プロセッサー内のタイマーに15msの誤差があることは、ご存じないのでしょうか?

GetTickCountをまだ使っているのは不思議です。マイクロ秒タイマーがミリ秒タイマーより遅くないことは、フォーラムで証明されています(検索するのが面倒なので)。同時に、それは野生のエラーを持っていません。

 
fxsaber:

いや、この2つの文字列の整数値比較の ことだ。

一見すると、どちらの文字列も同じ結果になるはずです。しかし、これは事実ではありません。最初のものは、時に間違った結果を出すことがあります。

時間のある例は、わかりやすくするために選んだだけです。

GetTickCountをまだ使っているのは不思議です。マイクロ秒タイマーがミリ秒タイマーより遅いわけではないことは、フォーラムで証明されています(検索するのが面倒なので)。同時に、ワイルドエラーもありません。

つまり、Sleep(1000)
 
スラバ

システムメッセージキューが満杯のため、タイマエラーが発生しました。その理由はいくつかあると思われます。キューのオーバーフローは通常、一時的なものです(そうでない場合は、コンピュータで作業することはできません)。

タイマーを監視するには、OnTickを使用します。タイマーが設定されていない場合は、OnTickに設定する

一方、タイマーの設定をメッセージキューの状態から独立させるための作業も行っています。

PS システムタイマーを有効にすることと、アプリケーションにタイマーを設定することは別問題です


まさにその通りです。

注文 履歴や現在の注文が50件以上あるなど、データ量が多い場合、すぐにではなく、ある程度の時間が経過してからタイマーエラーが発生します。

すでに試していますが、それでも使ってみたくなる予感がします。

 
スラバ
Sleep(1000)の話です。

そう、整数の比較というテーマが泥沼化したんですね。

 
fxsaber

そう、整数の比較の話ですね。

整数の比較に問題はない。

スリップなし、GetMicrosecondsCountなしでも同じように表示します。

 
スラバ

整数の比較に問題はない。

スリップなし、GetMicrosecondsCountなしでも同じように表示する

ulong GetMicrosecondCount2()
{
  static ulong StartTime = 0;
  
  if (StartTime)
    StartTime += 1000001;            // При повторном - добавляем больше "секунды"
  else
    StartTime = ULONG_MAX - 1000000; // При первом запуске возвращаем это "время"
    
  return(StartTime);
}

void OnStart()
{
  const ulong StartTime = GetMicrosecondCount2();
  
//  Sleep(1000);
  
//  if (GetMicrosecondCount2() > StartTime + 1000000) // Неправильно
  if (GetMicrosecondCount2() - StartTime > 1000000) // Правильно
    Print("Прошло больше секунды.");
  else
    Print("Прошло меньше секунды."); 
}
しかも、問題ではなく、微妙なところです。
 

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

"MetaTrader 5にヘッジ・ポジション会計システムが追加 "についてのディスカッション

fxsaber さん 2018.01.25 10:14

  1. この記事を読んで、Andrewが指摘 した取引状況の一例を示す。
  2. HistorySelectByPositionは、取引の原因となった注文を選択しない場合があります。
  3. 注文とそれが発生した案件のIDが異なる場合があります。
2点目と3点目は、せめてどこかで声を上げるべきでしょう。その通りだ。

マニュアルトレードの歴史さえも分析するという話であって、TSを書くという話ではない。

例えば、どのように取引がすり抜けたのか、理解したいのです。
理由: