文章目录

p6 获取板块、交易行情数据

p7 获取财务数据与定时器

p8 投资组合与交易

p9 策略的收益指标

p10 策略风险指标

视频:4天学会python机器学习与量化交易

平台:米筐

4天学会python机器学习与量化交易,肯定是不可能的,最多入个门。

学习原因:

1,讲在线策略,免去本地搭建环境,下载数据等琐事。

2,主要讲A股交易,和有的量化资料不一样(讲期权),有实用价值。

3,讲的比较简单,适合入门。

2020.2.12 开始学习,之前没学过,看看要多久看完并学会,立个flag。

p6 获取板块、交易行情数据

RQData API文档:这里

获取板块、交易行情数据

1,获取股票

def init(context):

context.s1 = '000001.XSHE'

#获取计算机通信行业股票

context.stock_list = industry('C39')

#获取能源板块股票

context.sector_list = sector('Energy')

#获取指数成分股股票,如沪深300指数股票 (相当于获取股票池)

context.index_list = index_components('000300.XSHG')

2,获取价格

2.1 收盘价格 history_bars

这里指获取获取该股票某一天前面5天的收盘价格

def handle_bar(context,bar_dict):

close = history_bars(context.s1, 5, '1d', 'close')

logger.info(close)

结果:

2016-09-28 INFO [9.16 9.15 9.04 9.06 9.05]

2016-09-29 INFO [9.15 9.04 9.06 9.05 9.06]

2016-09-30 INFO [9.04 9.06 9.05 9.06 9.07]

2016-09-30 WARN 订单被拒单: [600397.XSHG] 已涨停。

2016-09-30 WARN 订单创建失败: 下单量为0

2016-09-30 WARN 订单创建失败: 下单量为0

其中,[9.16 9.15 9.04 9.06 9.05],9.05(最右边的)为9.28号的价格。close的类型为。

2.2 获取多个指标

变成2维数据

def handle_bar(context,bar_dict):

#获取前面5天收盘价

close = history_bars(context.s1, 5, '1d', 'close')

# 获取多个指标

history_1 = history_bars(context.s1, 5, '1d', ['close', 'open'])

print(history_1)

结果:

2016-09-28 INFO [(9.16, 9.1 ) (9.15, 9.16) (9.04, 9.13) (9.06, 9.04) (9.05, 9.06)]

2016-09-29 INFO [(9.15, 9.16) (9.04, 9.13) (9.06, 9.04) (9.05, 9.06) (9.06, 9.05)]

2016-09-30 INFO [(9.04, 9.13) (9.06, 9.04) (9.05, 9.06) (9.06, 9.05) (9.07, 9.06)]

2016-09-30 WARN 订单创建失败: 下单量为0

2016-09-30 WARN 订单创建失败: 下单量为0

2.3 获取分钟数据

# 获取1分钟

close_1min = history_bars(context.s1, 5, '1m', 'close')

要将右边时间选项修改为“分钟”。

p7 获取财务数据与定时器

获取财务数据与定时器

bar_dict也可以获取行情数据,但只能获取当前日期的。

get_fundamentals()获取财务数据,基本面,用来选股。在before_trading或handle_bar中调用,不能在init调用。回测时不用。

1,获取市盈率PE - 简单查询

def before_trading(context):

# 获取财务数据,默认获取所有A股的股票财务数据

# 创建查询语句

q = query(fundamentals.eod_derivative_indicator.pe_ratio)

# 回测不需要传日期,默认当天的数据

fund = get_fundamentals(q)

logger.info(fund.T)

pass

2,过滤查询

def handle_bar(context,bar_dict):

# 获取财务数据,默认获取所有A股的股票财务数据

# 创建查询语句

# 增加filter

q = query(

fundamentals.eod_derivative_indicator.pe_ratio,

fundamentals.eod_derivative_indicator.pcf_ratio

).filter(

fundamentals.eod_derivative_indicator.pe_ratio > 20,

fundamentals.eod_derivative_indicator.pcf_ratio < 50

).order_by(

fundamentals.eod_derivative_indicator.pe_ratio

).filter(

fundamentals.stockcode.in_(context.index_list)

).limit(10)

# 回测不需要传日期,默认当天的数据

fund = get_fundamentals(q)

logger.info(fund.T)

pass

3,定时器scheduler

通过财务数据选股,不会每天获取,常以每周/每月选取。

定时器必须在init中使用。

例子:按月查询。

def init(context):

# 定义按月运行的一个定时运行器

# 每月只运行一次,指定第一个交易日

scheduler.run_monthly(get_data, tradingday=1)

def get_data(context, bar_dict):

#函数都不用return

# 在这里按月去查询财务数据

q = query(

fundamentals.eod_derivative_indicator.pb_ratio

).filter(fundamentals.stockcode.in_(context.index_list))

fund = get_fundamentals(q)

logger.info(fund.T)

运行顺序:

按月

scheduler.run_monthly(get_data, tradingday=1)

2月,2月1号假设为第一个交易日,before_trading -> get_data -> handle_bar

2月其他日期,before_trading -> handle_bar

p8 投资组合与交易

投资组合与交易

1,

在handle_bar进行交易。默认按收盘价买入(撮合方式:当前bar收盘价)。

def handle_bar(context,bar_dict):

# 进行交易

# 每天的收盘价,假如第一天11.33*1000

# order_shares(context.s1, 1000)

# 按持仓比例,始终占0.1,有买有卖

order_target_percent(context.s1, 0.10)

2,限价单,市价单

限价单:挂单,市价20.1,指定20.5卖出,19.2买入(先等它降价,再买)

市价单:目的为了快速成交,当前市价多少,买入、卖出就是多少(默认)

滑点的设置影响:为了更好的模拟实际交易中订单对市场的冲击,引入滑点。例如,设置滑点为0.1,原本买入价格为10元,设置后成交价格为11元,因为买的人太多了。

– 在回测中使用。成交价更高。一般默认取0.1即可。

交易的卖空设置:股票T+1,不要设置。

3,投资组合 portfoilo

资金:可用价值,市场价值,总价值

仓位:当前持有的股票代码数量 等相关信息

stock_account也可以查看相关信息

def handle_bar(context,bar_dict):

# 按持仓比例,始终占0.1,有买有卖

order_target_percent(context.s1, 0.10)

order_target_percent("000004.XSHE", 0.10)

# 一旦买入交易之后,投资组合会发生变化

# 资金、仓位

print(context.stock_account) #这种也可以

print("-----")

print(context.portfolio.positions.keys()) #一般使用这种

print(context.portfolio.positions[context.s1].quantity) #持股数量

print("-----")

print("投资组合的可用资金为", context.portfolio.cash)

print("投资组合的市场价值为", context.portfolio.market_value)

print("投资组合的总价值为", context.portfolio.total_value)

结果:

2016-01-04 INFO StockAccount({'daily_pnl': -200295.42416000017, 'margin': 1985482.0, 'positions': ['000004.XSHE', '000001.XSHE'], 'transaction_cost': 1747.2241600000002, 'cash': 7814222.57584, 'type': 'STOCK', 'dividend_receivable': 0, 'total_value': 9799704.57584, 'position_pnl': 0, 'trading_pnl': -198548.2000000002, 'market_value': 1985482.0, 'frozen_cash': 0.0, 'total_cash': 7814222.57584})

2016-01-04 INFO -----

2016-01-04 INFO ['000001.XSHE', '000004.XSHE']

2016-01-04 INFO 88100

2016-01-04 INFO -----

2016-01-04 INFO 投资组合的可用资金为 7814222.57584

2016-01-04 INFO 投资组合的市场价值为 1985482.0

2016-01-04 INFO 投资组合的总价值为 9799704.57584

......

p9 策略的收益指标

视频位置:策略的收益指标

1,策略的评价指标

收益指标

– 回测收益率:(最终总价值-初始总价值)/初始总价值

– 基准收益:参考的标准,市场表现情况作为标准来看我们的策略。默认HS300.

– 年化收益率:平均每年的收益情况,重点看这个。年化一般达到15%~30%较好,当然越高越好。

p10 策略风险指标

视频链接:策略风险指标

1,风险指标

风险指标指的是,在获取收益的时候,承担一些风险。

最大回撤比率:最大回撤最好保持在10%~30%之间,越小越好。

夏普比例:夏普比例越大越好,越大说明单位风险所获得的风险汇报越高。

– 如国债为4%收益,你的收益为16%,波动为5%,那么夏普比例为:(16%-4%)/5%

– 一般要使你的策略达到1.5以上才较好。通常为0.7~1.5

未完待续。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐