2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QuantXのアルゴリズム審査、落ちた件について

Last updated at Posted at 2019-02-22

#自己紹介
この度Smart Tradeでインターンすることになったゴンです。

ゴンについて、知りたい方はこちら。
ブログ読んでねー

ツイッターはこちら
https://twitter.com/gon_gon_tarou

初めての記事はこちら(QuantXを初めてみて)
https://qiita.com/investor-gon/items/2b1952ae5c2c88334c74

#初めてインターン生で申請し、初めて審査落ちしました。

結論からいうと、

「センチメントデータなんてねーよ。帰れクソザコ。」

って感じでひと蹴りされました。



開発きっかけは、
センチメントデータとか珍しいし、そんなの個人投資家はわざわざみない。
(みてツイッターくらい)


だから、そのアルゴリズムの開発をすれば、いい感じのアルゴできんじゃねって考えからセンチメントデータをもとに取引するアルゴリズム、作ってみました!!

#ちなみに販売までの流れはこんな感じ
詳しくはこちら
https://factory.quantx.io/guide/c2c

###販売準備

  1. Liveに設定
    (●注意 動作確認のため10営業日、公開状態のまま待つと販売申請ができるようになります。)

  2. 販売者情報の登録

  3. 売上金受領の準備(Stripe Connect)
    ちょっとめんどかった。

###販売申請
大事なとこだけピックアップ。

●手数料は、販売額の30%
(つまり、販売価格の70%が販売者の売上となります)

●フォーワードテスト期間を含め最低1ヶ月程度を要します。

###販売開始

●購入希望者からの問い合わせ応答
●売上の支払い時期には、注意

#目標はこんな感じ


日経平均寄与率上位10位の銘柄(2018年12月25日)を用いて、センチメントデータを用いたアルゴリズムを作る!!!


移動平均線が上抜けしたら、買い、下抜けしたら売りというアルゴリズム作りました。

#まず完成コードはこちら(コピペ、どうぞ)

algorithm.py
# 日経225 センチメントデータ 

  #ライブラリーの設定
import pandas as pd
import talib as ta
import numpy as np

def initialize(ctx):
    # 設定
    ctx.logger.debug("initialize() called")
    ctx.configure(
      target="jp.stock.daily",
      channels={          # 利用チャンネル
        "jp.stock": {
          "symbols": [
            "jp.stock.9983", #ファーストリテイリング
            "jp.stock.9984", #ソフトバンク
            "jp.stock.6954", #ファナック
            "jp.stock.9433", #KDDI
            "jp.stock.8028", #ファミリーマート
            "jp.stock.8035", #東京エレクトロン
            "jp.stock.4543", #テルモ
            "jp.stock.6367", #ダイキン
            "jp.stock.6971", #京セラ
            "jp.stock.9735", #セコム
          ],
          "columns": [
            #"open_price_adj",    # 始値(株式分割調整後)
            #"high_price_adj",    # 高値(株式分割調整後)
            #"low_price_adj",     # 安値(株式分割調整後)
            "close_price",        # 終値
            "close_price_adj",    # 終値(株式分割調整後) 
            "volume_adj",         # 出来高
            "txn_volume",         # 売買代金
            "ns_sentiment",      # ニュースとSNSのネガポジデータだよ。
                                  # 1〜-1で1に近いほどポジティブな発言が多いよ。
          ]
        }
      }
    )

    def _my_Sentiment(data):
        ns_sentiment = data["ns_sentiment"].fillna(method="ffill")
        # ctx.logger.debug(ns_sentiment)

        ns_sentiment_m75 = ns_sentiment.rolling(window=75, center=False).mean()
        ns_sentiment_m25 = ns_sentiment.rolling(window=25, center=False).mean()
        #ネガポジの25日と5日移動平均出してるよ

        buy_sig = ns_sentiment_m25 > ns_sentiment_m75
        sell_sig = ns_sentiment_m25 < ns_sentiment_m75
       
        return {
            "buy:sig": buy_sig,
            "sell:sig": sell_sig,
            "ns_sentiment_m25": ns_sentiment_m25,
            "ns_sentiment_m75": ns_sentiment_m75
        }

    # シグナル登録
    ctx.regist_signal("my_Sentiment", _my_Sentiment)

def handle_signals(ctx, date, current):

 # 買いシグナル
    buy = current["buy:sig"].dropna()
    for (sym,val) in buy.items():
        sec = ctx.getSecurity(sym)
        sec.order_target_percent(0.2, comment="SIGNAL BUY")
        pass

 # 売りシグナル
    sell = current["sell:sig"].dropna()
    for (sym,val) in sell.items():
        sec = ctx.getSecurity(sym)
        sec.order_target_percent(0, comment="SIGNAL SELL")
        pass



#結果はこちら

スクリーンショット 2019-02-22 14.57.02.png

スクリーンショット 2019-02-22 15.06.25.png
スクリーンショット 2019-02-22 15.06.35.png

スクリーンショット 2019-02-22 16.04.50.png


ドローダウンめっちゃ低いし、いい感じじゃね。

リスク許容度が高い人には、うけそうなアルゴだし、とりあえず販売申請してみるか。

ぽっちとな、って感じで販売申請しました。

その結果







スクリーンショット 2019-02-22 14.56.36.png
(審査中になっている。おおお)



###〜審査落ち〜

残念な結果となりました。

以下はコメントです。

まず、 「ns_sentiment」 を使っていますが、 「maron-0.0.1b」 では使えないデータで、 「ns_sentiment」 の 「column」 はすべて 「NaN」 になります。で、いろいろMAとか計算しているんですが、最終的な判断部分で、 「dropna()」 してフィルタリングした結果を使っています。
「dropna()」 はNaNのデータを取り除くという意味ですが、元々のデータがboolean(True/False)なので、なにも取り除かれなくて、すべてのデータが利用されます。
つまり、常にシグナルが発生しているような挙動になっています。なので、おそらく開発者の意図通りには動いていない状態です。ということなので、審査落ちという結果ではあるんですが、インターンとして初めて販売申請あげてくれて感謝です!

つまり、「 センチメントデータなどないよ〜 」 でした。

そんなの知らないよ〜泣って感じです。

#反省点
反省点をあげるとこんな感じです。。

###pythonのコードの理解不足
dropの意味だとかちゃんと知っていれば、防げたかもしれないですね。

ただ、バックテストが動いてしまったので、ついちゃんと動いたのかと、安心してしまいました。

###ドキュメントの解読不足

これを読めばわかるのですが、実際めんどうですよね〜
まるっと、やってくれるプラットフォームをユーザーは期待しています。

###取引手法の出来に関して

今回手法についてのリターンなどには、言及はありませんでした。
めちゃドローダウンは低いので、そこそこ、だと思います。





それでは今回はこの辺で。

ちゃお〜

2
5
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?