ストラテジーパネルの作成

Shell の各ストラテジーには、2 つのパネルがあります。エミュレーション 領域の設定パネルと、リアルタイム 領域の監視パネルです。既定では、どちらも共通のパネルで、パラメーターのテーブルと、エミュレーションの場合は履歴の設定タブがあります。独自のパネルが必要になるのは、ストラテジーにそれ以外にも表示するものがある場合です。

ひな形

パネルは Shell.Avalonia/Shell.Avalonia/Views/Strategies/ にあります。独自のパネルは、2 つの共通パネルのいずれかを内部で使う、通常の Avalonia の UserControl です。

<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:views="using:Shell.Views.Strategies"
             xmlns:strategies="using:Shell.ViewModels.Strategies"
             x:Class="Shell.Views.Strategies.MyTestingView"
             x:DataType="strategies:StrategyDraftViewModel">
  <views:TestingView Header="マイストラテジー、テスト" />
</UserControl>

TestingView は設定パネル、MonitoringView は監視パネルです。Header プロパティは、パネルがタイトルバーに表示する自分の名前です。

パネルのデータコンテキストは、常に StrategyDraftViewModel、つまりユーザーが編集するモデルそのものです。これを通じて、ストラテジーの名前、パラメーター、実行の設定、現在の状態にアクセスできるため、独自の要素はメインウィンドウを介さずに、このモデルへ直接バインドします。

パネルとストラテジーの関連付け

どのストラテジーにどのパネルを表示するかは、StrategyDraftViewLocator が決めます。そこには「領域 + テンプレートの種類 — パネル」の組み合わせが列挙されています。

public Control Build(object data)
	=> data switch
	{
		StrategyDraftViewModel { WorkspaceKind: StrategyWorkspaceKind.Backtest, TemplateKind: StrategyTemplateKind.Sma } => new SmaTestingView(),
		StrategyDraftViewModel { WorkspaceKind: StrategyWorkspaceKind.Realtime, TemplateKind: StrategyTemplateKind.Sma } => new SmaMonitoringView(),
		...
		StrategyDraftViewModel { WorkspaceKind: StrategyWorkspaceKind.Backtest } => new TestingView(),
		StrategyDraftViewModel { WorkspaceKind: StrategyWorkspaceKind.Realtime } => new MonitoringView(),
		_ => null,
	};

最後の 2 行が既定のパネルです。何も追加されていないストラテジーには、これらのパネルが割り当てられます。

表示する必要がないもの

約定のチャート、統計、収益曲線、注文、自己約定を独自のパネルに描画する必要はありません。これらは隣にある別のパネルで、どのストラテジーについても自動的に内容が表示されます。

推奨コンテンツ

ストラテジーの作成