QuantX

QuantXの初期化関数(2-1)シグナル生成関数の構造と引数

投稿日:2021-04-01 更新日:

 QuantXの初期化関数では使用データを定義(設定)するだけでなく、使用データで売買シグナルを生成する関数(以下シグナル生成関数と呼称)を登録する必要があります。シグナル生成関数についてもルールや基礎的な考え方がありますが、サンプルプログラムとその解説はあっても構造的な部分について詳しい記載がありません。ここは応用が利くように理解しておくことが必要です。

 なお、シグナル生成関数については公式ドキュメントの初期化の部分に記載されていますが、全体像と言うよりはサンプル細部の説明となっているので、構造の概要を把握できている人はそちらを参照してください。なお、シグナル生成関数の定義はサンプル同様に初期化関数 def initialize(ctx): 内で行う形とします。

シグナル生成関数の構造と引数

 まずシグナル生成関数の名称については任意に決めることができます。サンプルではどのようなシグナルかわかるような名称にしていますが、試行錯誤する開発の勉強中などは特にこだわる必要はないでしょう。以下では、_trade_signal という関数名にしておきます。シグナル生成関数の大まかな構造の代表例は下記のようになります。pythonはインデント位置で構造を示すので(他の言語のように { } でなどで示さない)、def initialize(ctx): の内部で定義するシグナル生成関数は、def initialize(ctx):よりもインデントを下げて定義してください。コメントに記載の内容についてはプログラムの後に掘り下げて記載します。

   # シグナル生成関数の定義 
   def _trade_signal(datas):
     ### 引数 datasを各種加工して売買シグナルを作成する関数を作成する
     ### 関数の返値は、dict型(いわゆる辞書型で key:Value 構造)
     ###   dict の Value は DataFrame(index=date, columns=symbol)の形なので
     ###   datasで受け取った構造を加工利用するのが定石
     ### 以下でpdは、import pandas as pd で読み込み済み前提のライブラリ
    
     # (1)株価データ部分を取得
     daily = datas["jp.stock.daily"]  
     # (2)利用データ(以下では終値)を DataFrame(index=date, columns=symbol) の形式に整形
     cp = daily["close_price_adj"].unstack(level="symbol") 
     # (3)シグナル作成の基礎データにするためにNA(欠損データ)を埋める
     cp = cp.fillna(method='ffill')

     # (4)各種処理(省略)でシグナル判定のための計算を行う
     #      DataFrame(index=date, columns=symbol)構造のTrue or False を作成
     buy_sig = xxx # 買シグナル
    sell_sig = xxx # 売シグナル
 
     # (5)返値を作成して返す
     #    (必須)market:sig  = -1.0〜1.0 (負は売り、正は買いで大きさは確信度)
     market_sig = pd.DataFrame(data=0.0, columns=cp.columns, index=cp.index)
     market_sig[buy_sig] += 1.0
     market_sig[sell_sig] += -1.0
     return {
       "market:sig" : market_sig
     } 

(1)株価データ部分を取得(引数の理解)

 株価データを取得する部分ですが、これらは引数 datas に入っています。datasについて詳しい説明がマニュアルにはありませんが、初期化関数で設定した “jp.stock.daily” と ‘benchmark’ をkeyとする dict で構成されています。

key ”jp.stock.daily” に対応するValueの Dataframe

 Dataframeの ”index”はdate(年月日)、symbol(銘柄コード)の2つ。Dataframeの “columns” については初期化関数で設定したデータのみが含まれる(はず)と考えていましたが、実際に見てみると以下のように利用可能とされるすべてのデータ+α が含まれていました(今後変更される可能性がありますので設定したデータのみが含まれると考えておいた方が良いと思います。)。

データ名内容備考
code銘柄コードindexのsymbolと重複(同じもの)
open_price始値分割非考慮
high_price高値分割非考慮
low_price安値分割非考慮
close_price終値分割非考慮
volume取引高分割非考慮
txn_volume売買代金
split_ratio分割比率推定
ex_dividend配当権利落推定
unit単元数推定
delisted上場廃止推定
close_price_adj終値分割考慮
high_price_adj高値分割考慮
low_price_adj安値分割考慮
open_price_adj始値分割考慮
volume_adj取引高分割考慮

key ”benchmark“ に対応するValueの Dataframe

 これはベンチマーク用にデフォルトで組み込まれるデータの用です。構成としてDataframe の “index”はdate(年月日) のみで、Dataframe の “colmuns” は、symbol(銘柄コード)とclose_price(終値) です。ここでdateは、”jp.stock.daily”同様にバックテストや実際の判定日付、symbolは ”jp.stock.index.n225” 固定、close_piceは当然ながら日経225の対応日の終値となっています。

シグナル生成の為の基礎情報の取得

 通常は、自分で設定したデータをベースに売買シグナルを生成するため、以下のように key の ”jp.stock.daily”に対応するValueである Dataframeを一旦キャッシュするのが基本となります。

     daily = datas["jp.stock.daily"] 

まとめ

・シグナル生成関数は決まった構造をもっているのでまず全体の骨組みを理解する
・シグナル生成関数の引数はベンチマークとなるデータと生成の為の基礎データが含まれている(この内容と構造を理解しておくことが大事)

-QuantX

執筆者:


comment

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

関連記事

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

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

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

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

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

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

QuantXで使えるライブラリ(パッケージ)

 前回、QuantXの基本構成を記載しました。今回から各ブロックごとに記載方法・内容などの注意点を記載していきます。今回は一番初めに記載するライブラリについて記載したいと思います。今回の内容は非常に簡 …

QuantXの売買ハンドリング

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

PAGE TOP