基于ta-lib的MA策略。如果当前价格高于MA,买入股票;如果当前价格低于MA,卖出股票。
2. 代码解读:
2.1 ma.ini
- [strategy]
- username=
- password=
- ;回测模式
- mode=4
- td_addr=localhost:8001
- strategy_id=
- ;订阅代码注意及时更新
- subscribe_symbols=SHFE.ag1705.tick,SHFE.ag1705.bar.60
- [backtest]
- start_time=2017-02-15 21:00:00
- end_time=2017-03-07 16:00:00
- ;策略初始资金
- initial_cash=10000000
- ;委托量成交比率,默认=1(每个委托100%成交)
- transaction_ratio=1
- ;手续费率,默认=0(不计算手续费)
- commission_ratio=0.0004
- ;滑点比率,默认=0(无滑点)
- slippage_ratio=0
- price_type=1
- ;基准
- bench_symbol=SHSE.000300
- [para]
- trade_exchange=SHFE
- trade_symbol=ag1705
- window_size=200
- bar_type=60
- tick_size=1
- significant_diff=21
- timeperiod=20
- ##############################################################
- # logger settings
- ##############################################################
- [loggers]
- keys=root
- [logger_root]
- level=DEBUG
- handlers=console,file
- [handlers]
- keys=console,file
- [handler_file]
- class=handlers.RotatingFileHandler
- args=('ma.log','a','maxBytes=10000','backupCount=5')
- formatter=simple
- [handler_console]
- class=StreamHandler
- args = (sys.stdout,)
- formatter=simple
- [formatters]
- keys = simple
- [formatter_simple]
- format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
- datefmt=
3.Python相关函数
3.1 Python标准函数:
功能 | 函数原型 | 参数 | 返回值 | ||
参数名 | 含义 | ||||
join | 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 | 'sep'.join(seq) | sep | 分隔符。可以为空 | 返回一个以分隔符sep连接各个元素后生成的字符串 |
seq | 要连接的元素序列、字符串、元组、字典 | ||||
len | 返回对象(字符、列表、元组等)长度或项目个数。 | len(s) | s | 对象 | 返回对象长度。 |
deque | Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. | deque() | |||
reverse | 用于反向列表中元素 | list.reverse() | 该方法没有返回值,但是会对列表的元素进行反向排序。 | ||
extend | 该方法没有返回值,但是会对列表的元素进行反向排序。 | list.extend(seq) | seq | 元素列表。 | 该方法没有返回值,但会在已存在的列表中添加新的列表内容。 |
append | 用于在列表末尾添加新的对象。 | list.append(obj) | obj | 添加到列表末尾的对象。 | 该方法无返回值,但是会修改原来的列表。 |
asarray | 将输入数据(列表的列表,元组的元组,元组的列表等)转换为矩阵形式 | asarray(a,dtype=None,order=None) | a | 数组形式的输入数据,包括list,元组的list,元组,元组的元组,元组的list和ndarrays | |
dtype | 数据类型由输入数据推导 | ||||
round | round(x [, n]) | x | 数值表达式 | 返回浮点数x的四舍五入值。 | |
n | 数值表达式 |
功能 | 函数原型 | 参数 | 返回值 | |||
参数名 | 类型 | 说明 | ||||
on_bar | 响应Bar事件,收到Bar数据后本函数被调用。 | on_bar(bar) | bar | bar | bar数据 | 无 |
on_tick | 响应Tick事件,收到Tick数据后本函数被调用。 | on_tick(tick) | tick | tick | tick数据 | 无 |
get_positions | 查询当前策略指定symbol(由交易所代码和证券ID组成)和买卖方向的持仓信息。策略类和交易服务类都提供该接口。 | get_position(exchange, sec_id, side); | exchange | string | 交易所代码 | Position对象,持仓信息 |
sec_id | string | 证券代码 | ||||
side | int | 买卖方向 | ||||
open_long | 异步开多仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口 | open_long(exchange, sec_id, price, volume) | exchange | string | 交易所代码, 如上交所SHSE | 委托下单生成的Order对象 |
sec_id | string | 证券代码,如浦发银行600000 | ||||
price | float | 委托价,如果price=0,为市价单,否则为限价单 | ||||
volume | float | 委托量 | ||||
close_short | 异步平空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。 | close_short(exchange, sec_id, price, volume) | exchange | string | 交易所代码, 如上交所SHSE | 返回委托下单生成的Order对象 |
sec_id | string | 证券代码,如浦发银行600000 | ||||
price | float | 委托价,如果price=0,为市价单,否则为限价单 | ||||
volume | float | 委托量 | ||||
close_long | 异步平多仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。 | close_long(exchange, sec_id, price, volume) | exchange | string | 交易所代码, 如上交所SHSE | 委托下单生成的Order对象 |
sec_id | string | 证券代码,如浦发银行600000 | ||||
price | float | 委托价,如果price=0,为市价单,否则为限价单 | ||||
volume | float | 平仓量 | ||||
open_short | 异步开空仓接口,以参数指定的exchange, 证券代码sec_id, 价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。 | open_short(exchange, sec_id, price, volume) | exchange | string | 交易所代码, 如上交所SHSE | 委托下单生成的Order对象 |
sec_id | string | 证券代码,如浦发银行600000 | ||||
price | float | 委托价,如果price=0,为市价单,否则为限价单 | ||||
volume | float | 平仓量 |
4. 金融术语
移动平均线:Moving Average,简称MA,原本的意思是移动平均,由于我们将其制作成线形,所以一般称之为移动平均线,简称均线。它是将某一段时间的收盘价之和除以该周期。 比如日线MA5指5天内的收盘价除以5 。
移动平均线常用线有5天、10天、30天、60天、120天和240天的指标。其中,5天和10天的短期移动平均线,是短线操作的参照指标,称做日均线指标;30天和60天的是中期均线指标,称做季均线指标;120天、240天的是长期均线指标,称做年均线指标。移动平均线的计算方式有多种,最常用而简单的是算术移动平均,又称为简单移动平均(SMA),计算公式为:ma=(c1+c2+....+cn)/n。