Initial commit
This commit is contained in:
+102
@@ -0,0 +1,102 @@
|
||||
from datetime import datetime
|
||||
|
||||
import ccxt
|
||||
import json
|
||||
from Common.CEnum import AUTYPE, DATA_FIELD, KL_TYPE
|
||||
from Common.CTime import CTime
|
||||
from Common.func_util import kltype_lt_day, str2float
|
||||
from KLine.KLine_Unit import CKLine_Unit
|
||||
|
||||
from .CommonStockAPI import CCommonStockApi
|
||||
|
||||
|
||||
def GetColumnNameFromFieldList(fileds: str):
|
||||
_dict = {
|
||||
"time": DATA_FIELD.FIELD_TIME,
|
||||
"open": DATA_FIELD.FIELD_OPEN,
|
||||
"high": DATA_FIELD.FIELD_HIGH,
|
||||
"low": DATA_FIELD.FIELD_LOW,
|
||||
"close": DATA_FIELD.FIELD_CLOSE,
|
||||
}
|
||||
return [_dict[x] for x in fileds.split(",")]
|
||||
|
||||
|
||||
class CCXT(CCommonStockApi):
|
||||
is_connect = None
|
||||
|
||||
def __init__(self, code, k_type=KL_TYPE.K_DAY, begin_date=None, end_date=None, autype=AUTYPE.QFQ):
|
||||
super(CCXT, self).__init__(code, k_type, begin_date, end_date, autype)
|
||||
|
||||
def get_kl_data(self):
|
||||
fields = "time,open,high,low,close"
|
||||
exchange = ccxt.binance()
|
||||
timeframe = self.__convert_type()
|
||||
since_date = exchange.parse8601(f'{self.begin_date}T08:00:00')
|
||||
|
||||
#file_path = "BTC_USDT-5m-futures.json"
|
||||
#with open(file_path, 'r') as file:
|
||||
# data = json.load(file)
|
||||
data = exchange.fetch_ohlcv(self.code, timeframe, since=since_date)
|
||||
for item in data:
|
||||
time_obj = datetime.fromtimestamp(item[0] / 1000)
|
||||
time_str = time_obj.strftime('%Y-%m-%d %H:%M:%S')
|
||||
item_data = [
|
||||
time_str,
|
||||
item[1],
|
||||
item[2],
|
||||
item[3],
|
||||
item[4],
|
||||
item[5]
|
||||
]
|
||||
yield CKLine_Unit(self.create_item_dict(item_data, GetColumnNameFromFieldList(fields)), autofix=True)
|
||||
|
||||
def SetBasciInfo(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def do_init(cls):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def do_close(cls):
|
||||
pass
|
||||
|
||||
def __convert_type(self):
|
||||
_dict = {
|
||||
KL_TYPE.K_DAY: '1d',
|
||||
KL_TYPE.K_WEEK: '1w',
|
||||
KL_TYPE.K_MON: '1M',
|
||||
KL_TYPE.K_5M: '5m',
|
||||
KL_TYPE.K_15M: '15m',
|
||||
KL_TYPE.K_30M: '30m',
|
||||
KL_TYPE.K_60M: '1h',
|
||||
KL_TYPE.K_1M: '1m', # need to add this 1m
|
||||
}
|
||||
return _dict[self.k_type]
|
||||
|
||||
def parse_time_column(self, inp):
|
||||
if len(inp) == 10:
|
||||
year = int(inp[:4])
|
||||
month = int(inp[5:7])
|
||||
day = int(inp[8:10])
|
||||
hour = minute = 0
|
||||
elif len(inp) == 17:
|
||||
year = int(inp[:4])
|
||||
month = int(inp[4:6])
|
||||
day = int(inp[6:8])
|
||||
hour = int(inp[8:10])
|
||||
minute = int(inp[10:12])
|
||||
elif len(inp) == 19:
|
||||
year = int(inp[:4])
|
||||
month = int(inp[5:7])
|
||||
day = int(inp[8:10])
|
||||
hour = int(inp[11:13])
|
||||
minute = int(inp[14:16])
|
||||
else:
|
||||
raise Exception(f"unknown time column from TradingView:{inp}")
|
||||
return CTime(year, month, day, hour, minute, auto=not kltype_lt_day(self.k_type))
|
||||
|
||||
def create_item_dict(self, data, column_name):
|
||||
for i in range(len(data)):
|
||||
data[i] = self.parse_time_column(data[i]) if i == 0 else str2float(data[i])
|
||||
return dict(zip(column_name, data))
|
||||
Reference in New Issue
Block a user