def _bc_loadInitBar(self, vtSymbol, initBars, minx): """反调函数,因引擎知道数据在哪,初始化Bar数据,""" # assert minx != 'min1' r = [] # 直接读取signal对应minx相关的文件。 fn = self.dss + 'fut/bar/' + minx + '_' + vtSymbol + '.csv' if os.path.exists(fn): df = pd.read_csv(fn) df['datetime'] = df['date'] + ' ' + df['time'] df = df[df.datetime < self.startDt] # print(vtSymbol, len(df), minx) assert len(df) >= initBars df = df.sort_values(by=['date','time']) df = df.iloc[-initBars:] # print(df) for i, row in df.iterrows(): d = dict(row) #print(d) # print(type(d)) bar = VtBarData() bar.__dict__ = d #print(bar.__dict__) r.append(bar) return r
def _bc_loadInitBar(self, vtSymbol, initBars, minx): """反调函数,因引擎知道数据在哪,初始化Bar数据,""" r = [] today = time.strftime('%Y%m%d', time.localtime()) # 直接读取signal对应minx相关的文件。 #fname = self.dss + 'fut/bar/' + minx + '_' + vtSymbol + '.csv' fname = self.dss + 'fut/put/rec/' + minx + '_' + vtSymbol + '.csv' #print(fname) if os.path.exists(fname): df = pd.read_csv(fname) assert len(df) >= initBars df = df.sort_values(by=['date', 'time']) df = df.iloc[-initBars:] #print(df) for i, row in df.iterrows(): d = dict(row) # print(d) # print(type(d)) bar = VtBarData() bar.__dict__ = d r.append(bar) return r
def _bc_loadInitBar(self, vtSymbol, initBars, minx): """读取startDt前n条Bar数据,用于初始化am""" assert minx != 'min1' r = [] # 直接读取signal对应minx相关的文件。 fname = self.dss + 'fut/bar/' + self.minx + '_' + vtSymbol + '.csv' #print(fname) df = pd.read_csv(fname) df['datetime'] = df['date'] + ' ' + df['time'] df = df[df.datetime < self.startDt] assert len(df) >= initBars df = df.sort_values(by=['date', 'time']) df = df.iloc[-initBars:] #print(df) for i, row in df.iterrows(): d = dict(row) # print(d) # print(type(d)) bar = VtBarData() bar.__dict__ = d r.append(bar) return r
def put_service(self): print('in put_svervice') while True: time.sleep(1) for id in self.vtSymbol_list: try: fname = self.dss + 'fut/put/' + self.minx + '_' + id + '.csv' #print(fname) df = pd.read_csv(fname) d = dict(df.loc[0, :]) #print(d) #print(type(d)) bar = VtBarData() bar.__dict__ = d bar.vtSymbol = id bar.symbol = id if id not in self.vtSymbol_dict: self.vtSymbol_dict[id] = bar elif self.vtSymbol_dict[id].time != bar.time: self.vtSymbol_dict[id] = bar #self.onBar(bar) for p in self.portfolio_list: p.onBar(bar) except Exception as e: print('error,读取文件错误') print(e)
def calcData_min5(self): """加载数据""" bar_minX = VtBarData() for dt, bar in self.min1barDict.items(): if str(bar.datetime)[-5:-3] in [ '00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55' ]: if bar_minX.datetime is not None: self.min5barDict[bar_minX.datetime] = bar_minX bar_minX = VtBarData() if bar_minX.datetime is None: bar_minX.__dict__ = bar.__dict__ else: if bar_minX.high < bar.high: bar_minX.high = bar.high if bar_minX.low > bar.low: bar_minX.low = bar.low bar_minX.close = bar.close bar_minX.volume = bar.volume if bar_minX.datetime is not None: self.min5barDict[bar_minX.datetime] = bar_minX self.barDict = self.min5barDict
def bar_service(self): print('in bar_svervice') r, dt = is_trade_day() if r == False: return address = ('localhost', SOCKET_BAR) while True: with Listener(address, authkey=b'secret password') as listener: with listener.accept() as conn: #print('connection accepted from', listener.last_accepted) s = conn.recv() d = eval(s) bar = VtBarData() bar.__dict__ = d for p in self.portfolio_list: p.onBar(bar)
def bar_listen_service(self): print('bar_listen_svervice 线程开始工作') server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('localhost', SOCKET_BAR)) server.listen(5) while True: try: conn, addr = server.accept() b = conn.recv(10240) s = str(b, encoding='utf-8') # print( 'recive:', len(s) ) conn.close() d = eval(s) if d['vtSymbol'] in self.vtSymbol_list: bar = VtBarData() bar.__dict__ = d bar.close = float( 'nan' ) if bar.close == sys.float_info.max else bar.close bar.AskPrice = float( 'nan' ) if bar.AskPrice == sys.float_info.max else bar.AskPrice # if bar.AskPrice != bar.AskPrice: # print(bar.AskPrice) bar.BidPrice = float( 'nan' ) if bar.BidPrice == sys.float_info.max else bar.BidPrice # if np.isnan(bar.BidPrice): # print(bar.BidPrice) self.lock.acquire() self.bar_list.append(bar) self.lock.release() else: pass except Exception as e: print('error ') r = traceback.format_exc() to_log(r)
def put_service(self): print('in put_svervice') vtSymbol_dict = {} # 缓存中间bar g5 = BarGenerator('min5') while True: time.sleep(1) for id in self.vtSymbol_list: try: fname = self.dss + 'fut/put/min1_' + id + '.csv' #print(fname) df = pd.read_csv(fname) d = dict(df.loc[0,:]) #print(d) #print(type(d)) bar = VtBarData() bar.__dict__ = d bar.vtSymbol = id bar.symbol = id if id not in vtSymbol_dict: vtSymbol_dict[id] = bar elif vtSymbol_dict[id].time != bar.time: vtSymbol_dict[id] = bar bar_min5 = g5.update_bar(bar) if bar_min5 is not None: g5.save_bar(bar_min5) for p in self.portfolio_list: p.onBar(bar_min5, 'min5') for p in self.portfolio_list: p.onBar(bar, 'min1') except Exception as e: # 对文件并发访问,存着读空文件的可能!!! #print('-'*30) #traceback.print_exc() s = traceback.format_exc() to_log(s)
def loadInitBar(self, vtSymbol, initBars): """读取Bar数据,""" r = [] try: today = time.strftime('%Y%m%d', time.localtime()) fname = self.dss + 'fut/bar/min1_' + today + '_' + vtSymbol + '.csv' #print(fname) df = pd.read_csv(fname) df = df.sort_values(by=['date', 'time']) df = df.iloc[-initBars:] print(df) for i, row in df.iterrows(): d = dict(row) #print(d) #print(type(d)) bar = VtBarData() bar.__dict__ = d r.append(bar) except Exception as e: print('error ') print(e) return r
#print(fname) df = pd.read_csv(fname) df['datetime'] = df['date'] + ' ' + df['time'] df = df[df.datetime < startDt] assert len(df) >= initBars df = df.sort_values(by=['date', 'time']) df = df.iloc[-initBars:] print(df) for i, row in df.iterrows(): d = dict(row) #print(d) # print(type(d)) bar = VtBarData() bar.__dict__ = d #print(bar.__dict__) r.append(bar) am = ArrayManager(initBars) # K线容器 for bar in r: am.updateBar(bar) #rsiValue = am.rsi(5, array=True) #rsiArray50 = am.rsi(10, array=True) #rsiMa = rsiValue[-30:].mean() #atrValue = am.atr(30) atrValue = am.atr(1, array=True) atrMa = atrValue[-30:].mean() print(atrValue)