python A股动量策略探究


前言

A股动量策略是指利用股票市场上股票价格的走势以及量能等指标,选择一些市值较小、增长性较高的股票,进行短期交易,以获取超额收益的交易策略。其核心思想是在股票价格开始上升时购入,当价格开始下降时卖出。

动量指标主要分为两类,一类是价格动量指标,如相对强弱指标(RSI)、动态动量指标(DMI)等;另一类是量能动量指标,如成交量指标等。此外,还有一些技术指标如MACD、布林线等可以作为动量策略的辅助指标。

动量策略主要有以下两种常用实现方式:

追涨杀跌
追涨杀跌策略是指在短期内追逐市场上涨的股票或板块,并在趋势反转前卖出。其基本原理是在股票或板块已经处于较大涨幅时进场,通过价格动量指标来确定买卖点,具体执行过程中需要注意风险控制和资产配置等问题。

趋势跟踪
趋势跟踪策略是指在较长时间内跟踪某个股票或板块,通过持有和交易实现收益。其基本原理是在股票或板块价格处于较大涨幅时进场,当价格开始下降时卖出,然后再找到下一个涨势股票或板块,如此反复操作。具体执行过程中同样需要注意风险控制和资产配置等问题。

在实际操作中,动量策略需要根据市场情况和自身特点进行不断地优化和调整,同时需要严格遵守交易纪律,避免受到市场情绪的影响。
查询dqnapi接口域名:http://www.dqnapi.com/
在这里插入图片描述
在这里插入图片描述

pro.stock_basic dqnapi号:100.3568/2023.1_v1
pro.daily dqnapi号:100.3568/2023.11_v1

Python代码:

import tushare as ts
import pandas as pd
from time import sleep

# 设置Tushare Pro API Token
ts.set_token('5f49af63e213438df4f2566786d51ce8e7581b70cd5a4a6ac8bc8189')

# 初始化Tushare Pro客户端
pro = ts.pro_api()

# 获取股票列表
data_basic = pro.stock_basic(list_status='L', fields='ts_code')

# 计算RSI、MACD、Signal和Hist
n_days = 14
rsi_values = []
macd_values = []
signal_values = []
hist_values = []

for ts_code in data_basic['ts_code']:
    print(ts_code)
    # 获取股票数据
    data = pro.daily(ts_code=ts_code, start_date='20230101', end_date='20230615')

    # 检查数据是否为空
    if data.empty:
        print(f'{ts_code} has no data in this period.')
        continue

    # 将数据按照日期升序排列
    data = data.sort_values('trade_date')

    # 计算RSI
    upward_movements = []
    downward_movements = []
    rsi = 0

    for i in range(1, len(data)):
        upward_movements.append(max(data.iloc[i]['high'] - data.iloc[i-1]['close'], 0))
        downward_movements.append(max(data.iloc[i-1]['close'] - data.iloc[i]['low'], 0))

        if i >= n_days:
            avg_up = sum(upward_movements[-n_days:]) / n_days
            avg_down = sum(downward_movements[-n_days:]) / n_days
            rs = avg_up / avg_down if avg_down != 0 else 100
            rsi = 100 - (100 / (1 + rs))



    # 计算MACD和Signal
    ema12 = data['close'].ewm(span=12, adjust=False).mean()
    ema26 = data['close'].ewm(span=26, adjust=False).mean()
    macd = ema12 - ema26
    signal = macd.ewm(span=9, adjust=False).mean()
    hist = macd - signal

    # 检查MACD等变量的长度是否正确
    if len(macd) < 1:
        print(f'{ts_code} has no enough data for MACD calculation.')
        continue

    rsi_values.append(rsi)
    macd_values.append(macd.iloc[-1])
    signal_values.append(signal.iloc[-1])
    hist_values.append(hist.iloc[-1])
	# 将结果保存到csv文件
    result_dict = {'ts_code': [], 'rsi': [], 'macd': [], 'signal': [], 'hist': []}
    result_dict['ts_code'].append(ts_code)
    result_dict['rsi'].append(rsi)
    result_dict['macd'].append(macd.iloc[-1])
    result_dict['signal'].append(signal.iloc[-1])
    result_dict['hist'].append(hist.iloc[-1])
    data_result = pd.DataFrame(result_dict)
    data_result = data_result[data_result['rsi'] > 70]
    sleep(0.1)


data_result.to_csv('filter.csv', index=False)
# 将结果保存到csv文件
#data_result = pd.DataFrame({'ts_code': data_basic['ts_code'][:len(rsi_values)], 'rsi': rsi_values, 'macd': macd_values, 'signal': signal_values, 'hist': hist_values})
#data_result = data_result[data_result['rsi'] > 70]  # 筛选RSI处于超买状态的股票
#data_result.to_csv('filter.csv', index=False)

总结

这段代码主要是获取所有A股股票的RSI、MACD、Signal和Hist指标,并将符合条件(RSI超过70)的结果保存到csv文件中。

首先,通过Tushare Pro API获取所有的A股股票列表数据,然后循环遍历每个股票。对于每个股票,先通过pro.daily()函数获取该股票指定时间范围内的日线行情数据,然后按照日期升序排列。接着,计算股票的RSI指标值、MACD和Signal值。其中,RSI(相对强弱指标)是用来衡量股票价格走势强度的技术指标;MACD(指数平滑移动平均线)是一种趋势指标,用来衡量股票价格快速变化的能力;Signal(信号线)是基于MACD的9日EMA,用来产生交叉信号;Hist(柱状图)则是MACD线和Signal线之间的差异。然后将每个股票的RSI、MACD、Signal和Hist值保存到对应的列表中。

在循环结束后,将结果保存到csv文件中。在保存的时候,将每个符合条件的股票(即RSI超过70的股票)作为一个DataFrame,然后将其转化为csv文件并保存。

需要注意的是,由于数据的缺失或其他原因可能导致计算的指标值为空(NaN),因此需要在计算指标值时对结果进行判断,只有在指标值不为空时才会将其保存到结果中。

最后,指标意义如下:

RSI:相对强弱指标,用于衡量股票价格走势的强度,RSI越高,说明超买的可能性越大。
MACD:指数平滑移动平均线,用于衡量股票价格快速变化的能力,MACD值越大,说明趋势越强。
Signal:信号线,基于MACD的9日EMA,用来产生交叉信号。
Hist:柱状图,是MACD线和Signal线之间的差异。当MACD线向上突破Signal线时,Hist为正,当MACD线向下突破Signal线时,Hist为负。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值