首页 > 编程语言 >Python 量化demo

Python 量化demo

时间:2024-10-22 13:44:00浏览次数:1  
标签:plt Python demo DIF MACD result date 量化 data

Python量化

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

量化指标

KDJ 指标

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

MACD指标

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

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

代码实现

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

数据获取

数据来源: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

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

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

买卖信号

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

选择一只股票测试下:

将处理结果存到文件:

数据可视化

引入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年:


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

标签:plt,Python,demo,DIF,MACD,result,date,量化,data
From: https://www.cnblogs.com/jinnandu/p/18370836

相关文章

  • 在 Python 中使用 Type Hints
    在Python中使用TypeHintsCreated:2024-10-21T16:48+08:00Published:2024-10-22T13:08+08:00Categories:Python工厂方法使用TypeVar作为函数参数的类型注释,可以做到传入什么类型,返回什么类型。fromtypingimportType,TypeVarclassPet:def__init__(sel......
  • 第十八课:Python学习之多态
    多态目标多态面向对象三大特性封装根据职责将属性和方法封装到一个抽象的类中定义类的准则继承实现代码的重用,相同的代码不需要重复的编写设计类的技巧子类针对自己特有的需求,编写特定的代码多态不同的子类对象调用相同的父类方法,产生不同的执行......
  • 第十七课:Python学习之单例模式
    单例目标单例设计模式__new__方法Python中的单例01.单例设计模式设计模式设计模式是前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性单例设......
  • python——扑克牌案列
    斗地主发牌程序:模拟一个斗地主发牌程序,实现对三个玩家进行手牌的派发,实现功能:**********欢迎进入XX斗地主**********请输入玩家姓名:<用户控制台输入A>请输入玩家姓名:<用户控制台输入B>请输入玩家姓名:<用户控制台输入C>洗牌中...洗牌完成!发牌中...发牌完成!A:<......
  • python--学生管理系统案列
    1.编写一个程序,模拟一个简单的学生管理系统。要求用户可以添加学生信息,查看学生列表和每个学生的信息,删除学生信息等操作。使用字典实现,键为学生的姓名,值为一个包含学生信息的字典(包括学号、班级、成绩等)。******************************欢迎使用学生管理系统************......
  • 【LeetCode】动态规划—790. 多米诺和托米诺平铺(附完整Python/C++代码)
    动态规划—790.多米诺和托米诺平铺题目描述前言基本思路1.定义2.理解问题和递推关系3.解决方法4.进一步优化5.小总结代码实现Python代码Python代码解释总结C++代码C++代码解释总结总结题目描述前言本文将详细讨论LeetCode上的"多米诺和三米诺平铺"问题。......
  • python爬虫数据存进mysql数据库
    一、安装mysql和mysqlworkbench我已经在电脑上安装了最新的mysql8.2.0,配置好环境变量,在命令提示符中以管理员的身份初始化并成功启动mysql数据库。前期因为以前的mysql没有卸载干净,导致mysql一直无法启动服务。所以一定要保证以前的mysql卸载干净才能重新安装,以前没有安装过......
  • 在Python中使用连接池
    在数据库操作中,频繁地打开和关闭连接会消耗大量的资源和时间,在一些需要高并发的场景,我们就需要连接池技术优化这一问题。本文以Python中的SQLite数据库为例,介绍如何使用连接池来提升数据操作的效率。对于使用SQLite这样的轻量级数据库,虽然连接的开销相对较小,但在高并发......
  • 这些Python代码加速工具,你都用过吗?
    优化代码的工具会让代码变得更简洁,或者更迅速!一起来了解了解吧。NumPy、SciPy、Sage和Pandas先说NumPy,它的核心是一个多维数字数组的实现。除了这个数据结构之外,还实现了若干个函数和运算符,可以高效地进行数组运算。并且对于被调用的次数进行了精简。它可以被用来进行极......
  • Python语法探索:解锁编程艺术的大门
    Python,一种被广泛赞誉为“优雅”、“明确”及“简单”的高级编程语言,自1991年由GuidovanRossum创造以来,已经从一门小众脚本语言成长为全球范围内应用于网页开发、数据分析、人工智能等多个领域的强大工具。本文旨在为初学者和进阶开发者提供一份详尽的Python语法指南,通过实例解......