1.はじめに
どうも、趣味でデータ分析している猫背なエンジニアです。
今回は、前回に引き続き兆しシリーズのロジックについて考えたので記録していきます。
2. stochastics(ストキャスティクス)
■ 概要
以前の記事で以下のような画像のスクリーニング1号機を作り内部ロジックで「RSI」を入れましたが、今回は「Stochastics」というロジックも試しに入れてみようと思っています。

■ ストキャスティクス
stochastics(ストキャスティクス)は、RSI同様で相場の買われ過ぎ・売られ過ぎを判断する分析手法。
「%K」と「%D」の2本のラインを利用した、ファーストストキャスティックスと、「Slow%K」と「Slow%D」の2本のラインを利用したスローストキャスティクスの2種類がありますが、ファーストストキャスティックスは、相場の動きに素早く反応するため、短期売買向きでダマシも多いのが欠点です。それを補う役割を果たすのがスローストキャスティクスで、一般的にはこちらを利用することが多いです。
※ 今回はファーストストキャスティックスを実装しています。
Fast %Kの式:
$$
%K = \frac{C - L_n}{H_n - L_n} \times 100
$$
C:直近の終値 / Hn:過去n期間の最高値 / Ln:過去n期間の最低値 / n:期間(14日)
Fast %Dの式:
$$
%D = \mathrm{SMA}(%K, m)
$$
m:移動平均期間(3日) / SMA:単純移動平均
■ コーディング
以下のようにファーストストキャスティックスを実装しました。買いシグナルがあるものをピックアップする式にしているので、一般的なソースとは別かもしれません。
def screen_stochastic(df):
df = df.copy()
low_min = df["Low"].rolling(14).min()
high_max = df["High"].rolling(14).max()
df["%K"] = (df["Close"] - low_min) / (high_max - low_min) * 100
df["%D"] = df["%K"].rolling(3).mean()
# 最新足で判定
last = df.iloc[-1]
# --- 買いシグナル ---
stochastic_flag = False
if last["%K"] < 20 and last["%D"] < 20:
stochastic_flag = True
return stochastic_flag
■ 実行結果
RSIまでにスクリーニングが進んでおり、2銘柄しか削れていないことがわかります。

4.おわりに
今回は兆しシリーズのKK-FinancialEaterの一号機を進めていきました。前回に引き続きスクリーニングできていることが確認できますね。
ですが、結果からも読み取れるようにスクリーニングできる銘柄も限られてきたので、さらに質の高いスクリーニング方法を模索する必要がありそうです。
📈 KK-FinancialEater
■ 原点(KK-Adam)
■ その1:プロトタイプ編
■ その2:収集器強化編
■ その3-番外編:グランビルの法則 - 設計編
■ その3:グランビルの法則
■ その4:移動平均乖離率
■ その5:ボリンジャーバンド
■ その6:RSI
参考文献