##ご挨拶
こんにちは。Smart Tradeでインターンするリィァンです。
今回はETFブルベア両対応、日経指数が上がっても下がっても儲けられるアルゴリズムを作っていきたいと思います。
##設定
まず、いくつかの売買条件を定義します。
#####売買シグナル発動条件:
- 日経225を基準として、SMAとRSI両方の条件に達したら買い売りシグナルを出す。
- SMA:上昇/下降トレンドを見つかる
- 買いシグナル:5日移動平均<25日移動平均<75日移動平均(株安)
- 売りシグナル:5日移動平均>25日移動平均>75日移動平均(株高)
- RSI:トレンドが不安定なもみ合い期に相場の強弱を判断する。
- 買いシグナル:rsi < 30 (売られすぎ)
- 売りシグナル:rsi > 70 (買われすぎ)
bullbear.py
# 5日と25日移動平均線
m5 = df.rolling(window=5, center=False).mean()
m25 = df.rolling(window=25, center=False).mean()
m75 = df.rolling(window=75, center=False).mean()
# 移動平均線の位置
up = (m5>=m25) & (m25>=m75)
down = (m5<=m25) & (m25<=m75)
## RSI
df_rsi = df.apply(lambda s: ta.RSI(s.values.astype(np.double), timeperiod=5),axis=0)
# 売買シグナル
buy_sig = down & (df_rsi < 30)
sell_sig = up & (df_rsi > 70)
#####損切/利益確定売り:
損切り/利益確定売りは設定していない。
#####注文方法:
- Sec.order(unit*10) で指定した株を10株買う。
- 日経225の買いシグナルが出ったら、ブル株を買い、ベア株を売る。(逆も同様)
- ブルの買いシグナルが出始まると、ベアの株を手仕舞い。(逆も同様)
bullbear.py
bear = ctx.getSecurity("jp.stock.1357")
bull = ctx.getSecurity("jp.stock.1570")
# 買いシグナル
df_buy = current["buy:sig"][0]
if df_buy:
bull.order(bull.unit() * 10, comment="BULL BUY")
bear.order_target_percent( 0, comment="BEAR SELL")
# 売りシグナル
df_sell = current["sell:sig"][0]
if df_sell:
bear.order(bull.unit() * 10, comment="BEAR BUY")
bull.order_target_percent(0, comment="BULL SELL")
##結果
Liveに設定して、ギリギリ販売審査標準に達したようです。
##反省
#####1. 注文単位(初期資金量対応)
order関数は指定した株の数量に従って買い注文を出しますので、初期資金量が変わっても同じ数量の株しか買えません。そうすると、初期資金量のの変更に対応できない。
なので、今度はポートフォリオに参考したorder.target_percent関数を使った方がいいと考えます。
#####2. シグナル回数の向上
今のシグナル回数は年31回で、審査標準の最低限30回とほとんど差がなかったです。
次回シグナル回数を向上するため、損切り、移動平均条件、シグナル基準(ブルベアを含む)などを仕掛けようと思っています。