Path: blob/master/ invest-robot-contest_NeuroInvest-main/NeuroInvest/trade_collection.py
5929 views
from config import scanInterval, scanPeriod, trainingPeriod1from trade_moment import TradeMoment2from training import Training3from utility import currentTimestamp45from joblib import dump, load6from os import path78class TradeCollection:9history = {}10predictions = {}11tradeName = ""12maxScan = None13minScan = None14tradeMoment = TradeMoment()15tradeFunction = None16tradeModel = None171819def __init__(self, tradeName, getTradeFunction):20self.tradeName = tradeName21self.tradeFunction = getTradeFunction22self.tradeModel = Training(self.__getModelFileName())23self.__loadHistory()2425if len(self.history) > 0:26self.minScan = min(self.history, key = int)27self.maxScan = max(self.history, key = int)282930def update(self):31self.__updateTradeData(updatePeriod = scanPeriod, onUpdateData = self.__onUpdateData)323334def __updateTradeData(self, updatePeriod, onUpdateData):35end = currentTimestamp()3637if self.maxScan is None or self.maxScan + scanInterval - updatePeriod < self.minScan:38start = end - updatePeriod39else:40start = int(self.maxScan) + 14142if self.tradeFunction is not None and end - start > scanInterval and \43((self.maxScan is None or (end - self.maxScan) > scanInterval) or44(self.minScan is None or start < self.minScan)) and \45(self.minScan is None or self.maxScan is None or (updatePeriod / (int(self.maxScan) - int(self.minScan)) < 0.9)):46self.tradeFunction(start, end, scanInterval, self.history, onUpdateData)47else:48onUpdateData()4950def __saveHistory(self):51with open(self.__getDataFileName(), 'wb') as saveFile:52dump(self.history, saveFile)535455def __loadHistory(self):56if path.isfile(self.__getDataFileName()):57with open(self.__getDataFileName(), 'rb') as loadFile:58self.history = load(loadFile)5960# get coin pair history in last hours61def getMomentData(self):62return self.tradeMoment.getMomentData(self.history, self.tradeModel)636465def getName(self):66return self.tradeName6768def __getDataFileName(self):69return 'data/' + self.__getFileName() + ".trade"7071def __getModelFileName(self):72return 'models/' + self.__getFileName()7374def __getFileName(self):75return ''.join([self.tradeName.replace(character, "_") for character in "\\/?*" if character in self.tradeName]).replace(' ', '_')767778def training(self):79self.__updateTradeData(updatePeriod = trainingPeriod, onUpdateData = self.__onUpdateTrainingData)8081if self.history is None:82print("Cannot collect data for training")83return False8485return True868788def __onUpdateTrainingData(self):89self.__onUpdateData()9091if self.history is None:92print("Cannot collect data for training")93return False94else:95self.tradeModel.train(self.history)96self.tradeModel.saveModel(self.__getModelFileName())97return True9899100def __onUpdateData(self):101if self.history is None or len(self.history) == 0:102self.minScan = None103self.maxScan = None104else:105self.minScan = min(self.history, key = int)106self.maxScan = max(self.history, key = int)107108self.history = dict(sorted(self.history.items()))109self.__saveHistory()110111