LoginSignup
4
5

More than 5 years have passed since last update.

QuantXを初めてみて(目標、開発環境構築などなど)

Last updated at Posted at 2018-12-26

自己紹介

この度Smart Tradeでインターンすることになったゴンです。

ゴンについて、知りたい方はこちら。

https://www.investor-gon.com/


QuantXとは

ではさっそく紹介します。

6a0609f4e61da3ad1bc22740df897832.png

株式会社Smart Tradeのサービスである、

QuantX Factoryは、自動売買アルゴリズムの開発、実行、販売ができるクラウドサービス(開発者向け)
QuantX は、膨大な株銘柄の中で、「値上がり・値下がりする銘柄」を予測するアルゴリズムを購入・利用できるサービスです。(一般向け)



会社紹介はこちら。


まず登録しよう!!

https://factory.quantx.io/



サンプルコードはこんな感じ



ちょーざっくり説明すると

1:株価を読み込んで(銘柄選び)
2:戦略書いて(売買サイン)
3:実行

だけだよ〜

パッと見、ちょー簡単やん笑




############################################################################
# Sample Algorithm

def initialize(ctx):
    # 設定
    ctx.logger.debug("initialize() called")
    ctx.configure(
      channels={          # 利用チャンネル
        "jp.stock": {
          "symbols": [
            "jp.stock.1305",
            "jp.stock.9984",
            "jp.stock.9983",
            "jp.stock.7201",
            "jp.stock.9201",
            "jp.stock.9202",
            "jp.stock.7203"
          ],
          "columns": [
            #"open_price_adj",    # 始値(株式分割調整後)
            #"high_price_adj",    # 高値(株式分割調整後)
            #"low_price_adj",     # 安値(株式分割調整後)
            #"volume_adj",         # 出来高
            #"txn_volume",         # 売買代金
            "close_price",        # 終値
            "close_price_adj",    # 終値(株式分割調整後) 
          ]
        }
      }
    )

    def _my_signal(data):
        return {
        }

    # シグナル登録
    ctx.regist_signal("my_signal", _my_signal)

def handle_signals(ctx, date, current):
    '''
    current: pd.DataFrame
    '''

    done_syms = set([])
    for (sym,val) in ctx.portfolio.positions.items():
        returns = val["returns"]
        if returns < -0.03:
          sec = ctx.getSecurity(sym)
          #sec.order(-val["amount"], comment="損切り(%f)" % returns)
          done_syms.add(sym)
        elif returns > 0.05:
          sec = ctx.getSecurity(sym)
          #sec.order(-val["amount"], comment="利益確定売(%f)" % returns)
          done_syms.add(sym)


    #buy = current["buy:sig"].dropna()
    #for (sym,val) in buy.items():
    #    if sym in done_syms:
    #      continue
    #    
    #    sec = ctx.getSecurity(sym)
    #    #sec.order(sec.unit() * 1, comment="SIGNAL BUY")
    #    #ctx.logger.debug("BUY: %s,  %f" % (sec.code(), val))
    #    pass

    #sell = current["sell:sig"].dropna()
    #for (sym,val) in sell.items():
    #    if sym in done_syms:
    #      continue
    #
    #    sec = ctx.getSecurity(sym)
    #    #sec.order(sec.unit() * -1, comment="SIGNAL SELL")
    #    #ctx.logger.debug("SELL: %s,  %f" % (sec.code(), val))
    #    pass

バックテスト

バックテストとは、
システムトレード(売買ルール)の有効性を検証する際に、過去のデータを用いて、一定期間にどの程度のパフォーマンスが得られたかをシミュレーションすることです。



こんな感じに表示されるよ〜

スクリーンショット 2018-12-26 21.50.03.png

アルファ値は、アルゴリズムの収益率から市場全体の動き(ベンチマーク)に連動したリターンを差し引いたもので、本数値が高いほど、ベンチマークの収益率を上回り、それだけリターンが高いことを意味します。


ベータ値とは、アルゴリズムの収益が証券市場全体の動きに対してどの程度敏感に反応して変動するかを示す数値です。この数値が高いほど、証券市場全体の動きに連動した変動幅(増減幅)が大きいことを意味します。



ドローダウンとは、一時的に最大資産から落ち込んだ場合の下落率を表します。 簡単に言うと、口座に入っている資産からどれぐらいの損失が出たか、ということです。

これからの目標


  • 移動平均線での売買
  • MACDを用いた売買
  • RSIを用いた売買
  • 一目均衡表を用いた売買
  • ボリンジャーバンドを用いた売買



これらのシグナルを1つだけ使って株式投資アルゴリズム開発していきまーす。
それぞれが開発できればそれを組み合わせて使えば、すごそうじゃねって感じで作っていきます。



たった5個だけど組み合わせはなんと

5c1 (5) + 5c2 (10) +5c3 (10)+ 5c4 (5) + 5c5 (1)

= 21

これでたんまり儲けられそうですね。笑


今回はこの辺で。
次回からはアルゴリズム記事の作成していきまーす。

4
5
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
5