ドンチャンブレイクアウトをオープニングレンジブレイクアウトに変えてバックテストしてみる。
この検証では(https://ryota-trade.com/?p=1942)さんの記事内のコードを勝手に使わせて頂こうと思います!(初心者の自分にはこちらのサイトは恩師のような存在です、また不都合があれば即座に消したいと思います。)
大まかな手法の説明については上記サイト内の「オープニングレンジ~」の所を見て下さい。
具体的なルール
① 直近の足の始値が過去N期間の平均値幅(高値-安値)のx%動いたらその方向にその足の終値で注文、決済
② 直近の足が①の条件を上にも下にも満たしてるとき、終値がある方向に注文
(※②は自分が勝手にやってるだけなのでしないほうが良いかもしれません)
条件
時間足 1、2時間
期間N 3、5
で固定して
変動率xを探ってみて、その結果どうなのかを見ていこうと思います。
# 平均ボラティリティを計算する関数
def calculate_volatility( last_data ):
high_sum = sum(i["high_price"] for i in last_data[-1 * volatility_term :])
low_sum = sum(i["low_price"] for i in last_data[-1 * volatility_term :])
volatility = round((high_sum - low_sum) / volatility_term)
return volatility これをコピー (他の記事から参照)
def donchian(data, last_data ):
これを
# レンジブレイクを判定する関数
def range_break( data,last_data ):
volatility = calculate_volatility(last_data)*R
if (data["high_price"]-data["open_price"]) > volatility and (data["open_price"]-data["low_price"]) > volatility :
if data["close_price"] > data["open_price"] :
return {"side": "BUY" ,"price":0}
else:
return {"side": "SELL" , "price":0}
if (data["high_price"]-data["open_price"]) > volatility :
return {"side":"BUY","price":0}
if (data["open_price"]-data["low_price"]) > volatility :
return {"side":"SELL","price":0}
return {"side" : None , "price":0}
あとはentry_signalとclose_position内のdonchianの部分も変えてあげて、
設定値の項目にvolatility_term = 3 #(5) , R = 好きな数値 (変動率)を追加
ピンと来る名前が思い浮かばなかったので適当にRにしました。
結果 (以下ある程度良かったもの いずれも1LOT固定)
(1時間足,期間3,R=2)
(2時間足,期間5,R=2)
ドンチャンと比べてみる
左:期間20のドンチャン1H 真ん中: 期間20のドンチャン2H 右:期間6のレンジブレイクアウト2H
以上です、ありがとうございました!
初心者ですのでもしかしたら根本から間違っている可能性があるため何かありましたら是非コメントで教えてください。