Python AI股票自动化量化交易经济金融市场分析(每日更新)

在这里插入图片描述

股票 Quantitative Trading

Pyecharts

Python+echarts

conda activate python3118
pip install pyecharts

from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.faker import Faker

折线图

Pytdx

第一种方法是使用pytdx。大家知道通达信是主要的行情数据供应商和股票分析软件供应商。

许多证券公司的股票软件,都是基于通达信进行二次开发的。通达信软件早年还提供了插件,供用户获取行情数据。
Pytdx就是基于通达信的协议

手冊

综合交易模型-----通达信函数使用教程,提供源代码
https://zhuanlan.zhihu.com/p/667213093

探秘TdxTradeServer:一个强大的金融交易接口服务器
https://blog.csdn.net/gitblog_00012/article/details/137420944

https://gitee.com/ctosoft/StockClient
安装pytdx

pip install pytdx -U -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn

tdx ETF
https://zhuanlan.zhihu.com/p/458889137?utm_id=0&wd=&eqid=e0f41b380000730b000000036461fa9b

股票行情

 
'market': 股票市场代码,
'code': 股票代码,这里是'600819''active1': 第一个活跃值,这里是2202'price': 当前价格,这里是4.9'last_close': 上一个收盘价,这里是4.8'open': 今日开盘价,这里是4.78'high': 今日最高价,这里是4.95'low': 今日最低价,这里是4.78'servertime': 服务器时间,这里是'14:59:58.600''reversed_bytes0''reversed_bytes9': 一系列反转字节数据,可能用于内部处理,具体含义需要查看数据解析的上下文。
'vol': 成交量,这里是92711'cur_vol': 当前成交量,这里是1209'amount': 成交金额,这里是45492908.0's_vol': 卖出量,这里是45654'b_vol': 买入量,这里是47057'bid1': 第一买入价,这里是4.89'ask1': 第一卖出价,这里是4.9'bid_vol1': 第一买入量,这里是996'ask_vol1': 第一卖出量,这里是2253'bid2''ask5': 分别是第2到第5买入价和卖出价,以及对应的买入量和卖出量。
'active2': 第二个活跃值,这里是2202

获取k线 get_security_bars(9,0,‘000001’,100,800)

第二个数字表示市场:

市场代码 0:深圳,1:上海

第三串数字表示证券代码:

第四、五串数字

表示开始取值的位置和取值的个数:

(从当前往前面取值,如上面的100表示,从距离最新数据100的位置开始取值,像前取800个),
100这个位置的数字没有要求,可以一千一万,800这个数字有要求,
小于等于800.也就是一次最多取800个K线数据。


结合第四第五串数据就可以取到所有数据了 
open: 开盘价
close: 收盘价
high: 最高价
low: 最低价
vol: 成交量(手)
amount: 成交额(元)
year: 年份
month: 月份
day: 日
hour: 小时
minute: 分钟
datetime: 日期和时间

 

股票列表

'code': 股票代码。
'volunit': 成交量单位,这里是100'decimal_point': 小数点位数,这里是2'name': 股票名称。
'pre_close': 前一交易日收盘价

k线

'open': 开盘价。
'close': 收盘价。
'high': 最高价。
'low': 最低价。
'vol': 成交量。
'amount': 成交金额。
'year': 年份。
'month': 月份。
'day': 日期。
'hour': 小时。
'minute': 分钟。
'datetime': 日期时间。
'up_count': 上涨股票数量。
'down_count': 下跌股票数量。

akshare 免费 A股量化行情pythonSDK

akshare使用手册

backtrader回测框架包

https://blog.csdn.net/halps/article/details/127170996

pip install backtrader -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn

基于Python的量化回测框架,功能丰富,操作方便。其优点是运行速度快,支持pandas的矢量运算;

内置多种技术指标计算,还支持股票分析技术指标库talib;

支持参数自动寻优运算;支持多品种(股票、期货、期权、外汇和数字货币)、

多策略、多周期(Ticks、秒、分、日、周、月和年)的回测和交易;

支持PyFlio、empyrica分析模块库、alphalens多因子分析模块库等;

扩展灵活,可以集成TensorFlow、PyTorch和Keras等机器学习、神经网络分析模块。
深度机器学习

主要包括:

框架(Cerebro)、
数据加载(Data Feed)、
交易策略(Strategies)、
技术指标(Indicators)、
订单(Orders)、
观察者(Observers)、
测量评估(Analyzers)、 
经纪人(Broker)、
实盘交易(Live Trading)、
结果可视化(Plotting)等部分 

在这里插入图片描述

数据类型

backtrader回测的数据类型是由一系列的点组成的Lines,
通常包括以下类别的数据:

Open(开盘价)、High(最高价)、Low(最低价)、 Close(收盘价)、Volume(成交量)、
OpenInterest(未平仓权益)。

Data Feeds(数据加载)、Indicators(技术指标)和Strategies(策略)都会生成 Lines。

价格数据中的所有的开盘价按时间组成一条 Line,因此一组含有以上6个类别的价格数据,共有6条 Lines。
如果算上DateTime(时间,可以看作是一组数据的主键),一共有7条 Lines。

一条Line数据的下标为0表示访问当前时刻数据,-1表示访问最后一个数据。
因此,在回测过程中,无需知道已经处理了多少条/分钟/天/月,”0”一直指向当前值,下标 -1 来访问最后一个值。

交易策略(Strategy)

该模块是回测系统最核心的部分,需要设计交易决策,得出买入/卖出信号。

策略类代码包含重要的参数和用于执行策略的功能,要定义的参数或函数名如下:

(1)params:全局参数,可选,用于更改交易策略中变量/参数的值,可用于参数调优。

(2)log:日志,可选,用于记录策略的执行日志,可以打印出该函数提供的日期时间和txt变量。

(3)__init__:用于初始化交易策略,在其中声明的任何指标都会在next()方法调用之前进行计算。

部分python操作符不支持,需要使用bt内置函数来处理,
例如bt.And, bt.Or, bt.All, bt.Any等。

(4)notify_order,可选,

用于跟踪交易订单(order)的状态。
order具有提交,接受,买入/卖出执行和价格,已取消/拒绝等状态。

(5)notify_trade,可选,

用于跟踪交易的状态,任何已平仓的交易都将报告毛利和净利润。

(6)next,必选,

用于制定交易策略的函数,策略模块最核心的部分。

技术 趋势跟踪 指标(Indicators)

分析价格的动量和趋势的变化

实际上,策略的构建都需要指标来实现,该部分包括很多已经实现的指标,下面是一些比较常用的指标:

Average
指定周期的算术平均值。

SimpleMovingAverage(SMA):简单移动平均

布林线指标(BBANDS)

WeightedAverage:加权移动平均

MACD ((Moving Average Convergence Divergence):滑动平均

ExponentialMovingAverage(EMA):指数移动平均

RSI_SMA/RSI_EMA 相对强弱指标(Relative Strength Index):

斜体样式
https://blog.csdn.net/m0_61549740/article/details/138652860
衡量证券自身内在强度的指标,用于判断股票买方力量与卖方力量的强弱,进而预测价格走势
RSI大于50越多,表明股票上涨的力量超过下跌的力量越大。
RSI小于50越多,表明股票下跌的力量超过上涨的力量越大。
韦尔斯·威尔德(Wells Wilder)指出,通过运用月周期28天的一半来计算RSI的值进行预测是有效的,
他推荐14日为时间跨度。
一些常用的看盘软件设有6日RSI,12日RSI,24日RSI三个RSI指标
“黄金交叉”与“死亡交叉”

BollingerBands(BOLL):布林线

顺势指标又叫CCI指标,CCI指标是美国股市技术分析 家唐纳德·蓝伯特(Donald Lambert)于20世纪80年代提出的,专门测量股价、外汇或者贵金属交易是否已超出常态分布范围。

‌ROC指标‌(Rate of Change)是一种技术分析工具,用于衡量股票价格变动的速率,从而反映市场的动量和趋势。

动量线,英文全名Momentum,简称MOM
动量线(股价涨跌变动的比率)

‌ATR指标(Average True Range)是一种衡量市场波动性的技术指标,由威尔德(Welles Wilder)发明‌。它主要用于显示市场变化率,并不提供任何方向性的指引,仅反映价格变化的强烈程度。‌

DoubleExponentialMovingAverage(DEMA):双指数移动平均

WilliamsR(WR):威廉指标

在指标中也集成了TA-Lib库,实际使用中发现无法正常调用,不知道是不是跟我没有安装该库有关。
另外,还可以通过继承Indicator或其它已存在的指标类来实现自定义指标,方便用户加入自己开发的指标。

# 继承自bt.Indicator或其他已存在的指标类
class DummyInd(bt.Indicator):
    # 定义持有的lines,至少需要1个line
    lines = ('dummyline',)
    # params参数可选
    params = (('value', 5),)
    # plotinfo可选,用来控制绘图行为
    plotinfo = dict(subplot=False)
    # __init__方法或next方法必选
    def __init__(self):
        self.lines.dummyline = bt.Max(0.0, self.params.value)

订单(Orders)

将策略中逻辑做出的决策转换为适合经纪人执行操作的消息,通常在交易策略中调用。

经纪人(Broker)

通过设置回测的初始自己、佣金费率、税收费率、滑点率等交易条件,模拟不同的订单类型,
并根据现金检查订单,计算每次交易的现金和权益,保存交易数据。

策略评估(Analyzers)

用于分析交易策略的利润和风险,分析交易系统的绩效。

实盘交易(Live Trading)

从1.5.0开始支持实盘数据和实时交易。具体请参考:Live Trading。

观察者(Observers)

用于记录交易过程,包括现金、权益、费用以及交易动作、买卖订单等数据。

结果可视化(Plotting)

通过图形的方式显示交易测量回测的结果,绘图显示的结果包括三部分类型:现金及权益、交易损益、买卖动作。

绘图设置通过plotinfo来设置,

其参数主要有:

plot(是否绘图,默认为True),
subplot(是否单独窗口绘图,默认为True,MA类指标该参数为False),
plotname(指标图名,默认为指标类名),
plotabove(绘图位置在数据上方,默认为False),
plotlinelabels, plotymargin, plotyticks,plothlines, plotyhlines, plotforce。

注意:由于技术指标的不同,可视化结果中所包含的数据可能不同,因此需要根据技术指标来选择其所支持的参数进行设置。

系统流程

backtrader内部通过对数据和指标的处理执行策略,并记录所有的交易过程和数据输出给用户

backtrader的入口为Cerebro类,该类将所有输入(Data Feeds)、执行 (Stratgegies)、观察者(Observers)、评价(Analyzers) 和文档 (Writers)整合起来,实现回测以及交易,并返回结果和图表。

(1)创建实例

cerebro = bt.Cerebro()  # 创建回测系统实例
(2)关联输入数据

cerebro.adddata(data)  # 将数据加载至回测系统
(3)关联交易策略

cerebro.addstrategy(BollStrategy,nk=14,m=2,printlog=True)
(4)关联其他可选功能

addwriter():指定交易过程和数据保存的方式。

addanalyzer():增加策略评估。

addobserver():增加观察者。

addobservermulti()

(5)指定经纪人

broker = MyBroker()
cerebro.broker = broker
可以根据不同类型的交易对象设置经纪人模型。

(6)接收消息

接收回测消息有三种方式:在Cerebro类的实例中通过addnotifycallback(callback)增加回调函数、在Strategy子类中重载notify_store()方法、继承Cerebro类并重载notify_store()方法

(7)执行回测并返回结果

result=cerebro.run(maxcpus=1)
(8)记录交易信息

这个功能是通过观察者(Observers)实现,有三种类型:

经纪人观察者(Broker)保存现金和权益信息。交易观察者(Trades)记录交易的有效性。买卖观察者(Buy/Sell)记录所有交易执行的操。

(9)绘图显示

cerebro.plot()
绘图显示底层实际上是调用Matplotlib包实现的。 

BRAR 情绪指标计算

BRAR 是一种情绪指标,用于衡量特定金融市场中的买卖情绪。
它代表着买入意愿相对于卖出意愿的比率。

AR

一种技术指标,代表“人气指标”(AR,Attention Rate)。AR指标用于衡量特定时间段内股票市场的人气或关注度,这可以提供对市场情绪的一种衡量。

BR

一种技术指标,代表着“买卖气指标”(Buy/Sell Pressure)。BR指标通常用于股票市场的技术分析,旨在衡量买卖双方的力量对价格变动的影响。BR指标的计算涉及到最高价、最低价和收盘价的变动,以及特定周期内的累积运算。

BRAR (情绪指标)
用法
1.BR行情(买卖气指标)   AR能量

BR行情>400,暗示行情过热,应反向卖出;
AR能量>180,能量耗尽,应卖出;


BR行情<40 ,行情将起死回生,应买进;
AR能量<40 ,能量已累积爆发力,应买进;
 
 

3.BR 由300 以上的高点下跌至50以下的水平,低于AR 时,为绝佳买点;

4.BR、AR、CR、VR 四者合为一组指标群,须综合搭配使用。

REF 函数表示对某一周期前的数据进行引用。N 代表计算周期。
BR:SUM(MAX(0,HIGH-REF(CLOSE,1)),N)/SUM(MAX(0,REF(CLOSE,1)-LOW),N)*100;
AR:SUM(HIGH-OPEN,N)/SUM(OPEN-LOW,N)*100;
rolling函数介绍
rolling 函数通常与其他函数(如 mean、sum、std 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

window: 用于计算统计量的窗口大小。
min_periods: 每个窗口最少需要的非空观测值数量。
center: 确定窗口是否居中,默认为 False。
win_type: 窗口类型,例如 None、boxcar、triang 等,默认为 None。
on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值