Python 量化demo

Python量化

量化交易: 通过程序选出合适的股票(或其他),在合适的时机,发起买入或卖出的交易,从中追求盈利。

一. 量化指标

1. KDJ 指标

KDJ指标,也称为随机振荡器,是一种动量指标,用于衡量一定时间内股票收盘价与价格范围(最高价和最低价)的关系。
KDJ由三条线组成:快速线K、慢速线D和动态线J。这个指标可以帮助交易者识别超买和超卖条件,以及潜在的转折点。

2. MACD指标

  • MACD,全称是移动平均线收敛/发散指标(Moving Average Convergence Divergence),由以下几个主要部分组成:
  • 快线(短期EMA):这是短期的指数移动平均线,通常使用12天的价格数据进行计算。它对价格变化较为敏感,能够迅速反映市场的最新动态。
  • 慢线(长期EMA):这是长期的指数移动平均线,通常使用26天的价格数据进行计算。与快线相比,它对价格变化的反应较慢,更能反映市场的整体趋势。
  • DIF线(快线与慢线的差):DIF线是快线减去慢线的差值。它表示短期价格变化和长期价格趋势之间的差异。当DIF线在正值区域时,表明短期趋势较强;在负值区域时,表明长期趋势较强。
  • DEA线(信号线):DEA线是DIF线的9天指数移动平均线。它用于平滑DIF线的波动,帮助我们更清晰地观察市场趋势。
  • MACD柱状图:MACD柱状图显示DIF线与DEA线之间的差距。柱状图的高度表示差距的大小,当柱状图由负转正或由正转负时,往往意味着市场趋势的变化。
    通过这几个部分的配合,MACD能够为交易者提供清晰的买入和卖出信号,帮助他们在市场中做出更明智的决策。

3. KDJ结合MACD和RSI指标的分析方法

二. 代码实现

确定KDJ结合MACD的策略,使用python pandas进行数据处理

1. 数据获取

数据来源:baostock

#获取股票数据
def get_data(ticket,start_date):
today = datetime.datetime.now().strftime("%Y-%m-%d")
# 登录 Baostock
lg = bs.login()
# 获取股票数据,
rs = bs.query_history_k_data_plus(ticket,
"date,code,open,high,low,close,volume",
start_date=start_date, end_date=today,
frequency="d", adjustflag="3")
data_list = []
while (rs.error_code == '0') & rs.next():
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# 转换数据类型
result['close'] = result['close'].astype(float)
result['high'] = result['high'].astype(float)
result['low'] = result['low'].astype(float)
# 登出 Baostock
bs.logout()
return result

2. KDJ 计算

# 计算 KDJ 指标中的 RSV 值
def calculate_KDJ(data):
low_9 = data['low'].rolling(window=9).min()
high_9 = data['high'].rolling(window=9).max()
data['RSV'] = ((data['close'] - low_9) / (high_9 - low_9)) * 100
# 计算 K 值
k_period = 3
data['K'] = data['RSV'].ewm(alpha=1/k_period).mean()
#return rsv
# 计算 D 值
d_period = 3
data['D'] = data['K'].ewm(alpha=1/d_period).mean()
# 计算 J 值
data['J'] = 3 * data['K'] - 2 * data['D']
return data

3. MACD 计算

# 计算MACD
def calculate_macd(data):
ema12 = data['close'].ewm(span = 12).mean()
ema26 = data['close'].ewm(span = 26).mean()
dif = ema12 - ema26
dea = dif.ewm(span = 9).mean()
macd_bar = (dif - dea)
data['DIF'], data['DEA'], data['MACD'] = dif, dea, macd_bar
return data

4. 买卖信号

def get_final_result(ticket,start_date):
data = get_data(ticket,start_date)
calculate_macd(data)
#print(data)
calculate_KDJ(data)
# 生成买入卖出信号,结合KDJ和MACD
data['signal'] = np.where((data['K'] < data['D']) & (data['K'] > 20) & (data['D'] > 20) & (data['J'] < data['K']) & (data['J'] > data['D']) & (data['DIF'] > data['DEA']), 0,
np.where((data['K'] > data['D']) & (data['K'] < 80) & (data['D'] < 80) & (data['J'] > data['K']) & (data['J'] > data['D']) & (data['DIF'] < data['DEA']), 1, np.nan))
return data

选择一只股票测试下:

将处理结果存到文件:

5. 数据可视化

引入matplotlib 模块

def plot_chart(data):
plt.figure(figsize=(12, 8))
# 绘制收盘价曲线
plt.plot(data['date'], data['close'], label='Close Price', color='blue')
# 绘制 K、D、J 曲线
plt.plot(data['date'], data['K'], label='K', color='green')
plt.plot(data['date'], data['D'], label='D', color='orange')
plt.plot(data['date'], data['J'], label='J', color='purple')
# 绘制 MACD 曲线
plt.plot(data['date'], data['DIF'], label='DIF', color='red')
plt.plot(data['date'], data['DEA'], label='DEA', color='yellow')
plt.bar(data['date'], data['MACD'], label='MACD', color='gray', alpha=0.6)
# 添加买入卖出信号标记
for index, row in data.iterrows():
if row['signal'] == 'buy':
plt.scatter(row['date'], row['close'], marker='^', color='green', s=100)
elif row['signal'] == 'sell':
plt.scatter(row['date'], row['close'], marker='v', color='red', s=100)
plt.title('Stock Analysis with KDJ and MACD')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

放到main里测试下:

# 获取处理完成后的数据
result = get_final_result('sh.600887','2024-8-21')
# 调用绘制图表函数
plot_chart(result)
# 存储到文件
result.to_csv("D:\\my_result_241022.csv", index=False)
# 打印带有信号的结果
print(result[['date', 'close', 'K', 'D', 'J', 'DIF', 'DEA', 'MACD', 'signal']])

感觉不对呀

将日期改到23年:


。。。。。。
参考不了,仅供娱乐

posted @   渔樵江渚  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示