openfund-core 0.0.4__py3-none-any.whl → 1.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. core/Exchange.py +533 -0
  2. core/main.py +23 -0
  3. core/smc/SMCBase.py +130 -0
  4. core/smc/SMCFVG.py +86 -0
  5. core/smc/SMCLiquidity.py +7 -0
  6. core/smc/SMCOrderBlock.py +280 -0
  7. core/smc/SMCPDArray.py +75 -0
  8. core/smc/SMCStruct.py +296 -0
  9. core/smc/__init__.py +0 -0
  10. core/utils/OPTools.py +30 -0
  11. openfund_core-1.0.5.dist-info/METADATA +48 -0
  12. openfund_core-1.0.5.dist-info/RECORD +15 -0
  13. {openfund_core-0.0.4.dist-info → openfund_core-1.0.5.dist-info}/WHEEL +1 -1
  14. openfund_core-1.0.5.dist-info/entry_points.txt +3 -0
  15. openfund/core/__init__.py +0 -14
  16. openfund/core/api_tools/__init__.py +0 -16
  17. openfund/core/api_tools/binance_futures_tools.py +0 -23
  18. openfund/core/api_tools/binance_tools.py +0 -26
  19. openfund/core/api_tools/enums.py +0 -539
  20. openfund/core/base_collector.py +0 -72
  21. openfund/core/base_tool.py +0 -58
  22. openfund/core/factory.py +0 -97
  23. openfund/core/openfund_old/continuous_klines.py +0 -153
  24. openfund/core/openfund_old/depth.py +0 -92
  25. openfund/core/openfund_old/historical_trades.py +0 -123
  26. openfund/core/openfund_old/index_info.py +0 -67
  27. openfund/core/openfund_old/index_price_kline.py +0 -118
  28. openfund/core/openfund_old/klines.py +0 -95
  29. openfund/core/openfund_old/klines_qrr.py +0 -103
  30. openfund/core/openfund_old/mark_price.py +0 -121
  31. openfund/core/openfund_old/mark_price_klines.py +0 -122
  32. openfund/core/openfund_old/ticker_24hr_price_change.py +0 -99
  33. openfund/core/pyopenfund.py +0 -85
  34. openfund/core/services/um_futures_collector.py +0 -142
  35. openfund/core/sycu_exam/__init__.py +0 -1
  36. openfund/core/sycu_exam/exam.py +0 -19
  37. openfund/core/sycu_exam/random_grade_cplus.py +0 -440
  38. openfund/core/sycu_exam/random_grade_web.py +0 -404
  39. openfund/core/utils/time_tools.py +0 -25
  40. openfund_core-0.0.4.dist-info/LICENSE +0 -201
  41. openfund_core-0.0.4.dist-info/METADATA +0 -67
  42. openfund_core-0.0.4.dist-info/RECORD +0 -30
  43. {openfund/core/openfund_old → core}/__init__.py +0 -0
@@ -1,539 +0,0 @@
1
- from enum import Enum
2
-
3
- SYMBOL_TYPE_SPOT = "SPOT"
4
-
5
- ORDER_STATUS_NEW = "NEW"
6
- ORDER_STATUS_PARTIALLY_FILLED = "PARTIALLY_FILLED"
7
- ORDER_STATUS_FILLED = "FILLED"
8
- ORDER_STATUS_CANCELED = "CANCELED"
9
- ORDER_STATUS_PENDING_CANCEL = "PENDING_CANCEL"
10
- ORDER_STATUS_REJECTED = "REJECTED"
11
- ORDER_STATUS_EXPIRED = "EXPIRED"
12
-
13
-
14
- class KlineInterval(Enum):
15
- KLINE_INTERVAL_1SECOND = ("1s", 1, "s")
16
- KLINE_INTERVAL_1MINUTE = ("1m", 1, "m")
17
- KLINE_INTERVAL_3MINUTE = ("3m", 3, "m")
18
- KLINE_INTERVAL_5MINUTE = ("5m", 5, "m")
19
- KLINE_INTERVAL_15MINUTE = ("15m", 15, "m")
20
- KLINE_INTERVAL_30MINUTE = ("30m", 30, "m")
21
- KLINE_INTERVAL_1HOUR = ("1h", 1, "h")
22
- KLINE_INTERVAL_2HOUR = ("2h", 2, "h")
23
- KLINE_INTERVAL_4HOUR = ("4h", 4, "h")
24
- KLINE_INTERVAL_6HOUR = ("6h", 6, "h")
25
- KLINE_INTERVAL_8HOUR = ("8h", 8, "h")
26
- KLINE_INTERVAL_12HOUR = ("12h", 12, "h")
27
- KLINE_INTERVAL_1DAY = ("1d", 1, "d")
28
- KLINE_INTERVAL_3DAY = ("3d", 3, "d")
29
- KLINE_INTERVAL_1WEEK = ("1w", 1, "d")
30
- KLINE_INTERVAL_1MONTH = ("1M", 1, "M")
31
-
32
- def __init__(self, value: str, unit: int, unitType: str):
33
- self._value_ = value
34
- self.unit = unit
35
- self.unitType = unitType
36
-
37
- @classmethod
38
- def getByUnit(cls, unit: int, unitType: str) -> str:
39
- for interval in KlineInterval:
40
- if interval.unit == unit and interval.unitType == unitType:
41
- return interval.value
42
- return None
43
-
44
-
45
- # KLINE_INTERVAL_1SECOND = "1s"
46
- # KLINE_INTERVAL_1MINUTE = "1m"
47
- # KLINE_INTERVAL_3MINUTE = "3m"
48
- # KLINE_INTERVAL_5MINUTE = "5m"
49
- # KLINE_INTERVAL_15MINUTE = "15m"
50
- # KLINE_INTERVAL_30MINUTE = "30m"
51
- # KLINE_INTERVAL_1HOUR = "1h"
52
- # KLINE_INTERVAL_2HOUR = "2h"
53
- # KLINE_INTERVAL_4HOUR = "4h"
54
- # KLINE_INTERVAL_6HOUR = "6h"
55
- # KLINE_INTERVAL_8HOUR = "8h"
56
- # KLINE_INTERVAL_12HOUR = "12h"
57
- # KLINE_INTERVAL_1DAY = "1d"
58
- # KLINE_INTERVAL_3DAY = "3d"
59
- # KLINE_INTERVAL_1WEEK = "1w"
60
- # KLINE_INTERVAL_1MONTH = "1M"
61
-
62
- SIDE_BUY = "BUY"
63
- SIDE_SELL = "SELL"
64
-
65
- ORDER_TYPE_LIMIT = "LIMIT"
66
- ORDER_TYPE_MARKET = "MARKET"
67
- ORDER_TYPE_STOP_LOSS = "STOP_LOSS"
68
- ORDER_TYPE_STOP_LOSS_LIMIT = "STOP_LOSS_LIMIT"
69
- ORDER_TYPE_TAKE_PROFIT = "TAKE_PROFIT"
70
- ORDER_TYPE_TAKE_PROFIT_LIMIT = "TAKE_PROFIT_LIMIT"
71
- ORDER_TYPE_LIMIT_MAKER = "LIMIT_MAKER"
72
-
73
- FUTURE_ORDER_TYPE_LIMIT = "LIMIT"
74
- FUTURE_ORDER_TYPE_MARKET = "MARKET"
75
- FUTURE_ORDER_TYPE_STOP = "STOP"
76
- FUTURE_ORDER_TYPE_STOP_MARKET = "STOP_MARKET"
77
- FUTURE_ORDER_TYPE_TAKE_PROFIT = "TAKE_PROFIT"
78
- FUTURE_ORDER_TYPE_TAKE_PROFIT_MARKET = "TAKE_PROFIT_MARKET"
79
- FUTURE_ORDER_TYPE_LIMIT_MAKER = "LIMIT_MAKER"
80
- FUTURE_ORDER_TYPE_TRAILING_STOP_MARKET = "TRAILING_STOP_MARKET"
81
-
82
- TIME_IN_FORCE_GTC = "GTC" # Good till cancelled
83
- TIME_IN_FORCE_IOC = "IOC" # Immediate or cancel
84
- TIME_IN_FORCE_FOK = "FOK" # Fill or kill
85
- TIME_IN_FORCE_GTX = "GTX" # Post only order
86
-
87
- ORDER_RESP_TYPE_ACK = "ACK"
88
- ORDER_RESP_TYPE_RESULT = "RESULT"
89
- ORDER_RESP_TYPE_FULL = "FULL"
90
-
91
- WEBSOCKET_DEPTH_5 = "5"
92
- WEBSOCKET_DEPTH_10 = "10"
93
- WEBSOCKET_DEPTH_20 = "20"
94
-
95
- NO_SIDE_EFFECT_TYPE = "NO_SIDE_EFFECT"
96
- MARGIN_BUY_TYPE = "MARGIN_BUY"
97
- AUTO_REPAY_TYPE = "AUTO_REPAY"
98
- # BTC、ETH、Sol、matic、DYD、AAVE、GMT、STarl、LTC、Blur
99
- CUR_SYMBOL_POOL = [
100
- "AAVEUSDT",
101
- "BTCBUSD",
102
- "BTCDOMUSDT",
103
- "BTCSTUSDT",
104
- "BTCUSDT",
105
- "BTCUSDT_231229",
106
- "BTCUSDT_240329",
107
- "BLURUSDT",
108
- "DYDXUSDT",
109
- "ETHBTC",
110
- "ETHBUSD",
111
- "ETHUSDT",
112
- "ETHUSDT_231229",
113
- "ETHUSDT_240329",
114
- "GMTBUSD",
115
- "GMTUSDT",
116
- "LTCBUSD",
117
- "LTCUSDT",
118
- "MATICBUSD",
119
- "MATICUSDT",
120
- "SOLBUSD",
121
- "SOLUSDT",
122
- ]
123
-
124
- NEW_SYMBOL_POLL = [
125
- "BTCUSDT",
126
- "YFIUSDT",
127
- "ETHUSDT",
128
- "MKRUSDT",
129
- "BNBUSDT",
130
- "BCHUSDT",
131
- "XMRUSDT",
132
- "LTCUSDT",
133
- "AAVEUSDT",
134
- "COMPUSDT",
135
- "GMXUSDT",
136
- "BSVUSDT",
137
- "DASHUSDT",
138
- "EGLDUSDT",
139
- "TRBUSDT",
140
- "ZECUSDT",
141
- "KSMUSDT",
142
- "SOLUSDT",
143
- "ETCUSDT",
144
- "AVAXUSDT",
145
- "ENSUSDT",
146
- "NEOUSDT",
147
- "ZENUSDT",
148
- "ATOMUSDT",
149
- "LINKUSDT",
150
- "LPTUSDT",
151
- "APTUSDT",
152
- "AXSUSDT",
153
- "ARUSDT",
154
- "ANTUSDT",
155
- "UNIUSDT",
156
- "DOTUSDT",
157
- "ORDIUSDT",
158
- "FILUSDT",
159
- "BALUSDT",
160
- "ICPUSDT",
161
- "MASKUSDT",
162
- "QTUMUSDT",
163
- "SNXUSDT",
164
- "BADGERUSDT",
165
- "LDOUSDT",
166
- "OPUSDT",
167
- "UMAUSDT",
168
- "WLDUSDT",
169
- "APEUSDT",
170
- "NEARUSDT",
171
- "API3USDT",
172
- "BANDUSDT",
173
- "USDCUSDT",
174
- "ARBUSDT",
175
- "XTZUSDT",
176
- "SUSHIUSDT",
177
- "PERPUSDT",
178
- "THETAUSDT",
179
- "KNCUSDT",
180
- "EOSUSDT",
181
- "AGLDUSDT",
182
- "IMXUSDT",
183
- "MATICUSDT",
184
- "XRPUSDT",
185
- "MAGICUSDT",
186
- "STXUSDT",
187
- "OMGUSDT",
188
- "CRVUSDT",
189
- "SUIUSDT",
190
- "CELOUSDT",
191
- "BNTUSDT",
192
- "MINAUSDT",
193
- "STORJUSDT",
194
- "SANDUSDT",
195
- "MANAUSDT",
196
- "ADAUSDT",
197
- "RDNTUSDT",
198
- "BICOUSDT",
199
- "YGGUSDT",
200
- "FTMUSDT",
201
- "ZRXUSDT",
202
- "LRCUSDT",
203
- "BLURUSDT",
204
- "BATUSDT",
205
- "WOOUSDT",
206
- "ONTUSDT",
207
- "GMTUSDT",
208
- "IOTAUSDT",
209
- "CFXUSDT",
210
- "KLAYUSDT",
211
- "XLMUSDT",
212
- "ALGOUSDT",
213
- "FLMUSDT",
214
- "GRTUSDT",
215
- "TRXUSDT",
216
- "ALPHAUSDT",
217
- "CVCUSDT",
218
- "DOGEUSDT",
219
- "CHZUSDT",
220
- "HBARUSDT",
221
- "RENUSDT",
222
- "ZILUSDT",
223
- "RVNUSDT",
224
- "GALAUSDT",
225
- "PEOPLEUSDT",
226
- "IOSTUSDT",
227
- "RSRUSDT",
228
- "SLPUSDT",
229
- "GASUSDT",
230
- ]
231
-
232
-
233
- ALL_SYMBOL_POOL = [
234
- "1000BONKUSDT",
235
- "1000FLOKIUSDT",
236
- "1000LUNCBUSD",
237
- "1000LUNCUSDT",
238
- "1000PEPEUSDT",
239
- "1000SHIBBUSD",
240
- "1000SHIBUSDT",
241
- "1000XECUSDT",
242
- "1INCHUSDT",
243
- "AAVEUSDT",
244
- "ACHUSDT",
245
- "ADABUSD",
246
- "ADAUSDT",
247
- "AGIXBUSD",
248
- "AGIXUSDT",
249
- "AGLDUSDT",
250
- "ALGOUSDT",
251
- "ALICEUSDT",
252
- "ALPHAUSDT",
253
- "AMBBUSD",
254
- "AMBUSDT",
255
- "ANCBUSD",
256
- "ANKRUSDT",
257
- "ANTUSDT",
258
- "APEBUSD",
259
- "APEUSDT",
260
- "API3USDT",
261
- "APTBUSD",
262
- "APTUSDT",
263
- "ARBUSDT",
264
- "ARKMUSDT",
265
- "ARKUSDT",
266
- "ARPAUSDT",
267
- "ARUSDT",
268
- "ASTRUSDT",
269
- "ATAUSDT",
270
- "ATOMUSDT",
271
- "AUCTIONBUSD",
272
- "AUDIOUSDT",
273
- "AVAXBUSD",
274
- "AVAXUSDT",
275
- "AXSUSDT",
276
- "BADGERUSDT",
277
- "BAKEUSDT",
278
- "BALUSDT",
279
- "BANDUSDT",
280
- "BATUSDT",
281
- "BCHUSDT",
282
- "BEAMXUSDT",
283
- "BELUSDT",
284
- "BICOUSDT",
285
- "BIGTIMEUSDT",
286
- "BLUEBIRDUSDT",
287
- "BLURUSDT",
288
- "BLZUSDT",
289
- "BNBBTC",
290
- "BNBBUSD",
291
- "BNBUSDT",
292
- "BNTUSDT",
293
- "BNXUSDT",
294
- "BONDUSDT",
295
- "BSVUSDT",
296
- "BTCBUSD",
297
- "BTCDOMUSDT",
298
- "BTCSTUSDT",
299
- "BTCUSDT",
300
- "BTCUSDT_231229",
301
- "BTCUSDT_240329",
302
- "BTSUSDT",
303
- "C98USDT",
304
- "CAKEUSDT",
305
- "CELOUSDT",
306
- "CELRUSDT",
307
- "CFXUSDT",
308
- "CHRUSDT",
309
- "CHZUSDT",
310
- "CKBUSDT",
311
- "COCOSUSDT",
312
- "COMBOUSDT",
313
- "COMPUSDT",
314
- "COTIUSDT",
315
- "CRVUSDT",
316
- "CTKUSDT",
317
- "CTSIUSDT",
318
- "CVCUSDT",
319
- "CVXBUSD",
320
- "CVXUSDT",
321
- "CYBERUSDT",
322
- "DARUSDT",
323
- "DASHUSDT",
324
- "DEFIUSDT",
325
- "DENTUSDT",
326
- "DGBUSDT",
327
- "DODOBUSD",
328
- "DODOXUSDT",
329
- "DOGEBUSD",
330
- "DOGEUSDT",
331
- "DOTBUSD",
332
- "DOTUSDT",
333
- "DUSKUSDT",
334
- "DYDXUSDT",
335
- "EDUUSDT",
336
- "EGLDUSDT",
337
- "ENJUSDT",
338
- "ENSUSDT",
339
- "EOSUSDT",
340
- "ETCBUSD",
341
- "ETCUSDT",
342
- "ETHBTC",
343
- "ETHBUSD",
344
- "ETHUSDT",
345
- "ETHUSDT_231229",
346
- "ETHUSDT_240329",
347
- "FETUSDT",
348
- "FILBUSD",
349
- "FILUSDT",
350
- "FLMUSDT",
351
- "FLOWUSDT",
352
- "FOOTBALLUSDT",
353
- "FRONTUSDT",
354
- "FTMBUSD",
355
- "FTMUSDT",
356
- "FTTBUSD",
357
- "FTTUSDT",
358
- "FXSUSDT",
359
- "GALABUSD",
360
- "GALAUSDT",
361
- "GALBUSD",
362
- "GALUSDT",
363
- "GASUSDT",
364
- "GLMRUSDT",
365
- "GMTBUSD",
366
- "GMTUSDT",
367
- "GMXUSDT",
368
- "GRTUSDT",
369
- "GTCUSDT",
370
- "HBARUSDT",
371
- "HFTUSDT",
372
- "HIFIUSDT",
373
- "HIGHUSDT",
374
- "HNTUSDT",
375
- "HOOKUSDT",
376
- "HOTUSDT",
377
- "ICPUSDT",
378
- "ICXUSDT",
379
- "IDEXUSDT",
380
- "IDUSDT",
381
- "ILVUSDT",
382
- "IMXUSDT",
383
- "INJUSDT",
384
- "IOSTUSDT",
385
- "IOTAUSDT",
386
- "IOTXUSDT",
387
- "JASMYUSDT",
388
- "JOEUSDT",
389
- "KASUSDT",
390
- "KAVAUSDT",
391
- "KEYUSDT",
392
- "KLAYUSDT",
393
- "KNCUSDT",
394
- "KSMUSDT",
395
- "LDOBUSD",
396
- "LDOUSDT",
397
- "LEVERBUSD",
398
- "LEVERUSDT",
399
- "LINAUSDT",
400
- "LINKBUSD",
401
- "LINKUSDT",
402
- "LITUSDT",
403
- "LOOMUSDT",
404
- "LPTUSDT",
405
- "LQTYUSDT",
406
- "LRCUSDT",
407
- "LTCBUSD",
408
- "LTCUSDT",
409
- "LUNA2USDT",
410
- "MAGICUSDT",
411
- "MANAUSDT",
412
- "MASKUSDT",
413
- "MATICBUSD",
414
- "MATICUSDT",
415
- "MAVUSDT",
416
- "MBLUSDT",
417
- "MDTUSDT",
418
- "MEMEUSDT",
419
- "MINAUSDT",
420
- "MKRUSDT",
421
- "MTLUSDT",
422
- "NEARBUSD",
423
- "NEARUSDT",
424
- "NEOUSDT",
425
- "NKNUSDT",
426
- "NMRUSDT",
427
- "NTRNUSDT",
428
- "OCEANUSDT",
429
- "OGNUSDT",
430
- "OMGUSDT",
431
- "ONEUSDT",
432
- "ONTUSDT",
433
- "OPUSDT",
434
- "ORBSUSDT",
435
- "ORDIUSDT",
436
- "OXTUSDT",
437
- "PENDLEUSDT",
438
- "PEOPLEUSDT",
439
- "PERPUSDT",
440
- "PHBBUSD",
441
- "PHBUSDT",
442
- "POLYXUSDT",
443
- "POWRUSDT",
444
- "PYTHUSDT",
445
- "QNTUSDT",
446
- "QTUMUSDT",
447
- "RADUSDT",
448
- "RAYUSDT",
449
- "RDNTUSDT",
450
- "REEFUSDT",
451
- "RENUSDT",
452
- "RIFUSDT",
453
- "RLCUSDT",
454
- "RNDRUSDT",
455
- "ROSEUSDT",
456
- "RSRUSDT",
457
- "RUNEUSDT",
458
- "RVNUSDT",
459
- "SANDBUSD",
460
- "SANDUSDT",
461
- "SCUSDT",
462
- "SEIUSDT",
463
- "SFPUSDT",
464
- "SKLUSDT",
465
- "SLPUSDT",
466
- "SNTUSDT",
467
- "SNXUSDT",
468
- "SOLBUSD",
469
- "SOLUSDT",
470
- "SPELLUSDT",
471
- "SRMUSDT",
472
- "SSVUSDT",
473
- "STEEMUSDT",
474
- "STGUSDT",
475
- "STMXUSDT",
476
- "STORJUSDT",
477
- "STPTUSDT",
478
- "STRAXUSDT",
479
- "STXUSDT",
480
- "SUIUSDT",
481
- "SUSHIUSDT",
482
- "SXPUSDT",
483
- "THETAUSDT",
484
- "TIAUSDT",
485
- "TLMBUSD",
486
- "TLMUSDT",
487
- "TOKENUSDT",
488
- "TOMOUSDT",
489
- "TRBUSDT",
490
- "TRUUSDT",
491
- "TRXBUSD",
492
- "TRXUSDT",
493
- "TUSDT",
494
- "TWTUSDT",
495
- "UMAUSDT",
496
- "UNFIUSDT",
497
- "UNIBUSD",
498
- "UNIUSDT",
499
- "USDCUSDT",
500
- "VETUSDT",
501
- "WAVESBUSD",
502
- "WAVESUSDT",
503
- "WAXPUSDT",
504
- "WLDUSDT",
505
- "WOOUSDT",
506
- "XEMUSDT",
507
- "XLMUSDT",
508
- "XMRUSDT",
509
- "XRPBUSD",
510
- "XRPUSDT",
511
- "XTZUSDT",
512
- "XVGUSDT",
513
- "XVSUSDT",
514
- "YFIUSDT",
515
- "YGGUSDT",
516
- "ZECUSDT",
517
- "ZENUSDT",
518
- "ZILUSDT",
519
- "ZRXUSDT",
520
- ]
521
-
522
-
523
- class HistoricalKlinesType(Enum):
524
- SPOT = 1
525
- FUTURES = 2
526
- FUTURES_COIN = 3
527
-
528
-
529
- class FuturesType(Enum):
530
- USD_M = 1
531
- COIN_M = 2
532
-
533
-
534
- class ContractType(Enum):
535
- PERPETUAL = "PERPETUAL" # 永续期货合约
536
- CURRENT_QUARTER = "CURRENT_QUARTER"
537
- NEXT_QUARTER = "NEXT_QUARTER"
538
- NEXT_MONTH = "NEXT_MONTH"
539
- CURRENT_MONTH = "CURRENT_MONTH"
@@ -1,72 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import logging
4
- import csv
5
-
6
- from abc import abstractmethod
7
- from pathlib import Path
8
- from typing import TYPE_CHECKING
9
-
10
- from apscheduler.job import Job
11
-
12
- from openfund.core.pyopenfund import Openfund
13
- from openfund.core.factory import Factory
14
-
15
-
16
- logger = logging.getLogger(__name__)
17
-
18
-
19
- class Collector:
20
- def __init__(self, openfund: Openfund | None = None) -> None:
21
- self._openfund: Openfund = openfund
22
- if self._openfund is None:
23
- self._openfund = Factory.create_openfund()
24
- self._job: Job = None
25
-
26
- @property
27
- def openfund(self) -> Openfund:
28
- return self._openfund
29
-
30
- @abstractmethod
31
- def collect(self) -> None:
32
- raise NotImplementedError()
33
-
34
- @abstractmethod
35
- def start(self) -> int:
36
- raise NotImplementedError()
37
- # from apscheduler.schedulers.background import BlockingScheduler
38
-
39
- # apSchedule = BlockingScheduler()
40
- # self.openfund.scheduler.add_job(
41
- # func=self.collect, trigger="interval", minutes=5,seconds=5 id="um_futures_collector"
42
- # )
43
-
44
- def stop(self) -> int:
45
- if self._job is not None:
46
- self._job.remove()
47
- logger.debug(f"{self._job.name} is stop .")
48
- return 0
49
-
50
- def pause(self) -> int:
51
- if self._job is not None:
52
- self._job.pause()
53
- logger.debug(f"{self._job.name} is pause .")
54
- return 0
55
-
56
- def resume(self) -> int:
57
- if self._job is not None:
58
- self._job.resume()
59
- logger.debug(f"{self._job.name} is resume .")
60
- return 0
61
-
62
- def _write_to_csv(self, file: Path, listData: list) -> None:
63
-
64
- # 如果路径不存在,创建路径
65
- file.parent.mkdir(parents=True, exist_ok=True)
66
-
67
- with open(file, "a", newline="") as file:
68
- writer = csv.writer(file)
69
- # 时间戳倒序,插入文件尾部
70
- writer.writerows(sorted(listData, key=lambda x: x[0], reverse=True))
71
-
72
- logger.debug("2、{}条写入{}文件...".format(len(listData), file))
@@ -1,58 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import logging
4
-
5
- from pathlib import Path
6
-
7
- from typing import TYPE_CHECKING
8
-
9
- from poetry.utils.authenticator import Authenticator
10
- from binance.spot import Spot as Client
11
- from binance.um_futures import UMFutures as UMClient
12
-
13
- from openfund.core.pyopenfund import Openfund
14
- from openfund.core.factory import Factory
15
-
16
-
17
- logger = logging.getLogger(__name__)
18
-
19
-
20
- class Tool:
21
- def __init__(
22
- self, openfund: Openfund | None = None, toolname: str = "binance"
23
- ) -> None:
24
- self._openfund: Openfund = openfund
25
- if self._openfund is None:
26
- self._openfund = Factory.create_openfund()
27
-
28
- self._toolname = toolname
29
- self._password_manager = Authenticator(
30
- self._openfund._poetry.config
31
- )._password_manager
32
-
33
- self._client = None
34
- self._umclient = None
35
-
36
- @property
37
- def api_key(self) -> str:
38
- return self._password_manager.get_http_auth(self._toolname).get("username")
39
-
40
- @property
41
- def apk_secret(self) -> str:
42
- return self._password_manager.get_http_auth(self._toolname).get("password")
43
-
44
- @property
45
- def openfund(self) -> Openfund:
46
- return self._openfund
47
-
48
- @property
49
- def client(self) -> Client:
50
- if self._client is None:
51
- self._client = Client(self.api_key, self.apk_secret)
52
- return self._client
53
-
54
- @property
55
- def umclient(self) -> UMClient:
56
- if self._umclient is None:
57
- self._umclient = UMClient(self.api_key, self.apk_secret)
58
- return self._umclient