Stochastic OscillatorにNoise除去の目的でDecomposeすることにより、より長周期での変動から買目を読むことを試みる。
バックテストをするまでもなく、このアップダウンの株価は買目、売目は明らかだ。
【参考】
①【システムトレード入門】pythonでstcを描いて遊んでみた♬
②【要素分解入門】時系列解析の手法をRとpythonで並べてみる♬
###やったこと
・Decomposeを組み込む
・結果はどうなのよ
###・Decomposeを組み込む
組み込みは以下のとおり
利用するLibは参考②のとおり、なお、参考①の重複コードは省略します。
...
import matplotlib.pyplot as plt
...
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL
def...
データ取得は以下のとおりですが、series = ...を定義してDecomposeの準備をします。
stock = '6758.JP' #sony6758 Jal 9201 三井住友フィナンシャル 8316 docomo9437
start = dt.date(2020,1,1)
end = dt.date(2020,6,5)
df = pd.DataFrame(get_stock(stock, start, end))
series = df['Close']
print(series)
そしていよいよDecomposeします。
様子をグラフにプロットします。
cycle, trend = sm.tsa.filters.hpfilter(series, 144)
fig, ax = plt.subplots(3,1)
ax[0].plot(series)
ax[0].set_title('close')
ax[1].plot(trend)
ax[1].set_title('Trend')
ax[2].plot(cycle)
ax[2].set_title('Cycle')
plt.savefig("./stock/close_%K%D_{}_now.png".format(stock))
plt.pause(1)
plt.close()
結果は以下のとおり、見事にTrendデータがノイズ除去されて描かれました。特徴として、やはりObservedのTrendからの乖離Deviationは株価が激減したときに大きくなっています。ボラが大きいと言えます。
※元記事からCycleと名乗っていましたが乖離(Deviation)に変更しました
そして、Noise除去されたTrendをdf['Close']に戻してやります。
df['Close']=trend
これをHighとLowについても実施してやると以下のようなグラフが得られます。High,Low,Closeがちゃんと分離して見えます。
そして前回と同じコードで、こうして得られたデータで%K,%Dを計算し、描画します。
df['%K'] = STOK(df['Close'], df['Low'], df['High'], 14)
df['%D'] = STOD(df['Close'], df['Low'], df['High'], 14)
グラフは以下のように凄くシンプルなのが得られました。
これだと、流石に買い間違い、売り間違いはなさそうです。
6758Sony;買い過ぎリスク領域、リスク領域なので購入を控える
###・結果はどうなのよ
どれもシンプルになりました!
当たり前ですが、これだと間違えずに売買出来そうです。
8316三井住友フィナンシャル;上げ過ぎ領域、あと少しで売場面?
9201日本航空;上げ過ぎリスク領域、あと少しで売場面?
9437NTTドコモ;下げ過ぎリスク領域、そろそろ買場面?
###まとめ
・decompose関数でStochastic OscillatorのNoise除去を実施してみた
・グラフは単調な変化になり、売買が簡単になった
・実際、適用してみよう
・分足など短期売買に適用してみよう
・全銘柄に自動適用して買時、売時指数を指標化してみよう
###おまけ
####・短期売買
逆に日々のアップダウンを利用した短期売買はDeviationを利用すればできそうなのでやってみた。
やってみると以下のとおりになりました。
こちらは細かいのと、High、Low,Closeの値が本当にその上下関係になっているか(%K,%Dが0-100の範囲を上下に超えているので保証されていないようです)怪しく、それでもやってみる価値はありますが、得られたチャートから取引やってどうなのっていうのは、保証の限りではありません。
6758の結果
9437の結果