编辑 | Cowboy

校对 | 李明

来源 | 牛角财经

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

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

前言

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

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

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

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

01

策略原理

1.开仓:

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

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

2.平仓:

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

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

02

策略编写

1.设置参数和变量

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

code:

"------------------------------------""牛角财经-官方策略案列:GhostTrader""声明:未经允许,代码切勿用于任何商业用途,否则将追究一切尽可能的法律责任!""来源:牛角财经""编辑:cowboy""------------------------------------"from tqsdk import TqApi,TqSim,TqBacktest,TargetPosTask,tafuncfrom datetime import datefrom datetime import timedeltafrom tqsdk.ta import EMA,RSIclass GhostTrader():    "GhostTrader-幽灵交易模型"    def __init__(self,symbol = "SHFE.rb2005"):        self.api = TqApi(TqSim(),backtest =TqBacktest(start_dt=date(2019,12,1),end_dt=date(2020,3,2)),web_gui=True) # 回测账户、区间设置        self.symbol = symbol        self.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、及唐奇安通道。

def set_vars(self):        self.AvgValue1 = EMA(self.kline, self.FastLength)['ema'] #        self.AvgValue2 = EMA(self.kline, self.SlowLength)['ema'] # RSI        self.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):        while self.Position_flag == 0:            self.api.wait_update()            if self.api.is_changing(self.kline.iloc[-1],'datetime'):                self.set_vars()                self.set_info()            if self.api.is_changing(self.qoute,'last_price'):                if self.AvgValue1.iloc[-2] > self.AvgValue2.iloc[-2] and self.RSIValue.iloc[-2] < self.OverBought and self.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                    "开多"                    if self.buy_Profit < 0:                        print("前一笔多单-------------------亏损")                        self.target_pos.set_target_volume(1)                    else:                        print("前一笔多单没有亏损")                elif self.AvgValue1.iloc[-2] < self.AvgValue2.iloc[-2] and self.RSIValue.iloc[-2] > self.OverSold and self.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                    "开空"                    if self.sell_Profit < 0:                        print("前一笔空单-------------------亏损")                        self.target_pos.set_target_volume(-1)                    else:                        print("前一笔空单没有亏损")

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

03

策略回测

品种:rb2005

周期:1小时

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

回测结果:

04

总结

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

(天勤量化官网)

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

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

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

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

近期原创

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

  1. 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)

    实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...

  2. python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书

    如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...

  3. 支持python的交易软件_能用python的期货交易软件,期货量化交易软件哪个好

    Q1:期货量化交易软件哪个好 这种问题怎么回答,会被屏蔽的 市场还是有很多的,中金.和讯.同花顺.期获宝.新浪期货等,都有,自己去分别体验下 Q2:只为了自己遍自己用的炒期货软件,学Python还是C ...

  4. 随机森林模型_量化策略——短周期、单期货品种的随机森林预测模型

    在前一篇"期货学习量化学习策略--随机森林模型"一文中(链接:https://mp.weixin.qq.com/s/IhcVZ9D-3cmB1GaAFinboQ),我们尝试了长周期 ...

  5. python计算均方根误差_如何在Python中创建线性回归机器学习模型?「入门篇」

    线性回归和逻辑回归是当今很受欢迎的两种机器学习模型. 本文将教你如何使用 scikit-learn 库在Python中创建.训练和测试你的第一个线性.逻辑回归机器学习模型,本文适合大部分的新人小白. ...

  6. python股票交易模型_如何用Python建模GGM模型并对股票估值?

    内容首发 乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech 用代码理解分析解决金融问题 首先我们快速了解一下什么是GGM模型. GGM模型又叫做"戈登增长模 ...

  7. python建立分析模型_《利用Python进行数据分析》13.2 使用Patsy创建模型描述

    第十三章 Python建模库介绍 13.2 使用Patsy创建模型描述 Patsy(https://patsy.readthedocs.io/)是一个用于描述统计模型(尤其是线性模型)的Python库 ...

  8. 用python做股票智能投顾模型_如何用Python建模GGM模型并对股票估值?

    内容首发 乐学偶得(http://lexueoude.com) 公众号: 乐学Fintech 用代码理解分析解决金融问题 首先我们快速了解一下什么是GGM模型. GGM模型又叫做"戈登增长模 ...

  9. python ctm 关联主题模型_面向特定划分的主题模型的设计与实现

    面向特定划分的主题模型的设计与实现 * 周凯文,杨智慧,马会心,何震瀛,荆一楠 + ,王晓阳 [摘 要] 利用主题模型对文本数据进行处理.分析在如今的数据挖掘领域应用 十分广泛,其中 LDA ( la ...

  10. 华泰证券 python 自动交易_怎样用 Python 写一个股票自动交易的程序?(不包含交易算法)?...

    前言 股票或期货的价格波动,总会有一些可以规律可以遵循的.其中,"背离"也算是其中的一种,并且可以作为判断趋势结束或阶段调整的预警信号. 通常情况下,我们所说的"背离&q ...

最新文章

  1. 未来十年是AI的黄金发展期
  2. linux shell read 从键盘或标准输入中读取文本
  3. android自动更新列表,Android数据库表结构自动升级
  4. Linux命令详解-mkdir
  5. jquery.validate动态更改校验规则
  6. Python实现样本类别的可视化(绘制饼图,展示各类别样本的比例)
  7. Git过程中遇到Enter passphrase for key '/c/Users/XXX/.ssh/id_rsa':
  8. 每日一题-12.30-三态数据总线
  9. idea切换工作空间_IDEA中如何在一个工作空间中管理多个项目
  10. php微信公众平台关注后欢迎语的设置,关注公众号的欢迎语怎么设置?公众号欢迎语怎么加链接?...
  11. 太飒了!这届乘风破浪的 IT 女神写得了代码、撕得掉年龄、跨得过行业!
  12. 文献综述是什么,该怎么写?
  13. Python与Julia结合使用的个人经验
  14. VBox 启动虚拟机失败 - NtCreateFile
  15. Spring 官方文档(中文翻译)
  16. Unity3D教程:手游开发常用排序算法 -下
  17. H3C恢复console登录密码
  18. 复旦微的FMQL10S400ZYNQ芯片的多核操作
  19. Ubuntu下点阵汉字的字模读取与显示
  20. postgresql Count estimate

热门文章

  1. swagger-ui多端口自动切换优化
  2. Hbase与传统关系型数据库对比
  3. 《机电传动控制》第三次作业
  4. How To Search and Restore files from Site Collection Recycle Bin
  5. linux pptp服务器安装
  6. Red5java.util.concurrent.RejectedExecutionExceptio
  7. 关于URL路径的基本使用
  8. jQuery简单好用的JavaScript代码库略解使用
  9. 此笔记只作为自身笔记,结构比较混乱,不建议参考,如有需要请访问其他文献,servlet的基础知识和使用
  10. JUC主要包含哪些功能?