統計リファレンス
StatisticManager は、IStatisticParameter インスタンスのコレクションを管理します。各パラメーターは、戦略実行中に特定の指標を追跡します。利用可能なすべてのパラメーターは StatisticParameterRegistry を使用して作成されます。
戦略統計の扱い方の一般的な概要については、統計 セクションを参照してください。
インターフェイス
統計システムは、インターフェイスの階層の上に構築されています。各インターフェイスは、パラメーターを計算するためのデータソースを定義します。
| インターフェイス | 説明 |
|---|---|
| IStatisticParameter | 基本インターフェイス: プロパティ Name, Type, Value, DisplayName, Description, Category, Order; メソッド Reset() |
| IPnLStatisticParameter | 損益に基づくパラメーター: メソッド Add(marketTime, pnl, commission) |
| ITradeStatisticParameter | 取引に基づくパラメーター: メソッド Add(PnLInfo) |
| IOrderStatisticParameter | 注文に基づくパラメーター: メソッド New(order), Changed(order), RegisterFailed(fail), CancelFailed(fail) |
| IPositionStatisticParameter | ポジションに基づくパラメーター: メソッド Add(marketTime, position) |
| IRiskFreeRateStatisticParameter | リスクフリーレートを持つパラメーター: プロパティ RiskFreeRate |
| IBeginValueStatisticParameter | 初期値を持つパラメーター: プロパティ BeginValue |
損益 (P&L) パラメーター
このグループのすべてのパラメーターは、IPnLStatisticParameter インターフェイスを実装し、BasePnLStatisticParameter から継承します。これらは戦略の P&L 値が更新されるたびにデータを受け取ります。
| クラス | 説明 | 値の型 |
|---|---|---|
| NetProfitParameter | 期間全体の純利益。現在の P&L 値と等しく設定されます | decimal |
| NetProfitPercentParameter | パーセンテージで表した純利益。BeginValue (初期資本) の設定が必要です。式: pnl * 100 / BeginValue |
decimal |
| MaxProfitParameter | 最大利益 (期間全体で最も高い P&L 値) | decimal |
| MaxProfitPercentParameter | パーセンテージで表した最大利益。BeginValue が必要です。式: MaxProfit * 100 / BeginValue |
decimal |
| MaxProfitDateParameter | 最大利益に到達した日付 | DateTime |
| MaxDrawdownParameter | 最大絶対ドローダウン。エクイティカーブのピークと谷の差 | decimal |
| MaxDrawdownPercentParameter | パーセンテージで表した最大ドローダウン。式: MaxDrawdown * 100 / MaxEquity |
decimal |
| MaxDrawdownDateParameter | 最大ドローダウンの日付 | DateTime |
| MaxRelativeDrawdownParameter | 最大相対ドローダウン。ドローダウンとピーク時エクイティ値の比率として計算されます | decimal |
| ReturnParameter | 期間全体の相対リターン。谷から現在値までの最大成長を相対値で表します | decimal |
| CommissionParameter | 支払済み手数料の合計。すべての手数料値を累積します | decimal |
| AverageDrawdownParameter | 平均ドローダウン。完了済みおよび現在のすべてのドローダウンの算術平均 | decimal |
| RecoveryFactorParameter | リカバリーファクター。式: NetProfit / MaxDrawdown |
decimal |
| SharpeRatioParameter | シャープレシオ。式: (annualized return - risk-free rate) / annualized standard deviation |
decimal |
| SortinoRatioParameter | ソルティノレシオ。Sharpe に似ていますが、下方偏差のみを考慮します | decimal |
| CalmarRatioParameter | カルマーレシオ。式: NetProfit / MaxDrawdown |
decimal |
| SterlingRatioParameter | スターリングレシオ。式: NetProfit / AverageDrawdown |
decimal |
リスク係数
SharpeRatioParameter と SortinoRatioParameter は、基本クラス RiskAdjustedRatioParameter から継承し、IRiskFreeRateStatisticParameter インターフェイスを実装します。
これらは次の設定をサポートします。
- RiskFreeRate -- 年率のリスクフリーレート (例:
0.03m= 3%) - Period -- リターン計算期間 (既定値
TimeSpan.FromDays(1))
CalmarRatioParameter と SterlingRatioParameter は他のパラメーター (NetProfitParameter, MaxDrawdownParameter, AverageDrawdownParameter) に依存し、StatisticParameterRegistry 経由で作成された場合に自動的にリンクされます。
取引パラメーター
このグループのすべてのパラメーターは ITradeStatisticParameter インターフェイスを実装します。実行された各取引について、PnLInfo オブジェクトを通じてデータを受け取ります。
| クラス | 説明 | 値の型 |
|---|---|---|
| TradeCountParameter | 総取引数 (ClosedVolume > 0 の取引のみがカウントされます) |
int |
| WinningTradesParameter | 利益取引数 (ClosedVolume > 0 かつ PnL > 0) |
int |
| LossingTradesParameter | 損失取引数 (ClosedVolume > 0 かつ PnL < 0) |
int |
| RoundtripCountParameter | 完了した往復取引の数 (ClosedVolume > 0 の決済取引) |
int |
| AverageTradeProfitParameter | 1 取引あたりの平均利益。式: SumPnL / Count |
decimal |
| AverageWinTradeParameter | 利益取引の平均利益。PnL > 0 の取引のみが考慮されます |
decimal |
| AverageLossTradeParameter | 損失取引の平均損失。PnL < 0 の取引のみが考慮されます |
decimal |
| ProfitFactorParameter | プロフィットファクター。式: GrossProfit / GrossLoss |
decimal |
| ExpectancyParameter | 数学的期待値。式: P(win) * AvgWin + P(loss) * AvgLoss |
decimal |
| PerMonthTradeParameter | 月あたりの平均取引数 | decimal |
| PerDayTradeParameter | 日あたりの平均取引数 | decimal |
| GrossProfitParameter | 総利益。すべての利益取引の P&L の合計 (PnL > 0) |
decimal |
| GrossLossParameter | 総損失。すべての損失取引の P&L の合計 (PnL < 0、値は負) |
decimal |
ポジションパラメーター
このグループのパラメーターは IPositionStatisticParameter インターフェイスを実装します。ポジションが変化するたびにデータを受け取ります。
| クラス | 説明 | 値の型 |
|---|---|---|
| MaxLongPositionParameter | 最大ロングポジション。最も高い正のポジション値 | decimal |
| MaxShortPositionParameter | 最大ショートポジション。負のポジション値の最大絶対値 | decimal |
注文パラメーター
このグループのすべてのパラメーターは IOrderStatisticParameter インターフェイスを実装し、BaseOrderStatisticParameter から継承します。注文登録、変更、エラーに関するデータを受け取ります。
| クラス | 説明 | 値の型 |
|---|---|---|
| OrderCountParameter | 登録された注文の総数 | int |
| OrderRegisterErrorCountParameter | 注文登録エラーの数 | int |
| OrderInsufficientFundErrorCountParameter | "insufficient funds" エラーの数 (型 InsufficientFundException) |
int |
| OrderCancelErrorCountParameter | 注文キャンセルエラーの数 | int |
レイテンシーパラメーター
レイテンシーパラメーターも IOrderStatisticParameter を実装しますが、注文処理の時間特性を追跡します。
| クラス | 説明 | 値の型 |
|---|---|---|
| MaxLatencyRegistrationParameter | 最大注文登録レイテンシー (Order.LatencyRegistration プロパティ) |
TimeSpan |
| MinLatencyRegistrationParameter | 最小注文登録レイテンシー | TimeSpan |
| MaxLatencyCancellationParameter | 最大注文キャンセルレイテンシー (Order.LatencyCancellation プロパティ) |
TimeSpan |
| MinLatencyCancellationParameter | 最小注文キャンセルレイテンシー | TimeSpan |
使用方法
戦略統計へのアクセス
var strategy = new MyStrategy();
// 実行後に統計へアクセス
foreach (var param in strategy.StatisticManager.Parameters)
{
Console.WriteLine($"{param.DisplayName}: {param.Value}");
}
特定のパラメーターの取得
// 純利益値を取得
var netProfit = strategy.StatisticManager.Parameters
.OfType<NetProfitParameter>()
.First();
Console.WriteLine($"Net profit: {netProfit.Value}");
係数用のリスクフリーレートの設定
Sharpe と Sortino の各レシオを正しく計算するには、リスクフリーレートを設定する必要があります。
// すべての係数に 3% のリスクフリーレートを設定
foreach (var param in strategy.StatisticManager.Parameters
.OfType<IRiskFreeRateStatisticParameter>())
{
param.RiskFreeRate = 0.03m;
}
パーセンテージパラメーター用の初期資本の設定
NetProfitPercentParameter と MaxProfitPercentParameter パラメーターでは、初期資本値の設定が必要です。
// パーセンテージ計算用の初期資本を設定
foreach (var param in strategy.StatisticManager.Parameters
.OfType<IBeginValueStatisticParameter>())
{
param.BeginValue = 1_000_000m; // 1,000,000
}
統計のリセット
// すべての統計パラメーターをリセット
strategy.StatisticManager.Reset();
状態の保存と読み込み
すべてのパラメーターは、IPersistable インターフェイスによるシリアル化をサポートします。
// 保存
var storage = new SettingsStorage();
strategy.StatisticManager.Save(storage);
// 読み込み
strategy.StatisticManager.Load(storage);