44import functions as function
55from bots .variables import Variables as bot
66from common .variables import Variables as var
7+ from ws .init import Variables as ws
78
89
910def load_robots (db : str ) -> dict :
@@ -90,8 +91,8 @@ def load_robots(db: str) -> dict:
9091 "POS" : pos ,
9192 "EMI" : symbol ,
9293 "STATUS" : "RESERVED" ,
93- "TIMEFR" : None ,
94- "CAPITAL" : None ,
94+ "TIMEFR" : " None" ,
95+ "CAPITAL" : " None" ,
9596 }
9697
9798 # Loading all transactions and calculating financial results for each robot
@@ -123,9 +124,6 @@ def load_robots(db: str) -> dict:
123124 str (bot .robots [emi ][col ]), "%Y-%m-%d %H:%M:%S"
124125 )
125126 bot .robots [emi ]["PNL" ] = 0
126- bot .robots [emi ]["FRAME" ] = bot .robots [emi ]["SYMBOL" ] + str (
127- bot .robots [emi ]["TIMEFR" ]
128- )
129127 bot .robots [emi ]["lotSize" ] = (
130128 var .instruments [bot .robots [emi ]["SYMBOL" ]]["lotSize" ]
131129 / var .instruments [bot .robots [emi ]["SYMBOL" ]]["myMultiplier" ]
@@ -141,7 +139,7 @@ def download_data(
141139) -> Tuple [Union [list , None ], Union [datetime , None ]]:
142140 res = list ()
143141 while target > time :
144- data = var . ws .trade_bucketed (symbol = symbol , time = time , timeframe = timeframe )
142+ data = ws . bitmex .trade_bucketed (symbol = symbol , time = time , timeframe = timeframe )
145143 if data :
146144 last = time
147145 time = datetime .strptime (
@@ -163,20 +161,28 @@ def download_data(
163161 )
164162 var .logger .error (message )
165163 return None , None
166- var . ws .logNumFatal = 0
164+ ws . bitmex .logNumFatal = 0
167165
168166 return res , time
169167
170168
171169def load_frames (
172- robot : dict , frames : dict , framing : dict , timeframe : str
170+ robot : dict ,
171+ frames : dict ,
173172) -> Union [dict , None ]:
174173 """
175174 Loading usual candlestick data from the exchange server. Data is recorded
176175 in files for each algorithm. Every time you reboot the files are
177176 overwritten.
178177 """
179- filename = "data/" + timeframe + "_EMI" + robot ["EMI" ] + ".txt"
178+ filename = (
179+ "data/"
180+ + robot ["SYMBOL" ]
181+ + str (robot ["TIMEFR" ])
182+ + "_EMI"
183+ + robot ["EMI" ]
184+ + ".txt"
185+ )
180186 with open (filename , "w" ):
181187 pass
182188 target = datetime .utcnow ()
@@ -190,7 +196,7 @@ def load_frames(
190196 res , time = download_data (
191197 time = time ,
192198 target = target ,
193- symbol = framing [ timeframe ][ "symbol " ],
199+ symbol = robot [ "SYMBOL " ],
194200 timeframe = var .timefrs [robot ["TIMEFR" ]],
195201 )
196202 if not res :
@@ -199,30 +205,35 @@ def load_frames(
199205 # The 'frames' array is filled with timeframe data.
200206
201207 for num , row in enumerate (res ):
202- utc = datetime .strptime (
203- row [ "timestamp" ][ 0 : 19 ], "%Y-%m-%dT%H:%M:%S"
204- ) - timedelta ( minutes = robot [ "TIMEFR" ])
205- frames [timeframe ].append (
208+ tm = datetime .strptime ( row [ "timestamp" ][ 0 : 19 ], "%Y-%m-%dT%H:%M:%S" ) - timedelta (
209+ minutes = robot [ "TIMEFR" ]
210+ )
211+ frames [robot [ "SYMBOL" ]][ robot [ "TIMEFR" ]][ "data" ].append (
206212 {
207- "date" : (utc .year - 2000 ) * 10000 + utc .month * 100 + utc .day ,
208- "time" : utc .hour * 10000 + utc .minute * 100 ,
213+ "date" : (tm .year - 2000 ) * 10000 + tm .month * 100 + tm .day ,
214+ "time" : tm .hour * 10000 + tm .minute * 100 ,
209215 "bid" : float (row ["open" ]),
210216 "ask" : float (row ["open" ]),
211217 "hi" : float (row ["high" ]),
212218 "lo" : float (row ["low" ]),
213- "funding" : 0 ,
214- "datetime" : utc ,
219+ "datetime" : tm ,
215220 }
216221 )
217222 if num < len (res [:- 1 ]) - 1 :
218223 function .save_timeframes_data (
219224 emi = robot ["EMI" ],
220- timeframe = timeframe ,
221- frame = frames [timeframe ][- 1 ],
225+ symbol = robot ["SYMBOL" ],
226+ timefr = str (robot ["TIMEFR" ]),
227+ frame = frames [robot ["SYMBOL" ]][robot ["TIMEFR" ]]["data" ][- 1 ],
222228 )
223- framing [ timeframe ][ " time" ] = utc
229+ frames [ robot [ "SYMBOL" ]][ robot [ "TIMEFR" ]][ " time" ] = tm
224230
225- message = "Downloaded missing data from the exchange for " + timeframe
231+ message = (
232+ "Downloaded missing data from the exchange for symbol="
233+ + robot ["SYMBOL" ]
234+ + " TIMEFR="
235+ + str (robot ["TIMEFR" ])
236+ )
226237 var .logger .info (message )
227238 function .info_display (message )
228239
@@ -231,40 +242,36 @@ def load_frames(
231242
232243def init_timeframes () -> Union [dict , None ]:
233244 for emi in bot .robots :
234- # Initialize candlestick timeframe data using 'TIMEFR' fields
245+ # Initialize candlestick timeframe data using 'TIMEFR' fields
235246 # expressed in minutes.
236- if bot .robots [emi ]["TIMEFR" ]:
247+ if bot .robots [emi ]["TIMEFR" ] != "None" :
237248 time = datetime .utcnow ()
249+ symbol = bot .robots [emi ]["SYMBOL" ]
250+ timefr = bot .robots [emi ]["TIMEFR" ]
238251 try :
239- bot .frames [bot .robots [emi ]["FRAME" ]]
240- bot .framing [bot .robots [emi ]["FRAME" ]]["robots" ].append (emi )
252+ bot .frames [symbol ]
241253 except KeyError :
242- bot .frames [bot .robots [emi ]["FRAME" ]] = []
243- bot .framing [bot .robots [emi ]["FRAME" ]] = {
244- "symbol" : bot .robots [emi ]["SYMBOL" ],
245- "timefr" : bot .robots [emi ]["TIMEFR" ],
246- "time" : time ,
247- "robots" : [],
248- "open" : 0 ,
249- "trigger" : 0 ,
250- }
251- bot .framing [bot .robots [emi ]["FRAME" ]]["robots" ].append (emi )
252- for num , symbol in enumerate (var .symbol_list ):
253- if symbol == bot .framing [bot .robots [emi ]["FRAME" ]]["symbol" ]:
254- bot .framing [bot .robots [emi ]["FRAME" ]]["SYMBOL" ] = num
255- break
256- res = load_frames (
257- robot = bot .robots [emi ],
258- frames = bot .frames ,
259- framing = bot .framing ,
260- timeframe = bot .robots [emi ]["FRAME" ],
261- )
262- if not res :
263- message = (
264- "The emi " + emi + " candle timeframe data was not loaded!"
254+ bot .frames [symbol ] = dict ()
255+ try :
256+ bot .frames [symbol ][timefr ]
257+ except KeyError :
258+ bot .frames [symbol ][timefr ] = {
259+ "time" : time ,
260+ "robots" : [],
261+ "open" : 0 ,
262+ "data" : [],
263+ }
264+ bot .frames [symbol ][timefr ]["robots" ].append (emi )
265+ res = load_frames (
266+ robot = bot .robots [emi ],
267+ frames = bot .frames ,
265268 )
266- var .logger .error (message )
267- return None
269+ if not res :
270+ message = (
271+ "The emi " + emi + " candle timeframe data was not loaded!"
272+ )
273+ var .logger .error (message )
274+ return None
268275
269276 return bot .frames
270277
0 commit comments