声明:
1.本文策略源码均来自掘金量化示例策略库,仅供参考!
2.由于雪球编辑器不支持python语言,源码可能存在格式错误,请自行修正。
RSRS斜率python策略源码:
from __future__ import print_function, absolute_import
from gm.api import *
import statsmodels.api as sm
import numpy as np
def init(context):
#设置参数
context.N=18
context.M=3600
context.ans=[]
#获取历史数据及历史斜率
prices = history_n(symbol='SHSE.000300', frequency='1d', count=context.M, end_time='2014-01-01', fields='high,low',skip_suspended=True,
fill_missing=None,adjust=ADJUST_PREV,df=True)
highs = prices.high
lows = prices.low
context.ans = []
for i in range(len(highs))[context.N:]:
data_high = highs.iloc[i - context.N + 1:i + 1]
data_low = lows.iloc[i - context.N + 1:i + 1]
X = sm.add_constant(data_low)
model = sm.OLS(data_high, X)
results = model.fit()
context.ans.append(results.params[1])
mu=np.mean(context.ans)
sigama=np.std(context.ans)
#求阈值
context.buy=mu+sigama
context.sell=mu-sigama
schedule(schedule_func=algo, date_rule='1d', time_rule='09:40:00')
def algo(context):
# 获取上一个交易日的日期
last_day = get_previous_trading_date(exchange='SHSE', date=context.now)
#计算前一日的RSRS斜率
prices = history_n(symbol='SHSE.000300', frequency='1d', count=context.N, end_time=last_day, fields='', skip_suspended=True,
fill_missing=None, adjust=ADJUST_PREV, adjust_end_time='', df=True)
#做回归计算
highs = prices.high
lows = prices.low
X = sm.add_constant(lows)
model = sm.OLS(highs, X)
results = model.fit().params[1]
if results > context.buy:
order_target_percent(symbol='SHSE.000300', percent=1, order_type=OrderType_Market,
position_side=PositionSide_Long)
if results < context.sell:
order_close_all()
if __name__ == '__main__':
run(strategy_id='73bb5bf2-a536-11e8-bd52-9cd21ef04ea9',
filename='789.py',
mode=MODE_BACKTEST,
token='c395247a76e8a5caeee699d668d6f550213bc418',
backtest_start_time='2014-01-01 08:00:00',
backtest_end_time='2018-01-01 16:00:00',
backtest_adjust=ADJUST_PREV,
backtest_initial_cash=10000000,
backtest_commission_ratio=0,
backtest_slippage_ratio=0)
关联阅读:阻力支撑的新视角