統計リファレンス

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

リスク係数

SharpeRatioParameterSortinoRatioParameter は、基本クラス RiskAdjustedRatioParameter から継承し、IRiskFreeRateStatisticParameter インターフェイスを実装します。

これらは次の設定をサポートします。

  • RiskFreeRate -- 年率のリスクフリーレート (例: 0.03m = 3%)
  • Period -- リターン計算期間 (既定値 TimeSpan.FromDays(1))

CalmarRatioParameterSterlingRatioParameter は他のパラメーター (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;
}

パーセンテージパラメーター用の初期資本の設定

NetProfitPercentParameterMaxProfitPercentParameter パラメーターでは、初期資本値の設定が必要です。

// パーセンテージ計算用の初期資本を設定
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);

関連項目