高度な最適化

概要

StockSharp は、ストラテジー最適化プロセスを細かく調整するための高度なツールを提供します。このセクションでは、GeneticSettings による遺伝的アルゴリズム設定、FitnessFormulaProvider によるカスタム適応度式のコンパイル、OptimizationProgressTracker による進捗監視という高度なコンポーネントについて説明します。

GeneticSettings

GeneticSettings クラスは、遺伝的最適化アルゴリズムのすべての側面を管理します。このクラスは StockSharp.Algo.Strategies.Optimization 名前空間にあります。

母集団と世代のパラメーター

プロパティ デフォルト 説明
Population int 8 初期母集団サイズ
PopulationMax int 16 最大母集団サイズ
GenerationsMax int 20 最大世代数
GenerationsStagnation int 5 停滞時に停止 (改善のない世代数)

確率パラメーター

プロパティ デフォルト 説明
MutationProbability decimal 0.1 突然変異確率 (0-1)
CrossoverProbability decimal 0.8 交叉確率 (0-1)

遺伝的オペレーター

プロパティ デフォルト 説明
Reinsertion ElitistReinsertion 世代置換戦略
Mutation UniformMutation 突然変異オペレーター
Crossover OnePointCrossover 交叉オペレーター
Selection TournamentSelection 選択オペレーター

FitnessFormulaProvider

FitnessFormulaProvider クラスは、最適化中にストラテジーを評価するために使用される C# の文字列表現を Func<Strategy, decimal> 関数へコンパイルします。

Compile メソッド

var fitnessProvider = new FitnessFormulaProvider();
Func<Strategy, decimal> fitness = fitnessProvider.Compile("PnL / (MaxDD + 1)");

使用可能な変数

適応度関数の式では、ストラテジー統計指標に対応する次の変数を使用できます。

変数 説明
PnL 純利益
WinTrades 勝ち取引
LosTrades 負け取引
TCount 取引総数
RTrip 往復取引
AvgTPnL 1 取引あたりの平均利益
AvgWTrades 平均勝ち取引
AvgLTrades 平均負け取引
MaxLong 最大ロングポジション
MaxShort 最大ショートポジション
MaxPnL 最大利益
MaxDD 最大ドローダウン
MaxRelDD 最大相対ドローダウン
Ret リターン
Recovery リカバリーファクター
MaxLatReg 最大登録レイテンシ
MaxLatCan 最大キャンセルレイテンシ
MinLatReg 最小登録レイテンシ
MinLatCan 最小キャンセルレイテンシ
OrdCount 注文数
OrdRegErrCount 登録エラー
OrdCancelErrCount キャンセルエラー
OrdFundErrCount 資金不足エラー

変数は任意の数式で組み合わせることができます。例: "PnL - MaxDD * 2""Recovery * WinTrades""PnL / (MaxDD + 1)"

OptimizationProgressTracker

OptimizationProgressTracker クラスは、最適化プロセスを便利に監視する機能を提供します。

プロパティ

プロパティ 説明
TotalIterations int 総イテレーション数
CompletedIterations int 完了したイテレーション数
TotalProgress double 全体の進捗 (0-100)
StartedAt DateTimeOffset 最適化開始時刻
Elapsed TimeSpan 経過時間
Remaining TimeSpan 推定残り時間

メソッド

メソッド 説明
IterationCompleted() 1 回のイテレーションを完了としてマークする
Reset(totalIterations) 新しい実行のためにトラッカーをリセットする

オプティマイザークラス

StockSharp は、BaseOptimizer を継承する 2 つのオプティマイザーを提供します。

  • BruteForceOptimizer -- すべてのパラメーター組み合わせを総当たりで列挙します。小さなパラメーター空間に適しています。
  • GeneticOptimizer -- 遺伝的アルゴリズムです。多数のパラメーターがある場合に効率的で、最適解へ自動的に収束します。

使用例

var geneticSettings = new GeneticSettings
{
	Population = 16,
	PopulationMax = 32,
	GenerationsMax = 50,
	GenerationsStagnation = 10,
	MutationProbability = 0.15m,
	CrossoverProbability = 0.75m,
};

// カスタム適応度関数の式
var fitnessProvider = new FitnessFormulaProvider();
var fitness = fitnessProvider.Compile("PnL / (MaxDD + 1)");

// 遺伝的オプティマイザーを作成
var optimizer = new GeneticOptimizer(
	new CollectionSecurityProvider(new[] { security }),
	new CollectionPortfolioProvider(new[] { portfolio }),
	storageRegistry,
	Paths.FileSystem);

optimizer.Settings.Population = geneticSettings.Population;
optimizer.Settings.PopulationMax = geneticSettings.PopulationMax;
optimizer.Settings.GenerationsMax = geneticSettings.GenerationsMax;
optimizer.Settings.GenerationsStagnation = geneticSettings.GenerationsStagnation;
optimizer.Settings.MutationProbability = geneticSettings.MutationProbability;
optimizer.Settings.CrossoverProbability = geneticSettings.CrossoverProbability;

// 進捗監視
var tracker = new OptimizationProgressTracker();
tracker.Reset(totalIterations: 100);

optimizer.SingleProgressChanged += (strategy, parameters, progress) =>
{
	if (progress == 100)
	{
		tracker.IterationCompleted();
		Console.WriteLine($"Progress: {tracker.TotalProgress:F1}%, " +
			$"Remaining: {tracker.Remaining:hh\\:mm\\:ss}");
	}
};

関連項目