python:talib 计算 SAR 求发出买入信号日期

该代码示例演示了如何利用Talib库计算股票的SAR指标,并找出买入信号。程序从命令行参数获取股票代码,筛选2021年以后的数据,计算SAR并设置过滤阈值,输出满足条件的买入信号日期及其收益率。同时,绘制了收盘价和SAR的图表。

talib_sar.py 求买入信号发出日期 

 Buy:买入,close:收盘价,rate:收益率

# -*- coding: utf-8 -*-
import os, sys
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

if len(sys.argv) ==2:
    code = sys.argv[1]
else:
    print('usage: python talib_sar.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

df = ts.get_k_data(code)
if df.empty ==True:
    print(" df is empty ")
    sys.exit(2)

df = df[ df['date'] > '2024-01-01']
if len(df) <10:
    print(" len(df) <10 ")
    sys.exit(2)

#df = df.resample('B').ffill()
print(df.tail())
# SAR,Stop and Reverse,是 Welles Wilder发明的,SAR是一个基于价格/时间的指标.
sar = talib.SAR(df.high, df.low, acceleration=0.02, maximum=0.2)
print(sar.tail(5))
close = df['close'].values
# 过滤阀值
glv = close[-10]*0.05
# 求发出买入信号日期
for i in range(-30,0):
	if (sar.iloc[i-1] - sar.iloc[i]) > glv:
		print(df[i:i+1])
		print('B
<think>我们使用TA-Lib库中的MACD函数来计算MACD指标,该函数返回三个值:DIF(MACD线)、DEA(信号线)和MACD柱(histogram)。 根据用户需,我们只需要计算并打印DIF部分(即MACD函数返回的第一个数组)。 步骤: 1. 确保已经安装TA-Lib库。如果没有安装,可以通过`pip install TA-Lib`安装(注意:在安装之前可能需要安装一些依赖,具体参考官方文档)。 2. 导入TA-Lib库(通常使用`import talib`)。 3. 准备数据:需要有一个包含收盘价的数组(或序列)。假设我们有一个名为`close_prices`的数组,存储了每日的收盘价。 4. 调用`talib.MACD`函数,并指定参数:fastperiod(默认12)、slowperiod(默认26)、signalperiod(默认9)。用户也可以自定义这些参数。 5. 函数返回三个数组:dif, dea, macdhist(即DIF, DEA, MACD柱)。我们只需要第一个数组dif。 6. 打印dif数组(即DIF值)。 注意:由于MACD计算需要一定长度的数据,所以返回的数组前面部分可能是NaN(无效值),直到有足够的数据计算第一个MACD值。 示例代码: 假设我们有一个包含收盘价的数据集(例如一个列表或NumPy数组),我们将计算DIF并打印。 参考引用[1]中给出的调用方式:dif, dea, bar = talib.MACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9) 下面我们编写代码示例。</think>在Python中使用TA-Lib库计算MACD指标的DIF值并打印结果,可以按照以下步骤操作: ### 计算MACD的DIF值步骤 1. **导入TA-Lib库** 2. **准备收盘价数据**(需为NumPy数组格式) 3. **调用MACD函数**计算三个指标值 4. **提取DIF值**(返回的第一个数组) 5. **打印DIF结果** ```python import talib import numpy as np # 示例收盘价数据(替换为实际数据) close_prices = np.array([45.23, 46.54, 47.82, 48.15, 47.98, 49.25, 50.12]) # 计算MACD指标(默认参数:fast=12, slow=26, signal=9) dif, dea, macd_hist = talib.MACD(close_prices) # 打印DIF值 print("MACD的DIF值:") for i, value in enumerate(dif): print(f"第{i+1}天: {value:.4f}" if not np.isnan(value) else f"第{i+1}天: 数据不足") ``` ### 关键说明: 1. **数据要**: - 输入数据必须是`numpy.ndarray`类型 - 前25个DIF值通常为`NaN`(因需26周期计算慢速EMA)[^1] 2. **参数调整**: ```python # 自定义参数示例(快线周期8,慢线周期17,信号周期9) dif_custom = talib.MACD(close_prices, fastperiod=8, slowperiod=17, signalperiod=9)[0] ``` 3. **输出示例**: ``` MACD的DIF值: 第1天: 数据不足 第2天: 数据不足 ... 第26天: 0.7821 第27天: 0.8653 ``` ### 实际应用建议 - 结合K线数据使用:`dif = talib.MACD(df['close'].values)[0]`[^2] - 交易策略应用:DIF与DEA形成金叉/死叉时作为买卖信号[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值