QuantX

QuantXの基本構造

投稿日:2021-03-29 更新日:

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

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

QuantXの初期化関数(1)初期設定部分

 QuantXの初期化関数ではまず使用するデータを定義(設定)する必要があります。QuantX以外の環境で自作する場合には、実際に設定したデータを読み込む処理をつくったり必要に応じて読み込みデータの加 …

QuantXの初期化関数(2-2)シグナル生成関数の引数の一次加工

 前回まででQuantXのシグナル生成関数の作成で必要な構造とその引数の内容を確認しました。今回はその引数を加工して売買シグナルを作成するために必要なデータの一次加工について理解します。ここを理解して …

QuantXの初期化関数(4)シグナル判定関数の登録

 シグナル判定関数を作成したらその関数を日々のデータに対して適用するように呼び出す必要があります。QuantXでは、その呼び出しは大元の処理で行われるため、初期化関数内で単にシグナル判定関数をシステム …

QuantXの売買ハンドリング

 QuantXで初期化関数を準備できたらあとは実際に売買の管理をする関数(日ごとの処理をする関数)を準備すれば基本システムは完成します。基本構造で示したように売買ハンドリングは予め決められた関数(de …

QuantXの初期化関数(3)シグナル生成

 シグナル生成関数内で、引数から加工用のデータを取得したらあとはそのデータをもとに売買シグナルを生成するだけです。前回、引数datasを加工して cp という変数に FrameData(index=d …

PAGE TOP