私は、非高頻度取引ポートフォリオの作成、最適化、およびシミュレーションを担当する取引ポートフォリオ管理システムを構築しています(ティックデータではなく、1分または3分のデータバーを処理します)。
アマゾンウェブサービスを利用して、アプリケーションの全負荷を引き受ける予定です。
言語として考えている選択肢は4つあります。
- Java
- C ++
- C#
- Python
これがプロジェクトスコープの両極端のスコープです。これは、おそらくこれまでの方法ではありませんが、要件の範囲内です。
- 10,000,000の取引システムの毎週のシミュレーション。
- (各トレーディングシステムには、計算コストが非常に高い特徴選択アルゴリズムなど、独自のデータマイニング手法が必要です。ラッパーを使用した500〜5000の特徴を想像してみてください。これらは決して頻繁に実行されることはありませんが、それでも考慮事項です)
- 100,000のトレーディング戦略によるポートフォリオのリアルタイム生産
- 世界中のすべての株式/先物市場から1分または3分のデータを取り込む(約100,000)
- 最大100,000の戦略を持つポートフォリオのポートフォリオ最適化。(かなり集中的なアルゴリズム)
速度が問題ですが、Javaで負荷を処理できると思います。
Javaが上記の要件を快適に処理できることを確認したいだけです。プロジェクトをC++で実行したくありませんが、必要に応じて実行します。
C#が存在する理由は、Windowsがまったく好きではなく、すべてが同じであればJavaを好むにもかかわらず、Javaの優れた代替手段だと思ったためです。
Python-PyPyとpyschoで、PythonをJITコンパイルで最適化して、C言語に近い速度で実行できると主張しているものを読んだことがあります...これが、Pythonが素晴らしい言語であり、おそらくコーディングするのに最も楽しい言語であり、これはこのプロジェクトの要因ではありませんが、特典です。
総括する:
- リアルタイム生産
- 多数のシステムの毎週のシミュレーション
- ポートフォリオの毎週/毎月の最適化
- データを収集するための多数の接続
ミリ秒または秒ベースの取引を扱うことはありません。唯一の考慮事項は、Javaが必要な量のEC2サーバーから分散されたときにこの種の負荷を処理できるかどうかです。
皆さんの知恵に感謝します。