
金融のトピックに興味を持っている多くの人々は、たとえば、株式市場で働くのに最適なプログラミング言語の問題に興味を持っています。 さまざまな言語がさまざまなタスクに適しているため、明確に答えることは不可能です。
本日の記事では、株式市場の特定の状況でどのテクノロジーを使用すべきかを理解する方法について説明します。
投資意思決定
まず第一に、私たちは何かをプログラムする必要がある理由を決定する必要があります。 頻繁なアプリケーション-証券取引所で取引するためのソフトウェアの開発または大きなデータ配列の分析。 プログラミング言語の選択は、市場でどのようなスタイルの仕事が期待されるかに大きく依存します。 より正確には、アプリケーションの速度の要件に依存します。
YChartsサービス開発者のJeffrey Sheckは、対応するQuora スレッドで次のように述べています 。
高頻度取引について話さないのであれば、処理時間の秒数に基づいて投資決定が下されることはないことは明らかです。 むしろ、主なタスクは情報の検索と収集です。 たとえば、多くのヘッジファンドは、明確に定義されたニッチ(独自の産業、非流動的な債務市場、問題を抱えた企業など)にのみ投資します。 この場合、必要な情報を収集するのは簡単ではありません。さまざまなAPIを使用している場合でも、タンバリンと踊ることなくさまざまなソースから情報を簡単にダウンロードできるという事実に頼ることができます。
したがって、分析のためにデータを集約する必要がある場合、さまざまな問題を解決するために既に作成された多くのコードで、非常に高速で多数のライブラリを使用することをお勧めします(毎回車輪を再発明しないように)。 ほとんどの場合、C#、Java、Pythonなどです 。
迅速な取引ロボットが必要な場合
速度が優先される場合があります。 この場合、開発者は効果的な低レベル言語の使用に頼ります。

Finam JSCのアルゴリズム取引部門の責任者であるAleksey Afanasevskyは、私たちの出版物の 1つで、同様の状況に適した次のテクノロジーを呼び出しました。
C ++および純粋なCは、これらのタスクに非常に適しています。 また、アセンブラーで高速ロボットがほぼ作成されることもあります。ここでは、ネットワークカードのメモリへのデータの直接読み取りおよび書き込みのメカニズムに言及する価値があります。ドライバーを介して動作する標準メカニズムをバイパスし、FPGAのような「超高速プログラマブルハードウェア」で動作します
ビジネスの裏側
プログラミング取引アルゴリズムは、取引所技術の「コーリングカード」ですが、取引自体ではなく、このプロセスの「会計」を担当するソフトウェアコンポーネントに注意を払わないと、市場での真の成功を達成できません。
Jeffrey Shekによると、そのような側面の1つはデータストレージです。
データベース言語は非常に重要です。 1日にMicrosoftのすべての株式入札を節約したいですか? SQLデータベース(MySQL、SQLiteなど)を使用してこれを実行してみてください。 この場合、このデータに基づいて取引を行う前に、最適化に多くの時間を費やす必要がある可能性が非常に高くなります。
列形式(ではなく文字列形式)でデータを保存できる言語に注意することをお勧めします-これはティックデータに適しています。 そのようなテクノロジーの中には、 KDB 、 OneTick 、 SECDB (Goldman Sachsで作成)と呼ばれるものがあります。 株価を維持する必要がある場合、PosgreSQLを使用したMySQLは問題ありません。

すべて同じQuoraスレッドで、プリンストン大学のPhD教授であり、Flexport開発部門の責任者であるAndrew Ledwinは、「戦略レベルで」作業するために使用できるプログラミング言語に焦点を合わせました。
ここでは、さまざまなシグナルに基づいて収益性の高い運用ルールを生成する必要があります。 [...]このレベルでの重要なポイントは、言語の表現力です。 多くの場合、PythonやJavaのC ++などの言語を使用しますが、 HaskellまたはRubyは、その後の低レベル言語での主要モジュールの開発における「ラッパー」として理想的なオプションであると考えています。
もう1つの重要なステップは、信号の検索です。 ほとんどの場合、これはオフラインアクティビティであり、その間、リアルタイムシステムの制限を考慮して多数の統計が分析されます。 彼らはRやMatlab (同じゴールドマン)のようなツールを使用します。 最小限の労力で大量のデータを機械学習および操作できる可能性が重要です。 しかし、一般的に、主な結果はここにあります-Excelを使用してそれを達成することができたら、誰が気にしますか?
プログラマーとして働きたいだけなら
上記では、独自の取引システムを作成するコンテキストでプログラミング言語を選択することについて説明しました。 ただし、取引所とブローカーのインフラストラクチャも一部の言語で誰かが作成することを忘れないでください。各企業の従業員はこのエコシステム全体をサポートする必要があります。
金融業界では、C ++を知っている専門家は常に高く評価されています。なぜなら、ブローカーと取引所のシステムの大部分はその使用とともに書かれているからです。 デリバティブの価格モデルを計算するライブラリからインフラストラクチャソリューション、さまざまなフローの処理、データの保存まで、すべてが書かれています。 そのため、C ++を熟知している専門家は常に仕事を見つけます(たとえば、同じモスクワ取引所で )。
投資会社はまた、C#を非常に頻繁に使用し、Javaをより頻繁に使用します。 専門家は、インフラストラクチャプロジェクトでのこれらのテクノロジーの人気に注目しています。さまざまなフロントエンドインターフェイス、データフィード、およびデリバティブ価格を計算するためのモジュールでさえ、特にそれらに書かれています。
SmartXトレーディングターミナルの開発者であるAndrey Gorkovenkoはこれに同意します。 インタビューで、彼は株式市場で手を試してこれらの言語を学び始める開発者に助言しました。
.NETやJavaなどの高レベルのプラットフォームと言語に注意を向けることをお勧めします。 後者は欧米の株式市場で非常に人気がありますが、少ないですが、この言語が広く普及する見込みはあります。 これは、Javaプログラマーが金融会社、ファンド、ブローカーに需要があることを意味します。

結論:すべてが相互接続されています
金融におけるプログラミング言語の議論中の行は、香港最大の投資基金からの量子であるJoseph Wangを引用することによって要約できます。 この専門家によると、特定の問題を解決するために使用されるプログラミング言語は相互に補完しています。
プロセッサで多くの作業を必要とするものを実装するには、C ++またはCUDAが使用されます。 データ交換に関連するプロセスには、Javaが使用されます。 取引アプリケーションの研究とプロトタイピングを行うために、Python、R、TradeScriptスクリプト言語(SmartXターミナルで使用)、さらにはMatlabを使用します。 また、多くのトレーダーはExcel / VBAを使用してレポートを作成します。
これらの言語はすべて相互接続されています。 C ++で価格分析モジュールを作成し、データをJavaトレーディングエンジンにフィードし、PythonまたはRを使用してデータを分析し、Excelを介してすべてをレポートにアップロードできます。