Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_NeuroInvest-main/NeuroInvest/trade_collection.py
5929 views
1
from config import scanInterval, scanPeriod, trainingPeriod
2
from trade_moment import TradeMoment
3
from training import Training
4
from utility import currentTimestamp
5
6
from joblib import dump, load
7
from os import path
8
9
class TradeCollection:
10
history = {}
11
predictions = {}
12
tradeName = ""
13
maxScan = None
14
minScan = None
15
tradeMoment = TradeMoment()
16
tradeFunction = None
17
tradeModel = None
18
19
20
def __init__(self, tradeName, getTradeFunction):
21
self.tradeName = tradeName
22
self.tradeFunction = getTradeFunction
23
self.tradeModel = Training(self.__getModelFileName())
24
self.__loadHistory()
25
26
if len(self.history) > 0:
27
self.minScan = min(self.history, key = int)
28
self.maxScan = max(self.history, key = int)
29
30
31
def update(self):
32
self.__updateTradeData(updatePeriod = scanPeriod, onUpdateData = self.__onUpdateData)
33
34
35
def __updateTradeData(self, updatePeriod, onUpdateData):
36
end = currentTimestamp()
37
38
if self.maxScan is None or self.maxScan + scanInterval - updatePeriod < self.minScan:
39
start = end - updatePeriod
40
else:
41
start = int(self.maxScan) + 1
42
43
if self.tradeFunction is not None and end - start > scanInterval and \
44
((self.maxScan is None or (end - self.maxScan) > scanInterval) or
45
(self.minScan is None or start < self.minScan)) and \
46
(self.minScan is None or self.maxScan is None or (updatePeriod / (int(self.maxScan) - int(self.minScan)) < 0.9)):
47
self.tradeFunction(start, end, scanInterval, self.history, onUpdateData)
48
else:
49
onUpdateData()
50
51
def __saveHistory(self):
52
with open(self.__getDataFileName(), 'wb') as saveFile:
53
dump(self.history, saveFile)
54
55
56
def __loadHistory(self):
57
if path.isfile(self.__getDataFileName()):
58
with open(self.__getDataFileName(), 'rb') as loadFile:
59
self.history = load(loadFile)
60
61
# get coin pair history in last hours
62
def getMomentData(self):
63
return self.tradeMoment.getMomentData(self.history, self.tradeModel)
64
65
66
def getName(self):
67
return self.tradeName
68
69
def __getDataFileName(self):
70
return 'data/' + self.__getFileName() + ".trade"
71
72
def __getModelFileName(self):
73
return 'models/' + self.__getFileName()
74
75
def __getFileName(self):
76
return ''.join([self.tradeName.replace(character, "_") for character in "\\/?*" if character in self.tradeName]).replace(' ', '_')
77
78
79
def training(self):
80
self.__updateTradeData(updatePeriod = trainingPeriod, onUpdateData = self.__onUpdateTrainingData)
81
82
if self.history is None:
83
print("Cannot collect data for training")
84
return False
85
86
return True
87
88
89
def __onUpdateTrainingData(self):
90
self.__onUpdateData()
91
92
if self.history is None:
93
print("Cannot collect data for training")
94
return False
95
else:
96
self.tradeModel.train(self.history)
97
self.tradeModel.saveModel(self.__getModelFileName())
98
return True
99
100
101
def __onUpdateData(self):
102
if self.history is None or len(self.history) == 0:
103
self.minScan = None
104
self.maxScan = None
105
else:
106
self.minScan = min(self.history, key = int)
107
self.maxScan = max(self.history, key = int)
108
109
self.history = dict(sorted(self.history.items()))
110
self.__saveHistory()
111