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年:
。。。。。。
参考不了,仅供娱乐
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验