メインコンテンツまでスキップ

回測システム

元富証券の回測システム Python API を分析した後、私たちは自分のニーズに基づいて回測システムを開発することができます。

アカウントへのログイン

アカウントのユーザー名とパスワードをクラスの入力に直接記述することもできますが、私たちの方法を参考にして、アカウント情報を保存するために yaml ファイルを使用することもできます。

パラメータファイルには、アカウントのユーザー名、パスワード、アカウント番号が必要です。この情報で元富証券のアカウントにログインできます。

次に、autotraderx から BackTesting クラスをインポートします:

from autotraderx import load_yaml
from autotraderx.masterlink import BackTesting

# アカウント情報の読み込み
cfg = load_yaml(DIR / "account.yaml")

# アカウントにログイン
handler = BackTesting(
user=cfg["user"],
password=cfg["password"],
)

指標の購読

公式のサンプルコードをテストした際、指標を購読する際に「非常に長い」反応なしの期間が発生することに気付きました。

以下は公式提供のサンプルコードです:

ta = TechAnalysis(...)

opt = input("1: 指標\n2: 歴史的取引\n> ")
if opt == "1":
k_config = option()
ta.SubTA(k_config)
input("running...\n")
ta.UnSubTA(k_config)

実行後、running... の画面で約 5 分間固まり、最終的に忍耐を失って強制終了しました。

また、テクニカル指標の多くは価格と取引量の情報を元に計算されるため、私たち自身で価格と取引量のデータを取得して指標を計算する方が速いと考えています。

したがって、この部分の機能は実装しません。

歴史的取引

アカウントにログイン後、私たちがラップした get_data 関数を使用してデータを取得できます。

data = handler.get_data(
prod_id="2330",
date="20240102",
)

ここで、prod_id は株式コード、date は日付で、フォーマットは YYYYMMDD です。

上記のプログラムを実行すると、以下のような List[Dict] 構造のデータが返されます:

[
...(省略)...
{
"成交價格": 590.0,
"成交時間": 132459.132661,
"成交量": 1,
"股票代號": "2330",
"試搓": false,
"買賣": 2
},
{
"成交價格": 593.0,
"成交時間": 133000.0,
"成交量": 3704,
"股票代號": "2330",
"試搓": false,
"買賣": 2
}
]

元富証券の API にはいくつかの特徴があります:

  1. 試搓:このフィールドは、取引が試し取引かどうかを示します。
  2. 買賣:このフィールドは、取引が内盤か外盤で行われたかを示し、0 は平盤、1 は内盤、2 は外盤です。
  3. 成交時間:このフィールドは、HHMMSS.ffffff 形式で、HH は時間、MM は分、SS は秒、ffffff はマイクロ秒です。
  4. 過去のデータを確認したところ、2022 年 4 月中旬以降にデータが利用可能であることがわかりました。

ただし、2 年以上のデータは私たちのような小規模なユーザーには十分であると思います。

今後の作業

私たちは、まず取得できる株式取引データを取り出し、自分たちのデータベースシステムを構築する予定です。

その後、テクニカル指標の計算や取引戦略の回測を行う際に、データベースから直接データを取得できるようにし、迅速かつ効率的に作業を進められるようにします。

それ以外のデータについては、今後のニーズに応じて対応する予定です。