700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python 量化模型_量化策略 | Python tqsdk — GhostTrader模型!(附代码)

python 量化模型_量化策略 | Python tqsdk — GhostTrader模型!(附代码)

时间:2019-10-10 13:33:31

相关推荐

python 量化模型_量化策略 | Python tqsdk — GhostTrader模型!(附代码)

编辑 | Cowboy

校对 | 李明

来源 | 牛角财经

目的 |量化策略 | Python tasdk — GhostTrader模型!(附代码)

本文将分享,量化策略 | Python tasdk — GhostTrader模型!(附代码)文章及策略代码仅用于学习交流,切勿用于任何商业用途。否则将追究一切竟可能的法律责任!

前言

GhostTrader (幽灵交易策略),其开仓原理非常简单,其核心原理:以最新一笔交易的盈亏作为是否进行下一笔交易。其实,行情的走势大致可以分为趋势和震荡,趋势过后大概率会遭遇震荡;而震荡久了之后大概率会出现趋势行情。

作者认为,原作者的思路很可能就是抓住此特征而编写的。这样写有什么好处?试想,如果目前正是震荡,那么策略很可能会遭遇反复止损,将模型的试错成本降到最低。而采用这种方法,优点是可以大大降低在震荡期间反复的止损次数,当然缺点那就是会遗漏掉某些大行情。没有办法,必须接受策略的“不完美”!

原理大致如下:连亏3比开仓,直到盈利一笔后停止,期间每亏损一次仓位就+1手。策略主要是以前3笔亏损视为震荡,将模型的试错成本降到最低。

而策略并没有用什么高深算法,只采用两条均线来测试。结果却让人惊讶!我想这就是类似这种思路的初衷吧。

01

策略原理

1.开仓:

(1)前一笔多单亏损,MA1>MA2,RSIValue=前一根最高价。开多

(2)前一笔空单亏损,MA1超卖,最低价<=前一根最低价。开空

2.平仓:

(1)最低价<=唐奇安通道下轨,平多。

(2)最高价>=唐奇安通道上轨,平空。

02

策略编写

1.设置参数和变量

我们的回测时间设置为-12-01 — -03-02。

code:

"------------------------------------""牛角财经-官方策略案列:GhostTrader""声明:未经允许,代码切勿用于任何商业用途,否则将追究一切尽可能的法律责任!""来源:牛角财经""编辑:cowboy""------------------------------------"from tqsdk import TqApi,TqSim,TqBacktest,TargetPosTask,tafuncfrom datetime import datefrom datetime import timedeltafrom tqsdk.ta import EMA,RSIclassGhostTrader():"GhostTrader-幽灵交易模型"def__init__(self,symbol = "SHFE.rb"):self.api = TqApi(TqSim(),backtest =TqBacktest(start_dt=date(,12,1),end_dt=date(,3,2)),web_gui=True) # 回测账户、区间设置self.symbol = symbolself.kline = self.api.get_kline_serial(self.symbol,60*60,200) # k线数据self.qoute = self.api.get_quote(symbol=self.symbol) # 最新价self.target_pos = TargetPosTask(self.api, self.symbol) # 目标持仓self.FastLength = 9# 短期指数平均线参数self.SlowLength = 19# 长期指数平均线参数self.Length = 9# RSI参数self.OverSold = 30# 超卖self.OverBought = 70# 超买self.AvgValue1 = 0# 短期指数平均线self.AvgValue2 = 0# 长期指数平均线self.Band_length = 20# RSI参数self.ExitHiBand = 0# 唐奇安通道上轨self.ExitLoBand = 0# 唐奇安通道下轨self.buy_EntryPrice = 0# 多头进场价格self.buy_ExitPrice = 0# 多头出场价格self.buy_Profit = 0# 多头利润self.sell_EntryPrice = 0# 空头进场价格self.sell_ExitPrice = 0# 空头出场价格self.sell_Profit = 0# 空头利润self.Position_flag = 0# 多空标志

2.模型开平仓的数值计算。

计算出MA1、MA2、RSI、及唐奇安通道。

defset_vars(self):self.AvgValue1 = EMA(self.kline, self.FastLength)['ema'] #self.AvgValue2 = EMA(self.kline, self.SlowLength)['ema'] # RSIself.RSIValue = RSI(self.kline, self.Length)['rsi'] # RSI"通道上轨:前N个交易日的最高价"self.ExitHiBand = max(self.kline.high[-self.Band_length - 1:-1])"通道下轨:前N个交易日的最低价"self.ExitLoBand = min(self.kline.low[-self.Band_length - 1:-1])

3.信息打印。

def set_info(self):"开仓指标数据"print("----------------------")print("RSIValue:", self.RSIValue.iloc[-2])print("AvgValue1:", self.AvgValue1.iloc[-2])print("AvgValue2:", self.AvgValue2.iloc[-2])print("ExitHiBand:", self.ExitHiBand)print("ExitLoBand:", self.ExitLoBand)

4.开仓函数

code:

def entry(self):whileself.Position_flag == 0:self.api.wait_update()ifself.api.is_changing(self.kline.iloc[-1],'datetime'):self.set_vars()self.set_info()ifself.api.is_changing(self.qoute,'last_price'):ifself.AvgValue1.iloc[-2] > self.AvgValue2.iloc[-2] andself.RSIValue.iloc[-2] < self.OverBought andself.qoute.last_price > self.kline.high.iloc[-2]:self.buy_EntryPrice = max(self.kline.high.iloc[-2],self.kline.open.iloc[-1])self.Position_flag = 1"开多"ifself.buy_Profit < 0:print("前一笔多单-------------------亏损")self.target_pos.set_target_volume(1)else:print("前一笔多单没有亏损")elif self.AvgValue1.iloc[-2] < self.AvgValue2.iloc[-2] andself.RSIValue.iloc[-2] > self.OverSold andself.qoute.last_price < self.kline.low.iloc[-2]:self.sell_EntryPrice = min(self.kline.low.iloc[-2],self.kline.open.iloc[-1])self.Position_flag = -1"开空"ifself.sell_Profit < 0:print("前一笔空单-------------------亏损")self.target_pos.set_target_volume(-1)else:print("前一笔空单没有亏损")

5.平仓函数,相对简单点。

03

策略回测

品种:rb

周期:1小时

区间:-12-01 — -03-02。

回测结果:

04

总结

分享的每一个策略,都有其核心的部分。学习并转化为自己的东西,融入到自己的模型中去!至此,已经将整个策略分享给大家了。

(天勤量化官网)

如对您有帮助,感谢分享和在看

粉丝可添加牛角财经官方群:

牛角财经-量化交易群4:975923183

如需文章案例代码,微信关注:‘牛角财经’,回复文章标题,即可领取!

近期原创

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。