This commit is contained in:
msincenselee 2018-09-29 17:42:14 +08:00
parent 894b8da72d
commit fef5dc9410
4 changed files with 56 additions and 35 deletions

View File

@ -1431,7 +1431,7 @@ class BacktestingEngine(object):
self.writeCtaLog(u'{0}文件不存在'.format(filepath))
return ticks
dt = None
csvReadFile = file(filepath, 'rb')
csvReadFile = open(filepath, 'rb')
reader = csv.DictReader(csvReadFile, delimiter=",")
self.writeCtaLog(u'加载{0}'.format(filepath))
@ -1624,7 +1624,7 @@ class BacktestingEngine(object):
self.writeCtaLog(u'{0}文件不存在'.format(filepath))
return ticks
dt = None
csvReadFile = file(filepath, 'rb')
csvReadFile = open(filepath, 'rb')
df = pd.read_csv(filepath, encoding='gbk',parse_dates=False)
df.columns = ['date', 'time', 'lastPrice', 'lastVolume', 'totalInterest', 'position',
'bidPrice1', 'bidVolume1', 'bidPrice2', 'bidVolume2', 'bidPrice3', 'bidVolume3',
@ -1965,6 +1965,15 @@ class BacktestingEngine(object):
#bar.close = float(row['Close'])
#bar.volume = float(row['TotalVolume'])#
#barEndTime = datetime.strptime(row['Date']+' ' + row['Time'], '%Y/%m/%d %H:%M:%S')
if row.get('open',None) is None:
continue
if row.get('high', None) is None:
continue
if row.get('low', None) is None:
continue
if row.get('close', None) is None:
continue
if len(row['open'])==0 or len(row['high'])==0 or len(row['low'])==0 or len(row['close'])==0:
continue
# 从ricequant导出的csv文件

View File

@ -957,6 +957,12 @@ class CtaEngine(object):
else:
symbols = strategy.vtSymbol.split(';')
# 数字货币 btc_usdt.OKEX
#if strategy.vtSymbol.find('.') != -1:
# symbol_pairs = strategy.vtSymbol.split('.')
# if len(symbol_pairs)==2:
# symbols.append(symbol_pairs[0])
# 判断是否有Leg1Symbol,Leg2Symbol 两个合约属性
if hasattr(strategy, 'Leg1Symbol'):
if strategy.Leg1Symbol not in symbols:

View File

@ -2934,7 +2934,7 @@ class CtaLineBar(object):
def skd_is_low_golden_cross(self, runtime=False, low_skd=None):
"""
检查是否低位
检查是否低位
:return:
"""
if not self.inputSkd or len(self.lineSK) < self.inputSkdLen2:
@ -3695,6 +3695,7 @@ class CtaHourBar(CtaLineBar):
# 去除分钟和秒数
tick.datetime = datetime.strptime(tick.datetime.strftime('%Y-%m-%d %H:00:00'), '%Y-%m-%d %H:%M:%S')
tick.time = tick.datetime.strftime('%H:%M:%S')
self.last_minute = tick.datetime.minute
self.curTradingDay = tick.tradingDay
self.writeCtaLog('{} drawLineBar() new_bar,{} curTradingDay:{},tick.tradingDay:{}'
.format(self.name, tick.datetime.strftime("%Y-%m-%d %H:%M:%S"), self.curTradingDay,
@ -3707,6 +3708,7 @@ class CtaHourBar(CtaLineBar):
self.last_minute = tick.datetime.minute
if self.is_7x24:
# 数字货币,用前后时间间隔
if (tick.datetime - lastBar.datetime).total_seconds() >= 3600 * self.barTimeInterval:
self.writeCtaLog('{} drawLineBar() new_bar,{} - {} > 3600 * {} '
.format(self.name, tick.datetime.strftime("%Y-%m-%d %H:%M:%S"), lastBar.datetime.strftime("%Y-%m-%d %H:%M:%S"),
@ -3719,16 +3721,17 @@ class CtaHourBar(CtaLineBar):
self.curTradingDay = tick.tradingDay
else:
self.curTradingDay = tick.date
if self.m1_bars_count > 60 * self.barTimeInterval:
self.writeCtaLog('{} drawLineBar() new_bar,{} {} > 60 * {} '
.format(self.name, tick.datetime.strftime("%Y-%m-%d %H:%M:%S"),
self.m1_bars_count,
self.barTimeInterval))
is_new_bar = True
# 去除秒数
tick.datetime = datetime.strptime(tick.datetime.strftime('%Y-%m-%d %H:%M:00'), '%Y-%m-%d %H:%M:%S')
tick.time = tick.datetime.strftime('%H:%M:%S')
else:
# 国内期货,用bar累加
if self.m1_bars_count > 60 * self.barTimeInterval:
self.writeCtaLog('{} drawLineBar() new_bar,{} {} > 60 * {} '
.format(self.name, tick.datetime.strftime("%Y-%m-%d %H:%M:%S"),
self.m1_bars_count,
self.barTimeInterval))
is_new_bar = True
# 去除秒数
tick.datetime = datetime.strptime(tick.datetime.strftime('%Y-%m-%d %H:%M:00'), '%Y-%m-%d %H:%M:%S')
tick.time = tick.datetime.strftime('%H:%M:%S')
if is_new_bar:
# 创建并推入新的Bar

View File

@ -260,27 +260,28 @@ class CtaTemplate(object):
def writeCtaLog(self, content):
"""记录CTA日志"""
try:
content = self.name + ':' + content
self.ctaEngine.writeCtaLog(content, strategy_name=self.name)
except Exception as ex:
content = self.name + ':' + content
self.ctaEngine.writeCtaLog(content)
# ----------------------------------------------------------------------
def writeCtaError(self, content):
"""记录CTA出错日志"""
try:
content = self.name + ':' + content
self.ctaEngine.writeCtaError(content, strategy_name=self.name)
except Exception as ex:
content = self.name + ':' + content
self.ctaEngine.writeCtaError(content)
# ----------------------------------------------------------------------
def writeCtaWarning(self, content):
"""记录CTA告警日志"""
try:
content = self.name + ':' + content
self.ctaEngine.writeCtaWarning(content, strategy_name=self.name)
except Exception as ex:
content = self.name + ':' + content
self.ctaEngine.writeCtaWarning(content)
# ----------------------------------------------------------------------
@ -296,15 +297,15 @@ class CtaTemplate(object):
# ----------------------------------------------------------------------
def writeCtaCritical(self, content):
"""记录CTA系统异常日志"""
content = self.name + ':' + content
if not self.backtesting:
try:
self.ctaEngine.writeCtaCritical(content,strategy_name=self.name)
except Exception as ex:
content = self.name + ':' + content
self.ctaEngine.writeCtaCritical(content)
else:
content = self.name + ':' + content
self.ctaEngine.writeCtaError(content)
def sendSignal(self,direction,price, level):
@ -486,11 +487,18 @@ class MatrixTemplate(CtaTemplate):
return
if dt.hour == 10:
if dt.minute <= 15 or dt.minute >= 30:
if self.shortSymbol not in MARKET_ZJ and 15 <= dt.minute < 30:
pass
else:
self.tradeWindow = True
return
if dt.hour == 11 and dt.minute <= 30:
if dt.hour == 11 and dt.minute < 30:
self.tradeWindow = True
return
# 中金
if self.shortSymbol not in MARKET_ZJ and dt.hour == 13:
self.tradeWindow = True
return
@ -499,7 +507,7 @@ class MatrixTemplate(CtaTemplate):
return
if dt.hour == 14:
if dt.minute <= 55:
if dt.minute <= 59:
self.tradeWindow = True
return
@ -514,12 +522,12 @@ class MatrixTemplate(CtaTemplate):
# 上期 贵金属, 次日凌晨2:30
if self.shortSymbol in NIGHT_MARKET_SQ1:
if dt.hour == 22 or dt.hour == 23 or dt.hour == 0 or dt.hour == 1:
if dt.hour in [22,23,0,1] :
self.tradeWindow = True
return
if dt.hour == 2:
if dt.minute <= 1: # 收市前29分钟
if dt.minute <= 29: # 收市前29分钟
self.tradeWindow = True
return
if dt.minute > 24: # 夜盘平仓
@ -529,18 +537,13 @@ class MatrixTemplate(CtaTemplate):
# 上期 有色金属,黑色金属,沥青 次日01:00
if self.shortSymbol in NIGHT_MARKET_SQ2:
if dt.hour in [22, 23]:
if dt.hour in [22, 23,0]:
self.tradeWindow = True
return
if dt.hour == 0:
if dt.minute <= 31: # 收市前29分钟
self.tradeWindow = True
return
if dt.minute > 54: # 夜盘平仓
self.closeWindow = True
return
if dt.minute > 54: # 夜盘平仓
self.closeWindow = True
return
return
@ -548,7 +551,7 @@ class MatrixTemplate(CtaTemplate):
if self.shortSymbol in NIGHT_MARKET_SQ3:
if dt.hour == 22:
if dt.minute <= 31: # 收市前29分钟
if dt.minute <= 59: # 收市前29分钟
self.tradeWindow = True
return
@ -562,7 +565,7 @@ class MatrixTemplate(CtaTemplate):
return
if dt.hour == 23:
if dt.minute <= 1: # 收市前29分钟
if dt.minute <= 29: # 收市 23:30分钟
self.tradeWindow = True
return
if dt.minute > 24: # 夜盘平仓