QuantX maron0.0.5 に移行する

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

https://blog.quantx.io/2019/06/10/maron-0-0-5_%CE%B2/

#新エンジンの導入方法
アルゴリズム一覧から
新規プロジェクト作成を選択

<img width="717" alt="スクリーンショット 2019-06-11 13.49.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318447/e83ebd8f-2cba-d66d-0063-85eb5aaf84b2.png">

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

アルゴリズムを開くと

```python

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



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

###大きくあげると3つ

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

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


# 注文のタイミング

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

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

##やり方
handleシグナルで指定する`order_type`を

```python
order(amount, comment, order_type = maron.OrderType.MARKET_OPEN, comment = "SINGLEBUY")
```
と書きます。

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

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

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


##約定のタイミング

###始値注文
<img width="791" alt="スクリーンショット 2019-06-11 13.57.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318447/78850d9e-8b75-d1b8-8bd7-e1639062c4c7.png">
<img width="804" alt="スクリーンショット 2019-06-11 13.57.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318447/3ae08014-ab8c-3998-028f-d6536b02ec20.png">

###終値注文
<img width="787" alt="スクリーンショット 2019-06-11 13.58.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318447/6a4c6863-cda2-01c1-edcf-5bb47a358194.png">
<img width="813" alt="スクリーンショット 2019-06-11 13.58.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318447/4f57eb26-9640-1bc5-045b-e272df32c43e.png">
実際に約定価格が違うのが確認できると思います。

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

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

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

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

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

```python
    # 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に変換していきます

```python

    # 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版の場合

```python
      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の値をそのまま渡せるようになっているので

```python
       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時〜
場所：神田　千代田共同ビル４階　SmartTrade社オフィス
内容：初心者(プログラミングってものを知らなくてもOK)向けに初心者(私とか)がこんな内容をハンズオン(一緒にやる事)で解説しています
備考：猛者の方も是非御鞭撻にいらして下さい、そして開発・伝導者になりましょう！

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

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

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


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