视频:4天学会python机器学习与量化交易
平台:米筐
4天学会python机器学习与量化交易,肯定是不可能的,最多入个门。
学习原因:
1,讲在线策略,免去本地搭建环境,下载数据等琐事。
2,主要讲A股交易,和有的量化资料不一样(讲期权),有实用价值。
3,讲的比较简单,适合入门。
2020.2.12 开始学习,之前没学过,看看要多久看完并学会,立个flag。
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')
要将右边时间选项修改为“分钟”。
获取财务数据与定时器
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)
运行顺序:
投资组合与交易
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,限价单,市价单
3,投资组合 portfoilo
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
......
视频位置:策略的收益指标
1,策略的评价指标
视频链接:策略风险指标
1,风险指标
未完待续。