本文为“小黎说财经”原创文章,转载需获得同意,并在显要位置标明文章来源。

关注小黎的朋友们大家好!

今后本公众号将会陆续推送一些基于tqsdk(天勤)编译的程序化交易策略。今天推送的是"基于均线交叉与通道突破相结合的交易系统"。

策略的基本原理

首先根据K线的历史数据构建短周期和长周期(快、慢)均线,进一步再使用N个周期内的最高、最低点构建大、小价格通道。当快慢均线形成金叉且当前价格突破大通道上轨的时候是为做多信号,买入。当快慢均线形成死叉且当前价格突破大通道下轨时候视为做空信号,卖出。之后价格再次突破小通道上/下轨是为加仓信号,再次进场。持仓后价格跌破/上涨小通道的下/上轨时出场。等待下一次均线交叉和通道突破。

核心逻辑

以均线的金叉死叉判断行情走势,以N根K线的高低价确定关键阻力/压力位,均线交叉结合关键价位的突破,后面行情往往都会走出一段趋势。

代码实现步骤

-核心逻辑的实现

获取历史K线数据后,只要每产生一根新的K线,我们就要计算一次快/慢均线和各种阻力/压力的值,所以我们需要封装一个函数,让我们每次接收到新的K线数据的时候能够判断上述的各种值。

def calculate_indexes(klines,chLen=12,fastLen=9,slowLen=18,reEntryChLen=10,trailBar=8):

"""

传入一个天勤的K线对象,返回策略所需各种指标的值,其中除了klines参数外均为各种指标的参数值

所需的K线不包括最新产生的K线,思考一下为什么?

"""

close = klines['close'][:-1] #获取K线收盘价序列

high = klines['high'][-(chLen + 1): -1] #获取K线最高价序列

low = klines['low'][-(chLen + 1): -1] #获取K线最低价序列

fastMa = close[-fastLen:].mean() #计算快速均线的值

slowMa = close[-slowLen:].mean() #计算慢速均线的值

HH_12 = max(high) #N1根K线的最高点

HH_10 = max(high[-reEntryChLen:]) #N2根K线的最高点

HH_8 = min(high[-trailBar:]) #N3根K线最高点

LL_12 = min(low) #N1根K线最低点

LL_10 = min(low[-reEntryChLen:]) #N2根K线最低点

LL_8 = min(low[-trailBar:]) #N3根K线最低点

return fastMa,slowMa,HH_12,HH_10,HH_8,LL_12,LL_10,LL_8

-交易规则设置

'''

多头部分

'''

#如果均线金叉

if fastMa > slowMa:

#且当前K线最高价突破前12根K线最高点一定幅度

if klines.iloc[-1].high > HH_12 * (1 + extraPercentage):

#开多仓

targetPos.set_target_volume(initalLots)

'''

空头部分

'''

#如果均线死叉

if fastMa < slowMa:

#且当前K线最低价突破前12根K线最低点一定幅度

if klines.iloc[-1].low < LL_12 * (1 - extraPercentage):

#开空仓

targetPos.set_target_volume(-initalLots)

'''

加仓、平仓部分

'''

#如果多头持仓

if position.pos_long > 0:

#且当前K线最低点小于前8根K线最低点

if klines.iloc[-1].low < LL_8:

#平仓

targetPos.set_target_volume(0)

#且取最近25根K线,新的15根K线最高点大于旧的10根K线最高点

elif newHH_15 > oldHH_10:

#加多仓

targetPos.set_target_volume(initalLots+reEntryLots)

#如果空头持仓

if position.pos_short > 0:

#且当前K线最高点大于前8根K线最高点

if klines.iloc[-1].high > HH_8:

#平仓

targetPos.set_target_volume(0)

#且取最近25根K线,新的15根K线最低点小于旧的10根K线最低点

elif newLL_15 < oldLL_10:

#加空仓

targetPos.set_target_volume(-initalLots-reEntryLots)

-框架构建

想要策略能够跑起来,必须按照Python基本语法将天勤量化框架搭建起来。

万事第一步,导入python库。

from tqsdk import TqApi,TargetPosTask

接着创建策略所需变量

exchangeId = 'SHFE'

instrumentId = 'rb2005'

symbol = exchangeId + '.' + instrumentId #交易标的

fastLen = 9 # 快速均线周期数

slowLen = 18 # 慢速均线周期数

chLen = 12 # 通道突破的周期数

extraPercentage = 0.001 # 通道突破的幅度(百分比)

trailBar = 8 # 多少根 Bar 的最低价作为跟踪止损价

initalLots = 1 # 初始进场头寸

reBars = 15 # 再进场必须在出厂后多少根 Bar内

reEntryChLen = 10 # 再进场通道突破的周期数

reEntryLots = 1 # 再进场头寸

创建api、K线、持仓、下单(调仓)实例

api = TqApi()

klines = api.get_kline_serial(symbol=symbol,duration_seconds=86400)

position = api.get_position(symbol=symbol)

targetPos = TargetPosTask(api,symbol)

必不可少的一步:接收行情数据

api.wait_update()

使用循环让规则运行

while True:

api.wait_update()

if api.is_changing(klines):

交易规则

-回测效果

总结

从回测中来看,策略在不设置止盈止损的前提下策略依旧取得了正向的收益以及较高的盈亏比,趋势判断的思路值得借鉴。如果设置止盈止损,策略的效果可能会有所折扣,这也从一个侧面说明了趋势类策略要求较大的承受亏损的能力,因为在趋势走势中行情也是会有所反复的。

回测完整版代码

from tqsdk import TqApi,TargetPosTask,TqBacktest

from datetime import date

exchangeId = 'SHFE'

instrumentId = 'rb2005'

symbol = exchangeId + '.' + instrumentId #交易标的

fastLen = 9 # 快速均线周期数

slowLen = 18 # 慢速均线周期数

chLen = 12 # 通道突破的周期数

extraPercentage = 0.001 # 通道突破的幅度(百分比)

trailBar = 8 # 多少根 Bar 的最低价作为跟踪止损价

initalLots = 1 # 初始进场头寸

reBars = 15 # 再进场必须在出厂后多少根 Bar内

reEntryChLen = 10 # 再进场通道突破的周期数

reEntryLots = 1 # 再进场头寸

api = TqApi(backtest=TqBacktest(start_dt=date(2019, 10, 1), end_dt=date(2020, 2, 16)),web_gui=True)

klines = api.get_kline_serial(symbol=symbol,duration_seconds=86400)

position = api.get_position(symbol=symbol)

targetPos = TargetPosTask(api,symbol)

def calculate_indexes(klines,chLen=12,fastLen=9,slowLen=18,reEntryChLen=10,trailBar=8):

"""

传入一个天勤的K线对象,返回策略所需各种指标的值,其中除了klines参数外均为各种指标的参数值

所需的K线不包括最新产生的K线,思考一下为什么?

"""

close = klines['close'][:-1] #获取K线收盘价序列

high = klines['high'][-(chLen + 1): -1] #获取K线最高价序列

low = klines['low'][-(chLen + 1): -1] #获取K线最低价序列

fastMa = close[-fastLen:].mean() #计算快速均线的值

slowMa = close[-slowLen:].mean() #计算慢速均线的值

HH_12 = max(high) #N1根K线的最高点

HH_10 = max(high[-reEntryChLen:]) #N2根K线的最高点

HH_8 = min(high[-trailBar:]) #N3根K线最高点

LL_12 = min(low) #N1根K线最低点

LL_10 = min(low[-reEntryChLen:]) #N2根K线最低点

LL_8 = min(low[-trailBar:]) #N3根K线最低点

return fastMa,slowMa,HH_12,HH_10,HH_8,LL_12,LL_10,LL_8

while True:

api.wait_update()

if api.is_changing(klines):

fastMa,slowMa,HH_12,HH_10,HH_8,LL_12,LL_10,LL_8 = calculate_indexes(klines,chLen,fastLen,slowLen,reEntryChLen,trailBar)

'''

取25根K线为一个周期,计算前10根K线和后15根K线的高低点,以此为再进场的依据

思考一下,为什么在这里又要取最新一根K线

'''

newHH_15 = max(klines.iloc[-15:].high) #后15根K线高点

oldHH_10 = max(klines.iloc[-25:-15].high) #前10根K线高点

newLL_15 = min(klines.iloc[-15:].low) #后15根K线的低点

oldLL_10 = min(klines.iloc[-25:-15].low) #前10根K线低点

'''

多头部分

'''

#如果均线金叉

if fastMa > slowMa:

#且当前K线最高价突破前12根K线最高点一定幅度

if klines.iloc[-1].high > HH_12 * (1 + extraPercentage):

#开多仓

targetPos.set_target_volume(initalLots)

'''

空头部分

'''

#如果均线死叉

if fastMa < slowMa:

#且当前K线最低价突破前12根K线最低点一定幅度

if klines.iloc[-1].low < LL_12 * (1 - extraPercentage):

#开空仓

targetPos.set_target_volume(-initalLots)

'''

加仓、平仓部分

'''

#如果多头持仓

if position.pos_long > 0:

#且当前K线最低点小于前8根K线最低点

if klines.iloc[-1].low < LL_8:

#平仓

targetPos.set_target_volume(0)

#且取最近25根K线,新的15根K线最高点大于旧的10根K线最高点

elif newHH_15 > oldHH_10:

#加多仓

targetPos.set_target_volume(initalLots+reEntryLots)

#如果空头持仓

if position.pos_short > 0:

#且当前K线最高点大于前8根K线最高点

if klines.iloc[-1].high > HH_8:

#平仓

targetPos.set_target_volume(0)

#且取最近25根K线,新的15根K线最低点小于旧的10根K线最低点

elif newLL_15 < oldLL_10:

#加空仓

targetPos.set_target_volume(-initalLots-reEntryLots)

写在最后

如果您不知道如何在电脑上部署实现天勤量化的Python环境、想获取完整版的py代码文件、或者您有交易经验和想法却又不知道如何实现,又或者您想学习Python量化投资课程……

不论您有各种迫切的需求,请撩小黎⬇️

本文为“小黎说财经”原创文章,转载需获得同意,并在显要位置标明文章来源。

文章作者:小黎说财经

公众号设计/排版:宁晴

参考资料:米筐社区作者NeXT丶杨宗纬《【基石策略】第一期:基于均线交叉与通道突破相结合的交易系统》,原文地址:https://www.ricequant.com/community/topic/3823//2

python 天勤 金叉 编程代码_基于tqsdk(天勤)编译的均线交叉与通道突破相结合的交易系统...相关推荐

  1. python 天勤 金叉 编程代码_GitHub - Oscar201106/tqsdk-python: 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易...

    TqSdk 天勤量化交易策略程序开发包 TqSdk 是一个由信易科技发起并贡献主要代码的开源 python 库. 依托快期多年积累成熟的交易及行情服务器体系, TqSdk 支持用户使用极少的代码量构建 ...

  2. python 天勤 金叉 编程代码_Python量化交易工具之#39;自适应#39;跟踪止盈算法,进阶必看!...

    点及财经,股票期货专业投机者. 这期文章,作者主要给大家分享,如何用Python 代码编写双均线策略,然后在策略中采用加速算法跟踪止盈作为出场方式,并回测. 前言 俗话说,会买的是徒弟,会卖的是师父, ...

  3. python天勤金叉编程代码大全_天勤终端数据解决方案

    作者:金属成色 目录 环境准备 如果没有安装vn.py最新发行版(这里默认为vnpy-1.7.1).MongoDB.Anaconda.PyCharm软件,请参照右边'环境安装'教程. 对于天勤数据解决 ...

  4. python天勤金叉编程代码大全_这些Python编程黑科技,装逼指南,高逼格代码,让你惊叹不已...

    1.单行写一个评级组件 "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);定义一个变量rate是1到5的值,然后执行上面代码,看图 才发现插件什么的都 ...

  5. python 天勤 金叉 编程代码_Python量化策略开发框架,固定的套路、突破策略的福音...

    点及财经,股票期货专业投机者. Python量化策略开发框架,固定的套路.突破策略的福音-1.jpg (45.43 KB, 下载次数: 0) 2020-12-29 20:10 上传 前言 策略的触发方 ...

  6. python好看图案的编程代码_利用Python绘制了一些有意思的图案

    下载W3Cschool手机App,0基础随时随地学编程导语 花了点时间利用Python绘制了一些有意思的图案,也算是发掘了一下Python的可视化功能吧... PS: 部分图案参考了一些博客的一部分源 ...

  7. python爬取素材图片代码_基于Python爬取素材网站音频文件

    基本环境配置 python 3.6 pycharm requests parsel 相关模块pip安装即可 目标网页 请求网页 import requests url = 'https://www.t ...

  8. python好看图案的编程代码_只需15行Python代码,实现图像定位功能

    引言本教程使用的环境:Windows 10 + Python 3.6 数据源:The Oxford-IIIT Pet Dataset 需要的第三方库:import tensorflow as tf i ...

  9. python猜谜语小游戏代码_树莓派趣学实战100例--网络应用+Python编程+传感器+服务器搭建...

    导语 内容提要 本书是面向第4代树莓派(Raspberry Pi4B)的全新实战指南.树莓派(Raspberry Pi)是一款价格低廉.只有一张信用卡大小的计算机.然而麻雀虽小,却五脏俱全,树莓派是一 ...

  10. 编写python手机充值代码_基于Python的天聚人合加油卡充值接口调用代码实例

    一.接口申请开通 本代码是基于天聚人合的话费充值API实现的话费充值功能,使用前需要: 通过https://www.tianjurenhe.com/docs/api/?id=1申请开通话费接口服务. ...

最新文章

  1. 送一台高清航拍无人机
  2. 计算机视觉编程——图像分割
  3. 【Object类、日期、StringBuilder】
  4. lsof查看占用高_查看端口占用情况lsof,并关闭对应进程kill
  5. 50 【Go版本变化】
  6. HTML如何添加锚点,分享一点面试小经验
  7. 020-Spring Boot 监控和度量
  8. jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...
  9. 安卓mysql修改_手动修改Android数据库数据
  10. 设计一个完善可用的服务框架
  11. UWA周年庆,福利分发,免费赠送专业版性能报告!
  12. html转word 图片格式,html转word处理图片 java
  13. CAD测量图纸时数据显示不出来怎么办?
  14. 搜索引擎的排序技术综述
  15. Linux4步快速搭建DNS服务器
  16. H5跳转微信公众号解决方案
  17. keystore生成自签名证书
  18. Vue 实现华视身份证读卡器功能
  19. 防saq注入_SAQ-TZh-025 危险源辨识、风险评价和风险控制措施表(003施工电源及用电设备)...
  20. 虎年屠虎:巨亏下的IPO,你也太虎了吧

热门文章

  1. java 合并pdf_用iText分割和合并pdf文件
  2. 锁定计算机和睡眠有什么区别,电脑系统待机、睡眠和休眠的区别有哪些
  3. 典型企业设备链路冗余备份方案
  4. 掘进机数字孪生,掘进机远程智能控制
  5. 计算机辅储存器有什么,计算机辅存储器包括
  6. Docker学习中文文档大全、dockerdocker-compose实战
  7. 扬帆际海:shopee跨境电商客服回复流程
  8. np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
  9. app能不能跳转外部h5_uni-app微信小程序跳转外部H5链接
  10. kibana 查看有多少索引库_广州谷歌SEO优化外包一年多少钱