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

 
スラバ
測定開始が最初のOnTickの開始であることを指定するのを忘れています。測定終了はOnDeinitの開始時です。
あるいはOnTesterの開始時に、なぜなら
// После окончания бэктеста сначала вызывается OnTester, затем OnDeinit

トピック

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

バグ、バグ、質問

fxsaber さん 2016.08.25 11:13

ライフサイクル
// Возвращает true, если полностью выполнился OnTick() на последнее событие NewTick в тестере - окончание бэктеста. Иначе - false.
   static bool BACKTEST::IsEnding(void)
     {
      return(::TesterStatistics(STAT_BALANCEMIN) > 0);
     }
 
fxsaber
あるいは、OnTesterの開始時に、次のように


そして、測定結果をOnTesterのリターンコードとして返します。
 
スラバ
そして、測定結果をOnTesterのリターンコードとして返します。

GetTickCountは まだテスターで テストしていません。私は、この機能をテスターでエミュレートすることを想定していましたが、これは状況によっては論理的なことかもしれません。

ところで、テスターで現在時刻を ms単位で把握するにはどうしたらよいのでしょうか?SymbolInfoTick+Tick.time_mscを使用すると、OnTickメインシンボルの呼び出し時刻を知ることができる。そうして、テスターのスリップモードが正しいかどうかを確認するためにも。しかし、それ以外に方法はないようです。


本当は、別のことを聞きたかったんです。オプティマイザで最初と最後の値を削除してバッチを自動化するために、フレームを介して(OnTester-resultを渡すために)動作する必要があります、またはそれは結果を歪めるのでしょうか?

 
テスターのGetTickCountは 正常に動作し、Sleepとは異なりエミュレートされない。
 
fxsaber

本当は、別のことを聞きたかったんです。オプティマイザで最初と最後の値を破棄してベンチを自動化するためには、フレームを介した動作(OnTester-resultを渡す)が必要ですが、結果が歪んでしまうのでしょうか?

そうであってはならないのです。測定後に送信されます。トライ
 
Slava:
質量測定にマイクロセカンドタイマーを使わないで ください。通常のミリ秒のGetTickCountを使用します。

GetMicrosecondCountは GetTickCountよりもテスターの速度を低下させますか(エミュレートされますか)?

それともEventSetMillisecondTimerの失敗が意味したのでしょうか?

 
fxsaber:

GetMicrosecondCountはGetTickCountよりもテスターの速度を低下させますか(エミュレートされますか)?

それともEventSetMillisecondTimerの失敗が意味したのでしょうか?

GetMicrosecondCountの ことです。サーバーの速度が遅くなるかは何とも言えません。間接的な効果があるかもしれません。そのため、システムネイティブのGetTickCountを使用するのがよいでしょう

GetMicrosecondCountは、短時間のコード実行を測定するために使用します。大量の OnTick 実行を測定するには、GetTickCount を使用するのがよいでしょう。

安定した結果が得られる場合は、GetTickCountの代わりにGetMicrosecondsCountを使用するようにしてください。ここで教えてもらうことになる。心配しすぎかもしれませんね。

 
履歴機能でデータにアクセスできる現在の履歴テーブルには、「受注」テーブルと「取引」テーブルの2つがあります。

その内容は、HistorySelect機能によってのみ影響されます。そして、それは次のように起こります。

  • HistorySelectとHistorySelectByPosition- 両方のテーブルに同時に影響します。
  • HistoryDealSelectは、Dealsテーブルのみに影響します(現在のOrders-Historyテーブルには影響しません)。
  • HistoryOrderSelectはOrdersテーブルのみに影響します(現在のDeals-historyテーブルには影響しません)。

 
注文では、Request.expirationフィールドをLONG_MAX + 2まで 設定することが可能です。この値は、注文が有効であれば、ORDER_TIME_EXPIRATIONを介して 完全に利用できるようになります(履歴テーブルにはありません)。
 
バランストレードのPositionIdentifierが0であること。したがって、例えば次のような関数を簡単に書くことができます。
// Возвращает сумму всех балансовых не торговых операций (начисления + списания)
double GetSumBalanceOperations( void )
{
  double Res = 0;
  
  if (HistorySelectByPosition(0))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
      Res += HistoryDealGetDouble(HistoryDealGetTicket(i), DEAL_PROFIT);
      
  return(Res);
}

このような取引のDEAL_ENTRYはDEAL_ENTRY_IN(0)となる。

理由: