前のトピックの 1つで、ロシアの証券取引所市場の一般的な構造について議論し始めました。そして今日、そのリンクの1つであるブローカーシステムを詳しく見てみましょう。 ブローカー事業は本質的に技術的です。顧客は、しばしばブローカーによって特別に開発された取引端末を使用してアプリケーションを提出します。アプリケーションを処理して取引所に送信するには、アプリケーションを収集して取引所に置くための自動化されたシステムが必要です。 このようなシステムには、アプリケーションを市場にルーティングし、そのステータスとポートフォリオの現在のステータスに関する情報をクライアントに提供できる許可ツールと制限ツールが装備されており、通常、ブローカーのトレーディングシステムと呼ばれます。
現代の取引所のほとんどのアプリケーションは、人ではなく、特定のアルゴリズムに従って動作する特別に作成された取引ロボットによって生成されます。 これらのプログラムの場合、重要な要素は全体的な速度であり、これはロボット自体の効率、通信チャネル、および動作する鉄の力に依存します。 もちろん、ロボットを取引システムに接続するには、APIが必要です。 今日はこれについてお話します。
なぜこれが必要なのですか?
ロボットのブローカーのサーバーとの直接の作業(クライアントインターフェースをバイパス)により、ロボットは取引データ(マーケットデータ)とアカウントステータスを迅速に受信し、このデータをより高速に処理し、それらに基づいて、売買注文を生成し、実行を監視できます。 このスキームでは、取引速度はロボット自体と通信チャネルの速度のみに依存します。
API仕様
仲介システムに接続するためのインターフェイスは、コンポーネントオブジェクトモデル(COM)を使用して作成されました。つまり、このテクノロジをサポートするプラットフォームで開発されたロボットをC ++およびDelphiからMS ExcelからトレーディングサーバーへのVisual Basic for Applicationに接続できます。
最近、APIの新しいバージョン(SmartCOM 3.0)がリリースされ、今年発売されたMatriXと呼ばれる取引システムで動作します(IBM Data Powerテクノロジーを使用して作成しました-これは別のトピックになります)。
オープンインターフェイスの主な機能は次のとおりです。
- X64プラットフォームのサポート。
- マルチスレッド環境での作業:すべてのクライアントイベントを異なるスレッドから呼び出すことができます。
- メソッドを操作するために、インターフェースは追加の同期を使用する必要がありません。 スレッドセーフです。
- 新しいバージョンでは、新しいアーキテクチャソリューションの実装のおかげで(これは別の投稿のトピックです)、パフォーマンスを大幅に改善することができました。
ロボットの種類
さまざまなブローカーのシステム用のロボットの開発に携わる開発者は、個々の愛好家とニーズに合わせてロボットを作成するトレーダーの両方を含むかなり活発なコミュニティを形成し、注文に応じて自動取引システムの構築に専門的に従事する企業を含みます。
その結果、有料のプログラムと無料で配布されているプログラムの両方を入手できます。 次に例を示します。
- StockSharpは、ロボットの取引とアルゴリズム取引の全サイクルの自動化のための無料のプラットフォームです。
- QScalpは、短期および高頻度の為替取引の市場での運用の分析および高速実行のための取引ドライブです。
もちろん、取引ロボットを購入するか、無料のプログラムをダウンロードすることをお勧めします。 しかし、すべてを自分で行うことは、はるかに興味深く、興味をそそる仕事ですよね?
ロボットを作る
取引システムに接続し、口座と相場に関する情報を要求し、取引所に注文を出す独自の単純なロボットを作成してみましょう。
using System; using System.Runtime.InteropServices; using SmartCOM3Lib; namespace SmartTest { class SmartCOMTest { StServer mSmartCOMInstance; /* */ public SmartCOMTest() { try { /* StServerClass */ mSmartCOMInstance = new StServerClass(); /* */ mSmartCOMInstance.ConfigureClient("logLevel=5;"); /* */ mSmartCOMInstance.Connected += new _IStClient_ConnectedEventHandler(mSmartCOMInstance_Connected); mSmartCOMInstance.Disconnected += new _IStClient_DisconnectedEventHandler(mSmartCOMInstance_Disconnected); mSmartCOMInstance.SetPortfolio += new _IStClient_SetPortfolioEventHandler(mSmartCOMInstance_SetPortfolio); mSmartCOMInstance.SetMyOrder += new _IStClient_SetMyOrderEventHandler(mSmartCOMInstance_SetMyOrder); mSmartCOMInstance.UpdateBidAsk += new _IStClient_UpdateBidAskEventHandler(mSmartCOMInstance_UpdateBidAsk); } catch (COMException ex) { /* COM- */ } catch (Exception ex) { /* */ } } /* */ public void Run() { try { /* */ /* Connected */ mSmartCOMInstance.connect("mx.ittrade.ru", 8443, "BPXXXX", "xxxxxx"); /* , Esc, */ while (Console.ReadKey().Key != ConsoleKey.Escape); /* */ mSmartCOMInstance.disconnect(); } catch (COMException ex) { /* COM- */ } catch (Exception ex) { /* */ } } void mSmartCOMInstance_SetPortfolio(string portfolio, double cash, double leverage, double comission, double saldo) { /* */ } void mSmartCOMInstance_Disconnected(string reason) { /* * */ } void mSmartCOMInstance_Connected() { /* , */ /* SBER */ mSmartCOMInstance.ListenPortfolio("BPXXXX-MS-01"); mSmartCOMInstance.ListenBidAsks("SBER"); } void mSmartCOMInstance_UpdateBidAsk(string symbol, int row, int nrows, double bid, double bidsize, double ask, double asksize) { /* */ /* , * , * : */ if (/* */) /* 1 */ mSmartCOMInstance.PlaceOrder("BPXXXX-MS-01", "SBER", StOrder_Action.StOrder_Action_Buy, StOrder_Type.StOrder_Type_Market, StOrder_Validity.StOrder_Validity_Day, 0, 1, 0, 0); } void mSmartCOMInstance_SetMyOrder(int row, int nrows, string portfolio, string symbol, StOrder_State state, StOrder_Action action, StOrder_Type type, StOrder_Validity validity, double price, double amount, double stop, double filled, DateTime datetime, string id, string no, int cookie) { /* */ } } class Program { /* */ static void Main(string[] args) { SmartCOMTest smartCOMTest = new SmartCOMTest(); smartCOMTest.Run(); } } }
利用可能なAPI関数のより完全なリストは、 ここにあります 。
ロボットの作業のエラーによって実際のお金を失うことがないように、特別なテストアカウントで最初にデバッグすることをお勧めします -お金、株、先物、および完全な取引に必要なすべてのリスクのない仮想取引所です。
仕事
人間の目では何が起こっているのかを理解するのは非常に難しいため、通常はロボットの動作を制御するために通常の取引端末が追加で使用されます。
今日は以上です。 次回は、仲介システムの「内部」で何が起こっているのか、アプリケーションをどのように受け入れて処理するのか、交換にどのように対応するのか、この作業にどのハードウェアとソフトウェアが使用されるのかについて話します。
PSトレーディングロボットの作成と使用について質問がある場合は、コメントで質問するか、 smartcom @ itinvest.ruに手紙を書いてください 。さらに、SmartCOM APIに関連する関心のあるトピックはすべてBrainstorgeのシステム開発者と話し合うことができます。