返回顶部
首页 > 资讯 > 精选 >VNPY基于SAR和肯特纳的交易策略是怎样的
  • 888
分享到

VNPY基于SAR和肯特纳的交易策略是怎样的

2023-06-02 12:06:03 888人浏览 独家记忆
摘要

VNPY基于SAR和肯特纳的交易策略是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一个比较简单策略,主要是为了验证SAR出场指标的;然后和可以结合其他下单值,做的一

VNPY基于SAR和肯特纳的交易策略是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一个比较简单策略,主要是为了验证SAR出场指标的;然后和可以结合其他下单值,做的一个简单组合。只是用来测试

入场指标,cci,如果cci大于0,多头,cci小于0空头。下阻止单,金额就是Kelter上下轨。多头买入价格是通道上轨。空头买入价格是通道下轨。
出场指标,这里出场和入场适用不同周期的k线,因为这样可以更灵活跑回测。SAR价格作为卖出价格,开阻止单,如果触及SAR价格卖出。
先在class ArrayManager() 加入sar方法。当然最好还是继承新增。

点击(此处)折叠或打开

  1. def sar(self, acceleration = 0.02, maximum = 0.2, array =False):

  2.         """sar"""

  3.         real = talib.SAR(self.high,self.low, acceleration= acceleration,maximum = maximum)

  4.         if array:

  5.             return real

  6.         return real[-1]


然后创建策略。

点击(此处)折叠或打开

  1. # encoding: UTF-8

  2. from __future__ import division

  3. from vnpy.trader.vtObject import VtBarData

  4. from vnpy.trader.vtConstant import EMPTY_STRING

  5. from vnpy.trader.app.ctaStrategy.ctaTemplate import (CtaTemplate,

  6.                                                      BarGenerator,

  7.                                                      ArrayManager)

  8. ########################################################################

  9. class SARKELStrategy(CtaTemplate):

  10.     """基于sar and Keltner 交易策略"""

  11.     className = 'SARKELStrategy'

  12.     author = u'BillyZhang'

  13.     # 策略参数

  14.     sarAcceleration = 0.02 #加速线

  15.     sarMaximum = 0.2    #

  16.     cciWindow = 20  # CCI窗口数

  17.     keltnerWindow = 25  # keltner窗口数

  18.     keltnerlMultiplier = 6.0  # 乘数

  19.     initDays = 10  # 初始化数据所用的天数

  20.     fixedSize = 1  # 每次交易的数量

  21.     barMins = 15

  22.     barMinsClose = 10

  23.     # 策略变量

  24.     sarValue = 0  # sar指标数值

  25.     cciValue = 0  # CCI指标数值

  26.     keltnerup = 0

  27.     keltnerdown = 0

  28.     longStop = 0  # 多头止损

  29.     shortStop = 0  # 空头止损

  30.     # 参数列表,保存了参数的名称

  31.     paramList = ['name',

  32.                  'className',

  33.                  'author',

  34.                  'vtSymbol',

  35.                  'sarAcceleration',

  36.                  'sarMaximum',

  37.                  'cciWindow',

  38.                  'keltnerWindow',

  39.                  'keltnerlMultiplier',

  40.                  'initDays',

  41.                  'fixedSize',

  42.                  'barMinsClose',

  43.                  'barMins']

  44.     # 变量列表,保存了变量的名称

  45.     varList = ['inited',

  46.                'trading',

  47.                'pos',

  48.                'sarValue',

  49.                'cciValue',

  50.                'atrValue',

  51.                'intraBarHigh',

  52.                'intraBarLow',

  53.                'longStop',

  54.                'shortStop']

  55.     # 同步列表,保存了需要保存到数据库的变量名称

  56.     syncList = ['pos',

  57.                 'intraTradeHigh',

  58.                 'intraTradeLow']

  59.     # ----------------------------------------------------------------------

  60.     def __init__(self, ctaEngine, setting):

  61.         """Constructor"""

  62.         super(SARKELStrategy, self).__init__(ctaEngine, setting)

  63.         self.bg = BarGenerator(self.onBar, self.barMins, self.onXminBar) # 创建K线合成器对象

  64.         self.am = ArrayManager()

  65.         self.bGClose = BarGenerator(self.onBar, self.barMinsClose, self.onminBarClose)

  66.         self.amClose = ArrayManager()

  67.     # ----------------------------------------------------------------------

  68.     def onminBarClose(self, bar):

  69.         """分钟作为清仓周期"""

  70.         # 如果没有仓位,那么不用care,直接skip

  71.         # 保存K线数据

  72.         amClose = self.amClose

  73.         amClose.updateBar(bar)

  74.         if not amClose.inited:

  75.             return

  76.         # 计算指标数值

  77.         self.sarValue = amClose.sar(self.sarAcceleration,self.sarMaximum)

  78.         # 判断是否要进行交易

  79.         if self.pos == 0:

  80.             return

  81.         # 当前无仓位,发送开仓委托

  82.         # 持有多头仓位

  83.         elif self.pos > 0:

  84.             self.cancelAll()

  85.             self.sell(self.sarValue, abs(self.pos), True)

  86.         # 持有空头仓位

  87.         elif self.pos < 0:

  88.             self.cancelAll()

  89.             self.cover(self.sarValue, abs(self.pos), True)

  90.         # 同步数据到数据库

  91.         self.saveSyncData()

  92.         # 发出状态更新事件

  93.         self.putEvent()

  94.         # ----------------------------------------------------------------------

  95.     def onInit(self):

  96.         """初始化策略(必须由用户继承实现)"""

  97.         self.writeCtaLog(u'%s策略初始化' % self.name)

  98.         # 载入历史数据,并采用回放计算的方式初始化策略数值

  99.         initData = self.loadBar(self.initDays)

  100.         for bar in initData:

  101.             self.onBar(bar)

  102.         self.putEvent()

  103.     # ----------------------------------------------------------------------

  104.     def onStart(self):

  105.         """启动策略(必须由用户继承实现)"""

  106.         self.writeCtaLog(u'%s策略启动' % self.name)

  107.         self.putEvent()

  108.     # ----------------------------------------------------------------------

  109.     def onStop(self):

  110.         """停止策略(必须由用户继承实现)"""

  111.         self.writeCtaLog(u'%s策略停止' % self.name)

  112.         self.putEvent()

  113.     # ----------------------------------------------------------------------

  114.     def onTick(self, tick):

  115.         """收到行情TICK推送(必须由用户继承实现)"""

  116.         self.bg.updateTick(tick)

  117.     # ----------------------------------------------------------------------

  118.     def onBar(self, bar):

  119.         """收到Bar推送(必须由用户继承实现)"""

  120.         self.bg.updateBar(bar)

  121.         self.bgclose.updateBar(bar)

  122.     # ----------------------------------------------------------------------

  123.     def onXminBar(self, bar):

  124.         """收到X分钟K线"""

  125.         # 全撤之前发出的委托

  126.         self.cancelAll()

  127.         # 保存K线数据

  128.         am = self.am

  129.         am.updateBar(bar)

  130.         if not am.inited:

  131.             return

  132.         # 计算指标数值

  133.         self.cciValue = am.cci(self.cciWindow)

  134.         self.keltnerup, self.keltnerdown = am.keltner(self.keltnerWindow,self.keltnerlMultiplier)

  135.         # 判断是否要进行交易

  136.         # 当前无仓位,发送开仓委托

  137.         if self.pos == 0:

  138.             if self.cciValue > 0:

  139.                 # ru

  140.                 self.buy(self.keltnerup,self.fixedSize, True)

  141.             elif self.cciValue < 0:

  142.                 self.short(self.keltnerdown, self.fixedSize, True)

  143.         # 同步数据到数据库

  144.         self.saveSyncData()

  145.         # 发出状态更新事件

  146.         self.putEvent()

  147.     # ----------------------------------------------------------------------

  148.     def onOrder(self, order):

  149.         """收到委托变化推送(必须由用户继承实现)"""

  150.         pass

  151.     # ----------------------------------------------------------------------

  152.     def onTrade(self, trade):

  153.         # 发出状态更新事件

  154.         self.putEvent()

  155.     # ----------------------------------------------------------------------

  156.     def onStopOrder(self, so):

  157.         """停止单推送"""

  158.         pass

关于VNPY基于SAR和肯特纳的交易策略是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: VNPY基于SAR和肯特纳的交易策略是怎样的

本文链接: https://lsjlt.com/news/230037.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • VNPY基于SAR和肯特纳的交易策略是怎样的
    VNPY基于SAR和肯特纳的交易策略是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一个比较简单策略,主要是为了验证SAR出场指标的;然后和可以结合其他下单值,做的一...
    99+
    2023-06-02
  • 基于统计的交易策略简易实现VNPY的示例分析
    这篇文章将为大家详细讲解有关基于统计的交易策略简易实现VNPY的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。交易思维是基于历史数据中,一组数据比如100天中,K线中最高点或者最低点...
    99+
    2023-06-02
  • VNPY单品种期货的网格交易策略的实现是怎样的
    这篇文章给大家介绍VNPY单品种期货的网格交易策略的实现是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。这里做了单品种期货网格交易策略实现。当bar.close在通道中时候,下个bar打到上轨开多单,打到下轨空单...
    99+
    2023-06-02
  • VNPY中基于Ta-lib的KDJ策略怎样实现
    本篇文章给大家分享的是有关VNPY中基于Ta-lib的KDJ策略怎样实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。VNPY自带演示策略中,没有kdj策略,作为一个国内常用策...
    99+
    2023-06-05
  • VNPY 交易所返回委托和交易状态到策略的源代码分析
    主要分析两个在类策略模型ctaTemplate的中的函数,onTrade和onOrder,其实两个很相似,被别的其他实例调用,推入更新的Trade和Order实例,并执行函数内的代码。对于Tick级别的交易,还是还是会经常用到这两个。下面是...
    99+
    2023-06-02
  • VNPY 批量策略回测和统计结果的excel输出是怎样的
    小编今天带大家了解VNPY 批量策略回测和统计结果的excel输出是怎样的,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“VNPY 批...
    99+
    2023-06-05
  • DB分库分表的基本思想和切分策略是怎样的
    DB分库分表的基本思想和切分策略是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、基本思想Sharding的基本思想就要把一个数据库切...
    99+
    2024-04-02
  • 数据库连接配置的策略和实践是怎样的
    今天就跟大家聊聊有关数据库连接配置的策略和实践是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一 前言应用执行SQL请求完成的过程中,数据库连...
    99+
    2024-04-02
  • 基于Struts2和Freemarkeri的Batis分页是怎么样的
    这篇文章给大家介绍基于Struts2和Freemarkeri的Batis分页是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。之前介绍过基于Hibernate分页的原理和设计,这里我们所用的分页都是物理分页技术,...
    99+
    2023-06-17
  • 基于HTML 5和CSS3开发的优秀应用程序是怎样的
    本篇文章为大家展示了基于HTML 5和CSS3开发的优秀应用程序是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天向大家展示19个基于 HTML5 和 CS...
    99+
    2024-04-02
  • yum仓库基于file和http两种服务器的搭建过程是怎么样的
    这期内容当中小编将会给大家带来有关yum仓库基于file和http两种服务器的搭建过程是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。YUM: Yellowdog Update Modifier,...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作