增加开始时间的过滤

This commit is contained in:
msincenselee 2018-01-15 19:55:34 +08:00
parent f1850175cc
commit 5868c55908

View File

@ -10,7 +10,7 @@ from vnpy.trader.app.ctaStrategy.ctaBase import CtaBarData, CtaTickData
class UtilSinaClient(object):
"""
SINA数据客户端主要使用requests开发
v1.1 增加start_dt参数在这个时间点之前的bar全部忽略
"""
# ----------------------------------------------------------------------
def __init__(self, strategy):
@ -25,11 +25,12 @@ class UtilSinaClient(object):
self.session = requests.session()
self.session.keep_alive = False
def getTicks(self, symbol, callback):
def getTicks(self, symbol, callback,start_dt=None):
"""
从sina加载最新的分时数据Min1)数据
:param symbol: 合约代码全路径得合约名称,先使用ctaTemplate.getFullSymbol()
:param callback: 回调函数
:param start_dt: 开始时间缺省为None
:return:
"""
try:
@ -54,6 +55,11 @@ class UtilSinaClient(object):
tick.time = item[4] + u':00'
tick.datetime = datetime.strptime(tick.date + ' ' + tick.time, '%Y-%m-%d %H:%M:%S')
if start_dt is not None:
# 丢弃约定开始时间之前的
if tick.datetime < start_dt:
continue
tick.lastPrice = float(item[0])
tick.volume = int(item[2])
@ -70,11 +76,12 @@ class UtilSinaClient(object):
self.strategy.writeCtaLog(u'加载sina历史Tick数据失败' + str(e))
return False
def getTicks2(self, symbol, callback):
def getTicks2(self, symbol, callback,start_dt=None):
"""
# 从sina加载最新的M1数据(针对中金所)
:param symbol: 合约代码全路径得合约名称,先使用ctaTemplate.getFullSymbol()
:param callback: 回调函数
:param start_dt: 开始时间缺省为None
:return: 成功/失败
"""
try:
@ -101,6 +108,10 @@ class UtilSinaClient(object):
tick.time = item[0] + u':00'
tick.datetime = datetime.strptime(tick.date + ' ' + tick.time, '%Y-%m-%d %H:%M:%S')
if start_dt is not None:
if tick.datetime < start_dt:
continue
tick.lastPrice = float(item[1])
tick.volume = int(item[3])
@ -131,12 +142,13 @@ class UtilSinaClient(object):
return 30
def getMinBars(self, symbol, minute, callback):
def getMinBars(self, symbol, minute, callback,start_dt=None):
"""
从sina加载最新的M5,M15,M30,M60数据
:param symbol: 全路径得合约名称,先使用ctaTemplate.getFullSymbol()
:param minute: 5153060
:param callback: 回调函数
:param start_dt: 开始时间缺省为None
:return: 成功/失败
"""
if minute not in [5, 15, 30, 60]:
@ -166,6 +178,9 @@ class UtilSinaClient(object):
else:
bar.datetime = sinaDt - timedelta(seconds=minute * 60)
if start_dt is not None:
if bar.datetime < start_dt:
continue
bar.date = bar.datetime.strftime('%Y%m%d')
bar.tradingDay = bar.date # todo: 需要修改晚上21点后修改为next workingday
bar.time = bar.datetime.strftime('%H:%M:00')
@ -208,12 +223,13 @@ class UtilSinaClient(object):
self.strategy.writeCtaLog(u'加载Sina历史分钟数据失败'+str(e))
return False
def getMinBars2(self, symbol, minute, callback):
def getMinBars2(self, symbol, minute, callback,start_dt=None):
"""
从sina加载最新的M5,M15,M30,M60数据(针对中金所
:param symbol: 全路径得合约名称,先使用ctaTemplate.getFullSymbol()
:param minute: 5153060
:param callback: 回调函数
:param start_dt: 开始时间缺省为None
:return: 成功/失败
"""
if minute not in {5, 15, 30, 60}:
@ -249,7 +265,9 @@ class UtilSinaClient(object):
bar.datetime = sinaDt - timedelta(seconds=(minute /2)* 60)
else:
bar.datetime = sinaDt - timedelta(seconds=minute * 60)
if start_dt is not None:
if bar.datetime < start_dt:
continue
bar.date = bar.datetime.strftime('%Y%m%d')
bar.tradingDay = bar.date # todo: 需要修改晚上21点后修改为next workingday
bar.time = bar.datetime.strftime('%H:%M:00')
@ -292,11 +310,12 @@ class UtilSinaClient(object):
self.strategy.writeCtaLog(u'加载Sina历史分钟数据失败'+str(e))
return False
def getDayBars(self, symbol, callback):
def getDayBars(self, symbol, callback,start_dt=None):
"""
从sina加载最新的Day数据
:param symbol: 全路径得合约名称,先使用ctaTemplate.getFullSymbol()
:param callback: 回调函数
:param start_dt: 开始时间缺省为None
:return: 成功/失败
"""
sinaBars = []
@ -314,6 +333,10 @@ class UtilSinaClient(object):
bar.symbol = symbol
# bar的close time
bar.datetime = datetime.strptime(item['date'], '%Y-%m-%d')
if start_dt is not None:
if bar.datetime < start_dt:
continue
bar.date = bar.datetime.strftime('%Y%m%d')
bar.tradingDay = bar.date # todo: 需要修改晚上21点后修改为next workingday
bar.time = bar.datetime.strftime('%H:%M:00')
@ -346,6 +369,7 @@ class UtilSinaClient(object):
self.strategy.writeCtaLog(u'加载Sina历史日线数据失败'+str(e))
return False
class TestStrategy(object):
def __init__(self):
@ -365,9 +389,9 @@ if __name__ == '__main__':
sina = UtilSinaClient(t)
rt=sina.getDayBars(symbol='RB1710', callback=t.addBar)
rt=sina.getDayBars(symbol='RB1810', callback=t.addBar)
rt = sina.getMinBars(symbol='RB1710',minute = 60, callback=t.addBar)
rt = sina.getMinBars(symbol='RB1810',minute = 60, callback=t.addBar)
#rt = sina.getTicks(symbol='RB1705', callback=t.addTick)