来源:掘金量化社区 myquant.cn ,转载请注明出处,谢谢.
简单的基于ta-lib的均线策略示例
策略简介,主要是基于分时线的close线跟MA之间的关系出信号,同时对信号有个简单的过滤逻辑,同时展示了怎么调用gmsdk来做仓位管理。订单管理并没有在代码中体现, 如果需要对委托订单的状态进行跟踪,还需要增加on_order_status函数,用来跟踪订单的执行状态。
策略逻辑: 用分时bar线的收盘价跟ma线之间的交叉关系发出信号,并根据配置做一个简单的信号过滤。 用一个数列配置下单量,在出信号后,根据已有持仓状态确定是否开仓,或者是继续加仓,或者是回调加仓,还是加仓次数达上限后主动平仓出场。
在代码中添加了一些注释,希望有助于阅读。
注: 代码仅为示例,各参数设置和逻辑都不够严谨,切勿直接用于实盘交易。
-
#!/usr/bin/env python
-
# encoding: utf-8
-
-
-
import time
-
from talib.abstract import SMA
-
import numpy as np
-
from collections import deque
-
from gmsdk import *
-
-
# 算法用到的一些常量,阀值,主要用于信号过滤
-
eps =
1e-
6
-
threshold =
0.
235
-
tick_size =
0.
2
-
half_tick_size = tick_size /
2
-
significant_diff = tick_size *
2.6
-
-
class MA(StrategyBase):
-
-
""
" strategy example1: MA decision price cross long MA, then place a order, temporary reverse trends place more orders "
""
-
-
def __init__(self, *args, **kwargs):
-
#import pdb; pdb.set_trace()
-
super(MA,
self).__init_
_(*args, **kwargs)
-
# 策略初始化工作在这里写,从外部读取静态数据,读取策略配置参数等工作,只在策略启动初始化时执行一次。
-
-
# 从配置文件中读取配置参数
-
self.exchange =
self.config.get(
"para",
"trade_exchange")
-
self.sec_id =
self.config.get(
"para",
"trade_symbol")
-
self.symbol =
".".join([
self.exchange,
self.sec_id])
-
self.last_price =
0.
0
-
self.trade_unit = [
1.0,
2.0,
4.0,
8.0,
5.0,
3.0,
2.0,
1.0,
1.0,
0.
0]
## [8.0, 4.0, 2.0, 1.0]
-
self.trade_count =
0
-
self.trade_limit = len(
self.trade_unit)
-
self.window_size =
self.config.getint(
"para",
"window_size")
or
60
-
self.timeperiod =
self.config.getint(
"para",
"timeperiod")
-
self.bar_type =
self.config.getint(