シグナル生成関数サンプル1
VisualCodingで提供されているコンポーネントから呼び出される関数。VisualCodingの画面を見ながら対応を見るとわかりやすい。 有効日数を実現するために、DataFrame.shift()を使っている。shift()は、過去の値を参照するのによく使う。
def _sma(datas):
# constant params...
a = 25
b = 75
d = 1.10
op = lambda x: x > d
vp = 2
daily = datas["jp.stock.daily"]
cp = daily["close_price_adj"].unstack(level="symbol").fillna(method="ffill")
# calc mavg...
df_a = cp.rolling(window=a, center=False).mean()
df_b = cp.rolling(window=b, center=False).mean()
df_c = df_a / df_b
df_d = op(df_c).astype(int) # 値を1,0にする
sum = pd.DataFrame(data=0,index=df_d.index, columns=df_d.columns)
for i in range(vp+1):
sum += df_d.shift(i)
return {
# for debug
"df_d": df_d, # 当日の値
"df_d_1": df_d.shift(1), # 1日前の値
"df_d_2": df_d.shift(2), # 2日前野値
"sum": sum, # (当日の値 + 1日前の値 + 2日前の値)
# signal...
"vc_sma:sig": (df_d > 0) & (sum > 0) & (sum <= vp)
}