股票 Quantitative Trading
- Pyecharts
- Pytdx
- akshare 免费 A股量化行情pythonSDK
- backtrader回测框架包
- BRAR 情绪指标计算
- 市场货币投资
- 机器学习与量化交易 分类任务
- 银河证券 95551
- 盘口基本概念
- 看图指标
- 集合竞价
- K线图,股票分析
- 聚宽量化官网
- 量化交易员(Quants)
- 交易策略
- WonderTrader
- 天勤量化 tqsdk 期货
- 穿云箭集群量化
- 掘金
- miniqmt
- 数据
- 股市 Finance
- AlgoPlus
- jqdataSDK
- Tushare
- 同花顺 SuperMind
- 易方达
- 买卖股票:
- 市场供需决定价格:
- 交易中介:
- 交易订单:
- 交易费用:
- 交易风险:
- 信息披露:
- 投资策略:
- 北证A股交易规则 T+1
- 深圳证券交易所交易规则 深A
- A股 T+1
- 港交所交易规则 T + 0
- 上海证券交易所 沪A
- 參考文章
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
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,表示对整个数据帧执行操作。