QuantXはシステムトレード用開発環境としてユーザー数を拡大しています。今日は、開発の最も基礎となる基本構造について記載します。
前提
・エンジンは maron-0.1.0 を利用
・何らかのプログラムを作成したことがありライブラリや命令の基本構造や用語(条件分岐、ループ、関数、引数)について最低限知っていること(pythonの知識はなくても良い)
・株式に関する基本的知識(始値・終値・分割調整など)がある
・システムトレードとは何か理解している
全体構造
QuantXでのシステム開発は、システムトレードのコアとなる部分(初期設定、売買判定とその実行)だけを開発すればよくユーザーインターフェースや判定処理の呼び出しを行う必要はありません。サンプルプログラムが公開されていますが、その基本的な構成について記載します。
全体としては、以下の構成となっています。
(1)使用するライブラリの宣言
(2)独自の汎用関数(必要に応じて作成。なくても良いし複数作成しても良い)
(3)初期化関数 def initialize(ctx):
A 初期設定(組入銘柄や使用するデータ)
B 売買シグナル判定関数の定義
C 売買シグナル判定関数の登録
(4)売買シグナルのハンドリング(実行)関数 def handle_signals(ctx, date, current):
以下では、上記のプログラム部分を省略して骨格だけ抜粋して記載しました。
# は python のコメント文です。プログラム中で使用できるデータや記載方法の詳細はまた別の機会に記載しますので、ここではどのような構造にすればよいかだけ理解すれば十分です。実際のプログラムはこれに肉付けを行うことで実行できます。
############################################################################
# (1)使用するライブラリの宣言
import maron #バックテストエンジン(必須)
import pandas as pd #データ解析ライブラリ(必須)
import talib as ta #金融系ライブラリ
import numpy as np #数値計算ライブラリ
# (2)独自の汎用関数
def get(df, name):
return df[name].unstack(level="symbol")
# (3)初期化関数
def initialize(ctx):
# A 初期設定
ctx.configure(
target="jp.stock.daily",
channels={
#日本株を対象に指定
"jp.stock": {
#組入銘柄
"symbols": [
"jp.stock.2502", #銘柄コード
"jp.stock.3402", #銘柄コード
],
#利用データ
"columns": [
"close_price_adj", # 終値(株式分割調整後)
"volume_adj", # 出来高
]
}
}
)
# B 売買シグナル判定関数の定義
def _trade_signal(datas):
daily = datas["jp.stock.daily"]
# シグナル関数の内容は省略
# datas に入っている日々のデータをもとに売りシグナルや買いシグナルを作成する
# 以下では、market_sig に売買シグナルを格納したものを"market:sig"というキーで出力
# その他の情報を出力することもできる(出力した情報は表示可能)
return {
"market:sig": market_sig
}
# C 売買シグナル判定関数の登録
ctx.regist_signal("trade_signal", _trade_signal)
# (4)売買シグナルのハンドリング(実行)関数
def handle_signals(ctx, date, current):
# 保有ポジションに対する処理
hold_positions = ctx.portfolio.positions
for sym, v in hold_positions.items():
#必要に応じた決済処理
#売買シグナルに対する処理
for sym, market_sig in current["market:sig"].iteritems():
#必要に応じた売買処理
まとめ
システムトレードのプログラムのハードルを下げるQuantXでは、プログラムの基本構造はほぼ同じでわかりやすいものとなっています。そのため、それぞれの項目の作り方や記載の仕方を理解していけば誰でもシステムトレードの仕組みを作ることができます。
[…] QuantXの基本構造 […]