有时候,市场的情绪会演绎到比较夸张的位置,其实很简单的指标就可以量化,比如过去20个交易日的累计涨跌幅,同时计算过去滚动涨跌幅的分位数就大致可以判断市场情绪。
import datetime
from WindPy import w
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 启动Wind开放接口
w.start()
def s_plot(code, start_date):
# 获取沪深300指数上市以来的行情数据
wind_df = w.wsd(code, "close", start_date, datetime.date.today().strftime("%Y-%m-%d"))
tpd_df = pd.DataFrame(wind_df.Data[0], columns=["close"])
tpd_df.index = wind_df.Times
tpd_df["shift_close"] = tpd_df["close"].shift(1)
tpd_df["daily_return"] = tpd_df["close"] / tpd_df["shift_close"] - 1
rolling_20day_return = tpd_df["daily_return"].rolling(20).apply(lambda x:(x+1).prod())
analysis_df = pd.DataFrame(rolling_20day_return)
analysis_df["0.025_bot"] = analysis_df["daily_return"].quantile(0.0255)
analysis_df["0.05_bot"] = analysis_df["daily_return"].quantile(0.05)
analysis_df["0.95_bot"] = analysis_df["daily_return"].quantile(0.95)
analysis_df["0.975_bot"] = analysis_df["daily_return"].quantile(0.975)
analysis_df["close"] = tpd_df["close"]
# plt.figure()
# analysis_df["daily_return"].hist(bins=200, figsize=(19, 9))
# plt.show()
print("current code is : %s" % code)
plt.figure()
analysis_df[["daily_return", "0.025_bot", "0.05_bot", "0.95_bot", "0.975_bot"]].plot(figsize=(19, 9))
plt.show()
plt.figure()
analysis_df["close"].plot(figsize=(19, 9))
plt.show()
base_code = ["UR", "AU", "IM", "IC", "IH", "AG", "AP", "SM", "JD", "IF", "PB", "SA", "TS", "SI", "CJ", "TF", "CY", "RS", "T", "PK", "CF", "SF", "C",
"CS", "CU", "LH", "SS", "L", "SN", "PP", "AL", "MA", "PG", "NI", "V", "RU", "SP", "SR", "A","M","B","ZN", "Y", "RB","EB","HC","PF",
"FG", "TA","BU","EG", "OI","P","RM","JM", "I", "J", "LU", "SC","FU"]
start_date = "2015-01-01"
for code in base_code:
s_plot("%sFI.WI"% code, start_date)
文章为作者独立观点,不代表股票交易接口观点