VNPY 基於SAR和肯特納的交易策略
一個比較簡單策略,主要是為了驗證SAR出場指標的;然後和可以結合其他下單值,做的一個簡單組合。只是用來測試。
入場指標,cci,如果cci大於0,多頭,cci小於0空頭。下阻止單,金額就是Kelter上下軌。多頭買入價格是通道上軌。空頭買入價格是通道下軌。
出場指標,這裡出場和入場適用不同週期的k線,因為這樣可以更靈活跑回測。SAR價格作為賣出價格,開阻止單,如果觸及SAR價格賣出。
先在class ArrayManager() 加入sar方法。當然最好還是繼承新增。
然後建立策略。
入場指標,cci,如果cci大於0,多頭,cci小於0空頭。下阻止單,金額就是Kelter上下軌。多頭買入價格是通道上軌。空頭買入價格是通道下軌。
出場指標,這裡出場和入場適用不同週期的k線,因為這樣可以更靈活跑回測。SAR價格作為賣出價格,開阻止單,如果觸及SAR價格賣出。
先在class ArrayManager() 加入sar方法。當然最好還是繼承新增。
點選(此處)摺疊或開啟
-
def sar(self, acceleration = 0.02, maximum = 0.2, array =False):
-
"""sar"""
-
real = talib.SAR(self.high,self.low, acceleration= acceleration,maximum = maximum)
-
if array:
-
return real
- return real[-1]
然後建立策略。
點選(此處)摺疊或開啟
-
# encoding: UTF-8
-
-
from __future__ import division
-
-
from vnpy.trader.vtObject import VtBarData
-
from vnpy.trader.vtConstant import EMPTY_STRING
-
from vnpy.trader.app.ctaStrategy.ctaTemplate import (CtaTemplate,
-
BarGenerator,
-
ArrayManager)
-
-
-
########################################################################
-
class SARKELStrategy(CtaTemplate):
-
"""基於sar and Keltner 交易策略"""
-
className = 'SARKELStrategy'
-
author = u'BillyZhang'
-
-
# 策略引數
-
sarAcceleration = 0.02 #加速線
-
sarMaximum = 0.2 #
-
cciWindow = 20 # CCI視窗數
-
keltnerWindow = 25 # keltner視窗數
-
keltnerlMultiplier = 6.0 # 乘數
-
initDays = 10 # 初始化資料所用的天數
-
fixedSize = 1 # 每次交易的數量
-
barMins = 15
-
barMinsClose = 10
-
# 策略變數
-
sarValue = 0 # sar指標數值
-
cciValue = 0 # CCI指標數值
-
keltnerup = 0
-
keltnerdown = 0
-
longStop = 0 # 多頭止損
-
shortStop = 0 # 空頭止損
-
-
# 引數列表,儲存了引數的名稱
-
paramList = ['name',
-
'className',
-
'author',
-
'vtSymbol',
-
'sarAcceleration',
-
'sarMaximum',
-
'cciWindow',
-
'keltnerWindow',
-
'keltnerlMultiplier',
-
'initDays',
-
'fixedSize',
-
'barMinsClose',
-
'barMins']
-
-
# 變數列表,儲存了變數的名稱
-
varList = ['inited',
-
'trading',
-
'pos',
-
'sarValue',
-
'cciValue',
-
'atrValue',
-
'intraBarHigh',
-
'intraBarLow',
-
'longStop',
-
'shortStop']
-
-
# 同步列表,儲存了需要儲存到資料庫的變數名稱
-
syncList = ['pos',
-
'intraTradeHigh',
-
'intraTradeLow']
-
-
# ----------------------------------------------------------------------
-
def __init__(self, ctaEngine, setting):
-
"""Constructor"""
-
super(SARKELStrategy, self).__init__(ctaEngine, setting)
-
-
self.bg = BarGenerator(self.onBar, self.barMins, self.onXminBar) # 建立K線合成器物件
-
self.am = ArrayManager()
-
-
self.bgclose = BarGenerator(self.onBar, self.barMinsClose, self.onminBarClose)
-
self.amClose = ArrayManager()
-
-
# ----------------------------------------------------------------------
-
def onminBarClose(self, bar):
-
"""分鐘作為清倉週期"""
-
# 如果沒有倉位,那麼不用care,直接skip
-
-
# 儲存K線資料
-
amClose = self.amClose
-
-
amClose.updateBar(bar)
-
-
if not amClose.inited:
-
return
-
-
# 計算指標數值
-
self.sarValue = amClose.sar(self.sarAcceleration,self.sarMaximum)
-
-
# 判斷是否要進行交易
-
if self.pos == 0:
-
return
-
-
# 當前無倉位,傳送開倉委託
-
# 持有多頭倉位
-
elif self.pos > 0:
-
self.cancelAll()
-
self.sell(self.sarValue, abs(self.pos), True)
-
-
# 持有空頭倉位
-
elif self.pos < 0:
-
self.cancelAll()
-
self.cover(self.sarValue, abs(self.pos), True)
-
-
# 同步資料到資料庫
-
self.saveSyncData()
-
-
# 發出狀態更新事件
-
self.putEvent()
-
-
-
# ----------------------------------------------------------------------
-
-
def onInit(self):
-
"""初始化策略(必須由使用者繼承實現)"""
-
self.writeCtaLog(u'%s策略初始化' % self.name)
-
-
# 載入歷史資料,並採用回放計算的方式初始化策略數值
-
initData = self.loadBar(self.initDays)
-
for bar in initData:
-
self.onBar(bar)
-
-
self.putEvent()
-
-
# ----------------------------------------------------------------------
-
def onStart(self):
-
"""啟動策略(必須由使用者繼承實現)"""
-
self.writeCtaLog(u'%s策略啟動' % self.name)
-
self.putEvent()
-
-
# ----------------------------------------------------------------------
-
def onStop(self):
-
"""停止策略(必須由使用者繼承實現)"""
-
self.writeCtaLog(u'%s策略停止' % self.name)
-
self.putEvent()
-
-
# ----------------------------------------------------------------------
-
def onTick(self, tick):
-
"""收到行情TICK推送(必須由使用者繼承實現)"""
-
self.bg.updateTick(tick)
-
-
# ----------------------------------------------------------------------
-
def onBar(self, bar):
-
"""收到Bar推送(必須由使用者繼承實現)"""
-
self.bg.updateBar(bar)
-
self.bgclose.updateBar(bar)
-
-
# ----------------------------------------------------------------------
-
def onXminBar(self, bar):
-
"""收到X分鐘K線"""
-
# 全撤之前發出的委託
-
self.cancelAll()
-
-
# 儲存K線資料
-
am = self.am
-
-
am.updateBar(bar)
-
-
if not am.inited:
-
return
-
-
# 計算指標數值
-
self.cciValue = am.cci(self.cciWindow)
-
self.keltnerup, self.keltnerdown = am.keltner(self.keltnerWindow,self.keltnerlMultiplier)
-
-
# 判斷是否要進行交易
-
-
# 當前無倉位,傳送開倉委託
-
if self.pos == 0:
-
-
if self.cciValue > 0:
-
# ru
-
self.buy(self.keltnerup,self.fixedSize, True)
-
-
elif self.cciValue < 0:
-
self.short(self.keltnerdown, self.fixedSize, True)
-
-
# 同步資料到資料庫
-
self.saveSyncData()
-
-
# 發出狀態更新事件
-
self.putEvent()
-
-
# ----------------------------------------------------------------------
-
def onOrder(self, order):
-
"""收到委託變化推送(必須由使用者繼承實現)"""
-
pass
-
-
# ----------------------------------------------------------------------
-
def onTrade(self, trade):
-
# 發出狀態更新事件
-
self.putEvent()
-
-
# ----------------------------------------------------------------------
-
def onStopOrder(self, so):
-
"""停止單推送"""
- pass
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2157326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VNPY 一種基於統計的交易策略簡易實現
- VNPY 交易所返回委託和交易狀態到策略的原始碼分析原始碼
- VNPY 中基於Ta-lib的KDJ策略實現
- VNPY 單品種期貨的網格交易策略的實現
- 在·VNPY中按照CTA策略例項記錄交易條目和損益
- VNPY中 Tick級別準高頻交易簡單策略
- 基於迴歸幅度的反轉交易策略
- VNPY 自帶跨時間週期交易策略MultiTimeframeStrategy 分析
- VNPY 價差交易模組的使用學習
- 建立檢視修改和刪除基於策略的管理策略
- VNPY,從傳送交易指令到交易所的原始碼分析原始碼
- 基於策略的管理方案
- vnpy,BollChannel布林線軌道策略分析
- 針對量化交易的機器學習中,交易策略傾向於空倉的問題機器學習
- btc交易策略
- sar命令的用法和詳解
- VNPY 批量策略回測和統計結果的excel輸出Excel
- 基於ts的node專案引入報錯歸納
- 為VNPY增加資料庫記錄交易資料功能資料庫
- 基於AD作用於域使用者和計算機的組策略(1)計算機
- 基於AD作用於域使用者和計算機的組策略(2)計算機
- 基於LSTM模型的智慧選股策略模型
- 基於SpringBoot的策略模式demoSpring Boot模式
- IPv6基於策略的地址分配
- 在VNPY2的進行CTA批量回測,支援Json和Excel格式匯入策略JSONExcel
- 量化交易:日內迴轉交易策略
- 基於Linux的網路安全策略和保護措施(轉)Linux
- 利用VNPY回測引擎分析實盤交易,並用excel和pdf輸出分析結果Excel
- 在VNPY中策略中,使用分鐘線合成日K線
- 樂觀的併發策略——基於CAS的自旋
- 交易策略-網格策略(三):示例操作一
- 交易策略-網格策略(四):示例操作二
- 肯特·貝克:改變人生的程式碼整理魔法
- 利用Scikit-learn機器學習庫的特徵分類進行vnpy期貨量化交易機器學習特徵
- 簡單介紹下vnpy的價差交易模組 spread_trading
- 初識滴滴交易策略之一:交易市場
- 寶鯤財經外匯交易入市和離場策略
- ASP.NET Core 中基於策略的授權ASP.NET