LoginSignup
4
1

More than 3 years have passed since last update.

QuantX maron0.0.5 に移行する

Last updated at Posted at 2019-06-20

はじめに

β版ですがQuantXの新エンジンがリリースされました!
簡単に変更点や躓きそうなところをあげていきます!

新エンジンの導入方法

アルゴリズム一覧から
新規プロジェクト作成を選択

スクリーンショット 2019-06-11 13.49.16.png

標準テンプレート(0.0.5)にチェックマークをつけ、アルゴリズム名をつけて導入可能です!

アルゴリズムを開くと


import maron

とありますが、これは注文のタイミングを変えるためのメソッドや新たなエラー検知のために必要なのでいれておいてください!

旧バージョンからの変更点

大きくあげると3つ

  • 注文のタイミングの指定可能、指値注文が可能に
  • 市況シグナルの導入
  • ライブラリーのバージョンアップ、および追加(kerasなど)

一つずつ見ていきましょう
サンプルコード
https://factory.quantx.io/developer/6549f66f33134fdcbabc4290f1bc92d3

注文のタイミング

旧エンジン(maron0.0.1)では売買シグナルが出てから、その翌日の終値のタイミングで注文が出ていました。
翌日、株価が暴落したり、急騰した場合、遅れを取ってしまう可能性もあります。

しかし、新エンジンでは終値で出た、シグナルを翌日の始値のタイミング、終値のタイミングもしくは指値のタイミングで注文することが可能になりました。(デフォルトは始値注文)

やり方

handleシグナルで指定するorder_type

order(amount, comment, order_type = maron.OrderType.MARKET_OPEN, comment = "SINGLEBUY")

と書きます。

サンプルコードでは、otという変数をおいています。

ot = maron.OrderType.MARKET_OPEN  # シグナルがでた翌日の始値のタイミングでオーダー
ot = maron.OrderType.MARKET_CLOSE # シグナルがでた翌日の終値のタイミングでオーダー

どの注文方法を使っているかはバックテストの時見ることもできます。
始値の時は前場寄成、終値の時は後場寄成と方法のところで書かれます。

約定のタイミング

始値注文

スクリーンショット 2019-06-11 13.57.51.png
スクリーンショット 2019-06-11 13.57.40.png

終値注文

スクリーンショット 2019-06-11 13.58.29.png
スクリーンショット 2019-06-11 13.58.21.png
実際に約定価格が違うのが確認できると思います。

始値に関しては指定しなくてもデフォルトででるようになっています。
指値注文もできますが、奥深いので別記事にまとめようと思います(今回は省略)

市況シグナルの導入

なぜ行うのか

以前は買いシグナルと売りシグナルの二つに分けてシグナルを出していました。
しかし、この場合買いシグナルと売りシグナルが同時に出る可能性があります。

これを防ぐために市況シグナル(market_sig)のデータフレームを用意し、買いを1.0 売りを-1.0 ニュートラル(何も取引しない状態)を0.0とするデータフレームを作っていきます。

以前のようにBool値で売買シグナルを出します

全てデータが0.0のデータフレームを用意

    # market_sigという全て0が格納されているデータフレームを作成
    market_sig = pd.DataFrame(data=0.0, columns=cp.columns, index=cp.index)

buy_sigがTrueの時に0.0を1.0に変換
sell_sigがrueの時に0.0を-1.0に変換
両方Trueの時は0.0に変換していきます


    # buy_sigがTrueのとき1.0、sell_sigがTrueのとき-1.0とおく
    market_sig[buy_sig == True] = 1.0
    market_sig[sell_sig == True] = -1.0
    market_sig[(buy_sig == True) & (sell_sig == True)] = 0.0

あとはmarket_sigに合わせてhandle_signal関数部分で注文を出してください。

ライブラリーのバージョンアップ

新エンジンでは以下のライブラリーが使えるとのことです。
機械学習系のライブラリーが増えてますね!

詳しくはコチラ
https://factory.quantx.io/handbook/ja/libs.html

packages version
Python 3.6.7
numpy 1.16.3
pandas 0.23.4
statsmodels 0.9.0
scikit-learn 0.21.1
scipy 1.3.0
TA-lib 0.4.17
cvxopt 1.2.3
xgboost 0.90
Keras 2.2.4
chainer 6.0.0
tensorflow 1.13.1

またQuantX Factoryユーザー必須のTA-Libのライブラリーもバージョンアップしてます!!
それによってコードの記述も楽になりました!

RSIの計算の時の記述を例に比較して見ましょう!

maron0.0.1版の場合

      for (sym,val) in cp.items():
        rsi[sym] = ta.RSI(cp[sym].values.astype(np.double), timeperiod=5)

のようにcpというDateSeriesのデータをndarrayの型に変換してDataFrameにいれていました。

しかし、TA-libのversion-0.4.17ではDateSeriesの値をそのまま渡せるようになっているので

       for (sym,val) in cp.items():
        rsi[sym] = ta.RSI(cp[sym], timeperiod=5)

と直感的に書くことができるようになりました!

その他

maronライブラリーを読み込むと新たなエラーを吐いてくれるようになりました。
これでdebugが捗りますね!

新たなエラーコード

エラーコード 説明
40000 Emitterの戻り値ではdict型を返す必要があります
40001 Emitterは、DataFrameのdictを返す必要があります
40002 Emitterの戻り値の型が違います。
40003 signal not found in dataframe: ["buy:sig", "sell:sig", "market:sig"]
40004 import error(name + " is not supported.")
40005 You have to call ctx.configure() in intialize(ctx) for initialize maron."
40006 You have to pass channel settings via GUI or passing it to initialize() as parameter.
40007 銘柄が見つかりません(%s)
40008 不正なシグナル値です(%s)
40009 キー名として%sを使うことはできません
40010 localStorageには、JSON Serialize可能なオブジェクトを指定する必要があります
40011 localStorageに格納するデータは、65535Byte以下である必要があります

宣伝

勉強会やってます!

日時:毎週金曜日19時〜
場所:神田 千代田共同ビル4階 SmartTrade社オフィス
内容:初心者(プログラミングってものを知らなくてもOK)向けに初心者(私とか)がこんな内容をハンズオン(一緒にやる事)で解説しています
備考:猛者の方も是非御鞭撻にいらして下さい、そして開発・伝導者になりましょう!

もくもく会もやってます!

日時:毎週水曜日18時〜
場所:神田 千代田共同ビル4階 SmartTrade社オフィス
内容:基本黙々と自習しながら猛者の方に質問して強くなっていく会
備考:お菓子と終わりにお酒を飲みながら参加者と歓談できます!

詳細はこちらです

週によっては開催されない週もあります。
また勉強会参加、もくもく会参加には基本的に事前に参加登録をしてください!
Pythonアルゴリズム勉強会HP:https://python-algo.connpass.com/
(connpassって言うイベントサイトに飛びます)

ストアもあります

システムトレードの開発者が作ったアルゴリズムがQuantX Storeで販売されています!
詳細は以下のリンクから
https://quantx.io/

免責注意事項

このコードや購入したアルゴリズム及び知識を使った実際の取引で生じた損益に関しては一切の責任を負いかねますので御了承下さい

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1