QuantX

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

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

 前回まででQuantXのシグナル生成関数の作成で必要な構造とその引数の内容を確認しました。今回はその引数を加工して売買シグナルを作成するために必要なデータの一次加工について理解します。ここを理解しておくと、その後のアルゴリズム開発でよくわからないけどなんとなく動いているということがなくなります。

(2)利用データの整形

 前回、シグナル生成関数の引数となるdatas から、daily = datas[“jp.stock.daily”] としてシグナル生成の基礎情報を取得しました。このdaily はDataframe(index=date,symbol ,columns = 各種項目)(※現状、各種項目には指定した設定データ以外も含まれている点は前回の説明の通りです)

DataFrame(index=date, columns=symbol)の形式に変形する

 最終的なシグナルの返値の形式は、DataFrame(index=date, columns=symbol)のためこの形式のDataFrameを作っておくと都合が良いです(他の言語を使っていて、DataFrameがよくわからない人がいるかもしれません。Excelなどの表を思い浮かべて頂いて左に縦方向に並ぶ表題がindex、上部に右方向に並ぶ表題がcolumnsと考えてください。DataFrameの実データはそのinxdexとcolumnsで指定される各データであり、indexとcolumnsそのものはデータの枠(DataFrame)にすぎません)

 さて前置きが長くなりましたが、dailyのDataFrameの構造から、returnで返すDataFrameの構造をつくるにはその構造の一部を抜粋して変形すれば良いことがわかります。そのために便利な命令が用意されています。その命令がunstack という行列を入れ替える命令です。以下では、columnnsから特定のデータ(ここでは”close_price_adj”)を取り出したうえで、index のsymbol部分について行と列をいれ変える(すなわちsymbolをindex(行)の項目からcolumns(列)の項目にする)ことで、DataFrame(index=date, columns=symbol)の構成の close_price_adj(分割考慮済みの終値)データを作成しています。

   #終値データをindex=date、columns = symbol の形式のDataFrameデータにする。
   cp = daily["close_price_adj"].unstack(level="symbol") 

欠損値を補完修正する

 先ほど整形したデータは終値ですがデータとして欠損(NaN値)している場合があります。例えばストップ高で売買が成立しなかった場合などが考えられます。このまま処理を進めてしまうと、例えば移動平均線を計算しようとしてもNaN値が含まれていると移動平均の計算値もNaNとなってしまい非常に都合が悪いです。そのため、この欠損値を何らかの数値で埋めて計算できるようにする必要があります。

 サンプルプログラムでは基本的に、以下のように欠損値を補間修正していますが、その説明(どういった補間なのかの説明がありません。

  cp = cp.fillna(method='ffill')

 DataFrameに対するfillnaという命令はNAの値を何らかの方法で埋めるという指示になりますが、その方法をmethodという引数で指定しています。この’ffill’ というのは、前の値と同じもので埋めるという意味です。各columns(symbol=各銘柄)のデータは日付順に並んでいるのでデータが欠損していたら前日のデータと同じ値で埋めるということになります。ちなみに、ffill = Forword Fill (前方の値で埋める) という意味です。同様にbfill = Backword Fill(後方の値で埋める)というものもありますが、システムが稼働した後、後方の値が発生するまで欠損することになると色々不都合なのであまり使うことはないでしょう。

 他にも値を指定して穴埋めなどすることもできるので cp.mean() (平均値)や、cp.median() (中央値)などを記載することができますがデータ全体の平均値や中央値となってしまうので現実的ではありません。もちろん一つ一つデータを確認した上で、適切と思われる値で直接補間することも可能ですが、実際の所は、ffillで計算してしまっているのがほとんどだと思います。

まとめ

・シグナル生成関数の引数を加工して最終的な返値と同じ構成のDataFrameをつくっておく
・取得したデータは欠損していることがあるので後の計算のために欠損値を補間しておく

-QuantX

執筆者:


comment

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

関連記事

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

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

QuantXの売買ハンドリング

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

QuantXの基本構造

QuantXはシステムトレード用開発環境としてユーザー数を拡大しています。今日は、開発の最も基礎となる基本構造について記載します。 前提 ・エンジンは maron-0.1.0 を利用・何らかのプログラ …

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

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

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

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

PAGE TOP