・機能の変更を頻繁にする可能性があるため、機能の実装は、必ずインターフェイスを活用すること。 ・テストがしやすい設計であること。 ・過去のCSVのklineデータを全てデータベースに記録する機能 ・バックテストではCSVデータを使用するが、後々API経由でのリアルタイムtradeの実装を考慮して、機能の追加が容易な設計であること ・一つの銘柄に対して、複数の戦略を同時にテストできること。 ・複数の戦略のポジションサイズや最大リスク等を一元管理するマネーマネージメント機能の実装 ・後々、検証するために大量の戦略を追加するため、戦略の追加が容易な拡張性があること ・戦略で使用するインジケーターは、後々大量に追加するため、拡張性が有ること。 ・取引の実行は、後々API経由での取引実行をしたいので、拡張が容易な設計であること ・バックテスト結果を分析するための機能の実装。パフォーマンスを測るための指標を大量に追加するため、拡張性があること。 ・バックテストの分析結果を出力するための、簡単なフロントエンドの実装
BOTは自由にブローカーAPIを切り替えることができます BOTはバックテスト機能から本番環境へのスイッチを容易に行えます それは、トレードの実行に関わる機能で切り替えるだけで行えます BOTはロングとショートの両方のトレードに対応した、精密なバックテスト機能を持っています BOTは、バックテスト結果を詳細に出力する、アナリティクス機能を持っています BOTは、ストラテジーを容易に追加、変更することができます BOTはオリジナルインジケーターを容易に追加、拡張することができます BOTはトレードの実行の機能を制御するためのマネーマネジメント機能を持っています BOTは一人のトレーダーとして振る舞い、Long,Short,Exit,Stayの4つの行動を取ります。 BOTには、相場の予測を専門にする機能、Predictorというアドバイザーがいます。 PredictorがBOTの行動を制御します
project-name/
├── README.md # 仕様を記述するファイル
├── cmd/ # 実行可能なコマンドを格納するディレクトリ
│ ├── backtest/ # バックテストを実行するコマンドを格納するディレクトリ
│ │ └── main.go # バックテストを実行するコマンドのメインファイル
│ └── trade/ # リアルタイムトレードを実行するコマンドを格納するディレクトリ
│ └── main.go # リアルタイムトレードを実行するコマンドのメインファイル
├── pkg/ # プロジェクトの内部で使用するパッケージを格納するディレクトリ
│ ├── config/ # 設定を管理するパッケージを格納するディレクトリ
│ │ └── config.go # 設定を管理するパッケージのファイル
│ ├── data/ # データを管理するパッケージを格納するディレクトリ
│ │ ├── data.go # データを管理するパッケージのファイル
│ │ └── csv/ # CSVファイルを格納するディレクトリ
│ ├── strategy/ # 戦略を管理するパッケージを格納するディレクトリ
│ │ ├── strategy.go # 戦略を管理するパッケージのファイル
│ │ └── strategies/ # 各戦略を格納するディレクトリ
│ ├── indicator/ # インジケーターを管理するパッケージを格納するディレクトリ
│ │ ├── indicator.go # インジケーターを管理するパッケージのファイル
│ │ └── indicators/ # 各インジケーターを格納するディレクトリ
│ ├── management/ # 資金、リスク、ポジションサイズを管理するパッケージを格納するディレクトリ
│ │ ├── management.go # インジケーターを管理するパッケージのファイル
│ │ └── managements/ # 各マネジメント定義を格納するディレクトリ
│ ├── trade/ # 取引を管理するパッケージを格納するディレクトリ
│ │ ├── trade.go # 取引を管理するパッケージのファイル
│ │ └── api/ # APIを利用するパッケージを格納するディレクトリ
│ ├── analysis/ # 分析を管理するパッケージを格納するディレクトリ
│ │ ├── analysis.go # 分析を管理するパッケージのファイル
│ │ └── metrics/ # パフォーマンス指標を格納するディレクトリ
│ └── util/ # ユーティリティを管理するパッケージを格納するディレクトリ
│ └── util.go # ユーティリティを管理するパッケージのファイル
├── web/ # フロントエンドを格納するディレクトリ
│ ├── index.html # フロントエンドのメインページ
│ ├── css/ # CSSファイルを格納するディレクトリ
│ └── js/ # JavaScriptファイルを格納するディレクトリ
└── go.mod # モジュールを管理するファイル
このようなディレクトリ構造にすることで、以下のようなメリットがあります。
- プロジェクトの構成が明確になり、コードの可読性と保守性が向上します。
- プロジェクトの機能や要件が変更されても、インターフェイスを活用することで、柔軟に対応できます。
- プロジェクトのテストがしやすくなり、バグを最小限に抑えることができます。
- プロジェクトの拡張性が高くなり、新しい戦略やインジケーター、パフォーマンス指標などを追加することが容易になります。
- プロジェクトの実行方法と使用方法が簡単になり、コマンドラインやブラウザから操作できます。 <<<<<<< HEAD
Echo GORM TA-LIB
=======