【システムトレード】pythonでStochastic Oscillatorをdecomposeして遊んでみた♬

Stochastic OscillatorにNoise除去の目的でDecomposeすることにより、より長周期での変動から買目を読むことを試みる。
バックテストをするまでもなく、このアップダウンの株価は買目、売目は明らかだ。
【参考】
①[【システムトレード入門】pythonでstcを描いて遊んでみた♬](https://qiita.com/MuAuan/items/86ace0460180fbd7784a)
②[【要素分解入門】時系列解析の手法をRとpythonで並べてみる♬](https://qiita.com/MuAuan/items/3a0273ba8be4035895be)
###やったこと
・Decomposeを組み込む
・結果はどうなのよ
###・Decomposeを組み込む
組み込みは以下のとおり
利用するLibは参考②のとおり、なお、参考①の重複コードは省略します。

```py
...
import matplotlib.pyplot as plt
...
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL

def...
```
データ取得は以下のとおりですが、series = ...を定義してDecomposeの準備をします。

```py
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します。
様子をグラフにプロットします。

```py
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）に変更しました
![close_%K%D_6758.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/42d73683-3897-ecd5-3edc-4dc89039914a.png)
そして、Noise除去されたTrendをdf['Close']に戻してやります。

```py
df['Close']=trend
```
これをHighとLowについても実施してやると以下のようなグラフが得られます。High,Low,Closeがちゃんと分離して見えます。
![All_%K%D_6758.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/0164c3c7-cb73-1916-d82c-7f7039337da5.png)
そして前回と同じコードで、こうして得られたデータで%K,%Dを計算し、描画します。

```py
df['%K'] = STOK(df['Close'], df['Low'], df['High'], 14)
df['%D'] = STOD(df['Close'], df['Low'], df['High'], 14)
```
グラフは以下のように凄くシンプルなのが得られました。
これだと、流石に買い間違い、売り間違いはなさそうです。
**6758Sony；買い過ぎリスク領域、リスク領域なので購入を控える**
![stc_%K%D_6758.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/62f2ab04-cf50-39a9-5159-31b3fa4de869.png)
###・結果はどうなのよ
どれもシンプルになりました！
当たり前ですが、これだと間違えずに売買出来そうです。
**8316三井住友フィナンシャル;上げ過ぎ領域、あと少しで売場面？**
![stc_%K%D_8316.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/1a3dbeda-b896-3197-facb-e6e50f7bcde0.png)
**9201日本航空；上げ過ぎリスク領域、あと少しで売場面？**
![stc_%K%D_9201.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/e71b6906-51c2-d6ea-5453-8495a96db9bc.png)
**9437NTTドコモ；下げ過ぎリスク領域、そろそろ買場面？**
![stc_%K%D_9437.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/193b4770-0ce0-7a6a-1f94-502341fa98e7.png)
###まとめ
・decompose関数でStochastic OscillatorのNoise除去を実施してみた
・グラフは単調な変化になり、売買が簡単になった

・実際、適用してみよう
・分足など短期売買に適用してみよう
・全銘柄に自動適用して買時、売時指数を指標化してみよう
###おまけ
####・短期売買
逆に日々のアップダウンを利用した短期売買はDeviationを利用すればできそうなのでやってみた。
やってみると以下のとおりになりました。
こちらは細かいのと、High、Low,Closeの値が本当にその上下関係になっているか（%K,%Dが0-100の範囲を上下に超えているので保証されていないようです）怪しく、それでもやってみる価値はありますが、得られたチャートから取引やってどうなのっていうのは、保証の限りではありません。
6758の結果
![cycle_stc_%K%D_6758.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/d43ecdcc-f93b-9df1-47bd-5a74155a61db.png)
9437の結果
![cycle_stc_%K%D_9437.JP_now.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/4f414b85-c8fe-9a31-7fe9-750149f881be.png)