欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn)-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn),小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

站在用戶的角度思考問題,與客戶深入溝通,找到興化網(wǎng)站設(shè)計與興化網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋興化地區(qū)。

VNPY自帶演示策略中,沒有kdj策略,作為一個國內(nèi)常用策略,這里講講怎么實現(xiàn)。

首先,Ta-lib這個python庫里面并沒有提供kdj策略,估計主要因為這個策略主要在流行,不過ta-lib提供了類似的方法STOCH()??梢詫崿F(xiàn)KD效果。

那么首先為class ArrayManager新增一個方法kdj,來輸出KDJ值。我是直接修改ctaTemplate.py 文件,更合適方法是繼承class ArrayManager。

  • def kdj(self, fastk_period, slowk_period, slowk_matype ,slowd_period ,slowd_matype, array=False):

  •         """KDJ指標"""

  •         slowk, slowd = talib.STOCH(self.high,self.low,self.close,fastk_period, slowk_period,

  •                                          slowk_matype, slowd_period ,slowd_matype)

  •         # 求出J值,J = (3 * D) - (2 * K)

  •         slowj = list(map(lambda x,y: 3 * x - 2 * y, slowk, slowd))

  •         if array:

  •             return slowk, slowd, slowj

  •         return slowk[-1], slowd[-1], slowj[-1]

上面是新增的kdj功能,首先是利用SHOCH計算出kd,在利用kd算出j,輸出kdj三個指標。
SHOCH計算需要每條k線中的最高值,最低值,和結(jié)束值參數(shù),作為list數(shù)列提供;這個直接使用ArraManger提供值;然后是fastK_period, slowk_period和slowd_period, 這個就是kdj設(shè)定中常見的N,M1,M2三個窗口參數(shù), 通常設(shè)置是(9,3,3)。
然后是slowk_matype, slowd_matype就是平均算法類型,這里可以用SMA滑動平均或EMA指數(shù)平滑移動平均等。為了和文華一致,用了SMA。

#MA_Type: 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)

這個后來發(fā)現(xiàn)不是一回事,Ta-lib中的SMA中S是simple簡單的意思,SMA是簡單移動平均。和文華SMA不一樣,文華SMA是指數(shù)加權(quán)移動平均線,這樣的化用EWMA更合適。但是Ta-lib本身并不提供提供EWMA;按照下圖發(fā)現(xiàn)默認權(quán)重為1; EMA或者較為合適,不過此時權(quán)重為2。
后來看著此文又不是一回事,以后有空填這個坑。
https://www.joinquant.com/post/7920
VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn)
VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn)
j值不提供直接只算,直接用kd值,用3*k-2*d算出j值。對了這些返回都是一堆kdj組list,就是可以畫成一個線。如果是array是false就返回一個點的kdj值。


好了上面就是對 ArrayManager增加一個kdj方法,在下來就是繼承CtaTemplate, 生成策略,這里基本就是
買入思想就是k或d小于某個閾值時候為超賣,當k大于d,就是描述里面K線上穿d線時候,開多單。反之k或d值大于閾值多超買,那么此時k小于d,開空單。。
如果持有多頭,那么因為j更加敏感,用j值來做平倉指標. 如果持有多單,,如果j小于d,即j線下穿d線時候賣出多單,或者j值快速下降,下降幅度大于定好的jlimit。。
如果持有空頭,同理,如果j大于d,或者j快速增大則平倉。
代碼如下:

  • # encoding: UTF-8

  • """

  • 這里的Demo是一個kdj策略實現(xiàn)

  • """

  • from __future__ import division

  • from vnpy.trader.vtConstant import EMPTY_STRING, EMPTY_FLOAT

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

  •                                                      BarGenerator,

  •                                                      ArrayManager)

  • from talib import MA_Type

  • ########################################################################

  • class KDJStrategy(CtaTemplate):

  •     """KDJ策略Demo"""

  •     className = 'KDJStrategy'

  •     author = u'BillyZhang'

  •     # 策略參數(shù)

  •     fastk_period = 9

  •     slowk_period = 3

  •     slowk_matype = MA_Type.EMA

  •     slowd_period = 3

  •     slowd_matype = MA_Type.EMA

  •     kdlimit = 20

  •     jlimit = 10

  •     initDays = 10

  •     fixedSize = 1

  •     barmins = 15

  •     # 策略變量

  •     k = 0

  •     d = 0

  •     j = 0

  •     # 參數(shù)列表,保存了參數(shù)的名稱

  •     paramList = ['name',

  •                  'className',

  •                  'author',

  •                  'vtSymbol',

  •                  'fastk_period',

  •                  'slowk_period',

  •                  'slowk_matype',

  •                  'slowd_period',

  •                  'slowd_matype',

  •                  'fixedSize'

  •                  'barmins'

  •                  ]

  •     # 變量列表,保存了變量的名稱

  •     varList = ['inited',

  •                'pos',

  •                'k',

  •                'd',

  •                'j']

  •     # 同步列表,保存了需要保存到數(shù)據(jù)庫的變量名稱

  •     syncList = ['pos']

  •     # ----------------------------------------------------------------------

  •     def __init__(self, ctaEngine, setting):

  •         """Constructor"""

  •         super(KDJStrategy, self).__init__(ctaEngine, setting)

  •         self.bg = BarGenerator(self.onBar, self.barmins, self.onXminBar)

  •         self.am = ArrayManager()

  •         # 注意策略類中的可變對象屬性(通常是list和dict等),在策略初始化時需要重新創(chuàng)建,

  •         # 否則會出現(xiàn)多個策略實例之間數(shù)據(jù)共享的情況,有可能導致潛在的策略邏輯錯誤風險,

  •         # 策略類中的這些可變對象屬性可以選擇不寫,全都放在__init__下面,寫主要是為了閱讀

  •         # 策略時方便(更多是個編程習慣的選擇)

  •     # ----------------------------------------------------------------------

  •     def onInit(self):

  •         """初始化策略(必須由用戶繼承實現(xiàn))"""

  •         self.writeCtaLog(u'KDJ策略初始化')

  •         initData = self.loadBar(self.initDays)

  •         for bar in initData:

  •             self.onBar(bar)

  •         self.putEvent()

  •     # ----------------------------------------------------------------------

  •     def onStart(self):

  •         """啟動策略(必須由用戶繼承實現(xiàn))"""

  •         self.writeCtaLog(u'KDJ策略啟動')

  •         self.putEvent()

  •     # ----------------------------------------------------------------------

  •     def onStop(self):

  •         """停止策略(必須由用戶繼承實現(xiàn))"""

  •         self.writeCtaLog(u'KDJ策略停止')

  •         self.putEvent()

  •     # ----------------------------------------------------------------------

  •     def onTick(self, tick):

  •         """收到行情TICK推送(必須由用戶繼承實現(xiàn))"""

  •         self.bg.updateTick(tick)

  •     # ----------------------------------------------------------------------

  •     def onBar(self, bar):

  •         """收到Bar推送(必須由用戶繼承實現(xiàn))"""

  •         self.bg.updateBar(bar)

  •     # ----------------------------------------------------------------------

  •     def onXminBar(self, bar):

  •         """收到Bar推送(必須由用戶繼承實現(xiàn))"""

  •         am = self.am

  •         am.updateBar(bar)

  •         if not am.inited:

  •             return

  •         # 計算kdj數(shù)值

  •         slowk, slowd, slowj = am.kdj(self.fastk_period, self.slowk_period, self.slowk_matype,

  •                                      self.slowd_period, self.slowd_matype, array=True)

  •         self.k = slowk[-1]

  •         self.d = slowd[-1]

  •         self.j = slowj[-1]

  •         self.jdif = slowj[-1] - slowj[-2]

  •         tradeindictor = 0

  •         if self.k > (100 - self.kdlimit) or self.d > (100 - self.kdlimit):

  •             tradeindictor = -1

  •         if self.k < self.kdlimit or self.d < self.kdlimit:

  •             tradeindictor = 1

  •         # 當前無倉位,發(fā)送開倉委托

  •         if self.pos == 0:

  •             self.intraTradeHigh = bar.high

  •             self.intraTradeLow = bar.low

  •             # 如果k值大于d值均線,開多單;反之,如果如果k值小于d值時候開空單

  •             if self.k > self.d and tradeindictor == 1:

  •                 self.buy(bar.close, self.fixedSize, False)

  •             elif self.k < self.d and tradeindictor == -1:

  •                 self.short(bar.close, self.fixedSize, False)

  •         # 持有多頭倉位; 如果j小于d,或者j最近兩個k線,j值下跌超過jlimi平倉, :

  •         elif self.pos > 0:

  •             if self.j < self.d or self.jdif < -1 *self.jlimit:

  •                 self.sell(bar.close * 1.03, abs(self.pos))

  •         # 持有空頭倉位;如果j大于d,或j快速上揚 平倉;

  •         elif self.pos < 0:

  •             if self.j > self.d or self.jdif > self.jlimit:

  •                 self.cover(bar.close * 0.97, abs(self.pos))

  •         # 同步數(shù)據(jù)到數(shù)據(jù)庫

  •         self.saveSyncData()

  •         # 發(fā)出狀態(tài)更新事件

  •         self.putEvent()

  •     # ----------------------------------------------------------------------

  •     def onOrder(self, order):

  •         """收到委托變化推送(必須由用戶繼承實現(xiàn))"""

  •         # 對于無需做細粒度委托控制的策略,可以忽略onOrder

  •         pass

  •     # ----------------------------------------------------------------------

  •     def onTrade(self, trade):

  •         """收到成交推送(必須由用戶繼承實現(xiàn))"""

  •         # 對于無需做細粒度委托控制的策略,可以忽略onOrder

  •         pass

  •     # ----------------------------------------------------------------------

  •     def onStopOrder(self, so):

  •         """停止單推送"""

  •         pass

以上就是VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

網(wǎng)站標題:VNPY中基于Ta-lib的KDJ策略怎樣實現(xiàn)-創(chuàng)新互聯(lián)
文章起源:http://aaarwkj.com/article24/dppsje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機服務(wù)器托管、網(wǎng)站改版、面包屑導航商城網(wǎng)站、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
日韩欧美亚洲国产资源| 韩国黄色理论片一区二区麻豆| 深夜视频在线观看成人| 成人18禁视频免费看| 91麻豆精品国产自产| 日韩欧美一级性生活片| 六月丁香花五月婷婷| 国产日韩亚洲欧美在线| 日本不卡的三区四区五区| 日本不卡一二区不久精品免费| 国产一级黄色片免费看| 欧美日韩激情在线一区| 亚洲一区二区午夜福利亚洲| 精品熟妇人妻一区二区三区| 伊人丁香六月日日操操| 国产男女猛进猛出精品91| 国产情色自拍在线观看| 欧美亚洲另类国产精品| 亚洲欧美日韩激情另类| 国产高清不卡一区二区| 成人爱爱视频在线免费观看| 极品少妇一级人妻av| 蜜桃视频在线视频免费观看| 久久96国产精品久久秘臀| 亚洲欧美日韩一区二区视频| 日本中文字幕女优观看| 国产伦理自拍视频在线观看| av在线男人社区日韩| 丰满肥臀熟女高清区二区| 中文字幕久久亚洲一区| 亚洲 欧美 日韩一区| 亚洲中文字幕少妇熟女美妇| 久久99热最新地址获取| 欧美午夜福利一级高清| 精品熟女少妇av免费观看| 亚洲精品偷拍在线观看| 国产精品日韩精品在线| 禁止18岁以下的视频| 一本之道久久成人综合| 大胆丰满邻居少妇在线观看| 自拍偷拍亚洲丝袜大秀|