import pandas as pd import datetime import numpy as np import CoreTraidMath import CoreDraw from tqdm import tqdm from indicators import * class coreSignalTrande(): def __init__(self, data=pd.DataFrame(), dataType='candel', mode='online', batchSize=None, indParams=None, signalParams=None, #needFig=False, #showOnlyIndex=False, #drawFig=False, #equalityGap=0 ): self.data=data.reset_index(drop=True) self.onlineData=data.reset_index(drop=True) self.dataType=dataType self.mode=mode self.ans=None self.softAnalizList=np.asarray([]) self.hardAnalizList=np.asarray([]) self.analizMetrics={} self.indParams=indParams self.signalParams=signalParams self.batchSize=batchSize #self.needFig=needFig #self.showOnlyIndex=showOnlyIndex #self.drawFig=drawFig #self.equalityGap=equalityGap #Роутер получения ответа def getAns(self,data): #ans='Error: unknown Mode!' ans=None print("Start processing...") if self.mode == 'online': ans=self.getOnlineAns(data.reset_index(drop=True)) elif self.mode == 'retro': ans=self.getRetroAns(data) elif self.mode == 'retroFast': ans=self.getRetroFastAns(data) print("Processing DONE!") return ans #Ретро режим, где расширяется окно добавлением новых элементов def getRetroAns(self,data): ans=np.asarray([]) for i in tqdm(range(self.batchSize,len(data)-1)): #self.onlineData=self.data[0:i] window_data = data[0:i] window_data.reset_index(drop=True) ans=np.append(ans,(self.getOnlineAns(window_data))) self.ans=ans self.getAnaliz() self.getMetrix() return ans #Ретро режим, где двигается окно def getRetroFastAns(self,data): #print('d - ',data) ans=np.asarray([]) for i in tqdm(range(len(data)-1-self.batchSize)): #self.onlineData=self.data[i:i+self.batchSize] window_data = data[i:i+self.batchSize] #print('win - ',window_data) window_data.reset_index(drop=True) #print('win - ',window_data) ans=np.append(ans,(self.getOnlineAns(window_data))) self.ans=ans self.getAnaliz() self.getMetrix() return ans #Метод, который будет переопределять каждый дочерний класс def getOnlineAns(self): return 'Error' def getAnaliz(self): print("Start analiz...") for i in (range(len(self.ans))): sourceValue=self.data[self.signalParams['source']][i+self.batchSize] targetValue=self.data[self.signalParams['target']][i+self.batchSize + 1] if (targetValue)>sourceValue: if self.ans[i]==1: self.softAnalizList=np.append(self.softAnalizList,1) self.hardAnalizList=np.append(self.hardAnalizList,1) elif self.ans[i]==-1: self.softAnalizList=np.append(self.softAnalizList,-1) self.hardAnalizList=np.append(self.hardAnalizList,-1) else: self.softAnalizList=np.append(self.softAnalizList,0) self.hardAnalizList=np.append(self.hardAnalizList,-1) elif (targetValue)self.BB.ans['pSTD'][-1]: ans=-1 elif lastValue