Skip to content

Commit bcc63b6

Browse files
committed
Merge branch 'feature/db' into 'develop'
修改db 部分代码 See merge request phonegap/alphahunter!4
2 parents dc3c047 + a72cb09 commit bcc63b6

File tree

2 files changed

+23
-47
lines changed

2 files changed

+23
-47
lines changed

db/insert_data/generate_kline.py

+17-41
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,16 @@
77
from models import Trade, Symbol, Exchange, Kline
88

99

10-
one_day = 60 * 60 * 24 * 1000
10+
ONE_DAY = 60 * 60 * 24 * 1000 # 一天毫秒数
1111
LIMIT = 500
1212

1313

1414
async def main():
1515
begin_timestamp = 1575129600000 # 开始时间, 12-1 00:00:00.000
16-
# end_timestamp = 1578585600000 # 结束时间 01-10 00:00:00.000
17-
end_timestamp = begin_timestamp + one_day * 2
18-
for begin_dt in range(begin_timestamp, end_timestamp, one_day):
16+
end_timestamp = 1578585600000 # 结束时间 01-10 00:00:00.000
17+
# end_timestamp = begin_timestamp + ONE_DAY * 2
18+
for begin_dt in range(begin_timestamp, end_timestamp, ONE_DAY):
1919
await day_loop(begin_dt)
20-
# 计算
21-
# 存储
2220

2321

2422
async def day_loop(begin_dt):
@@ -34,23 +32,27 @@ async def day_loop(begin_dt):
3432
# 查询trade数据
3533
trade = Trade(exchange_name, focus_symbol)
3634
kline = Kline(exchange_name, focus_symbol)
37-
await insert(trade, kline, begin_dt)
35+
36+
# 计算
37+
klines = await calculate(trade, kline, begin_dt)
38+
39+
# 存储
40+
await insert(kline, begin_dt, klines)
3841
break
3942

4043

41-
async def insert(trade, kline, begin_timestamp):
44+
async def calculate(trade, kline, begin_timestamp):
4245
# 查询上一天最后一笔trade数据的trade price
4346
prev_close_price = await query_prev_close_price(begin_timestamp, trade)
4447
prev_kline = await query_prev_kline(kline, begin_timestamp)
45-
print(prev_kline, "prev_kline")
4648

4749
klines = []
4850
kline_document = {}
4951
update_flag = True # 是否使用update_one
5052

5153
# 按照 kline 时间段划分
5254
# for begin_dt in range(begin_timestamp, begin_timestamp + kline.interval * 5, kline.interval):
53-
for begin_dt in range(begin_timestamp, begin_timestamp + one_day, kline.interval):
55+
for begin_dt in range(begin_timestamp, begin_timestamp + ONE_DAY, kline.interval):
5456
end_dt = begin_dt + kline.interval
5557
kline_document = {
5658
"begin_dt": begin_dt,
@@ -112,14 +114,11 @@ async def insert(trade, kline, begin_timestamp):
112114
open_trades = []
113115
close_trades = []
114116
tradeprices = []
115-
sum_amount_check = 0 # TODO: 之后删除
116117

117118
duration = kline.interval * 0.2
118119

119120
for t_document in trades:
120121
tradeprices.append(t_document["tradeprice"])
121-
# TODO: amount_check = sum(trade price * volume)
122-
sum_amount_check += t_document["tradeprice"] * t_document["volume"]
123122

124123
if t_document["direction"] == "buy":
125124
buy_trades.append(t_document)
@@ -135,7 +134,6 @@ async def insert(trade, kline, begin_timestamp):
135134
low = min(tradeprices) if tradeprices else 0.0
136135
kline_document["high"] = high
137136
kline_document["low"] = low
138-
kline_document["amount_check"] = sum_amount_check
139137

140138
kline_document["book_count"] = len(trades)
141139
kline_document["buy_book_count"] = len(buy_trades)
@@ -184,18 +182,13 @@ async def insert(trade, kline, begin_timestamp):
184182
kline_document["sectional_sell_book_count"] = prev_kline.get("sectional_sell_book_count", 0.0) + \
185183
kline_document["sell_book_count"]
186184

187-
# TODO: check open_avg_check = sum(trade price * volume) / sum(volume)
188185
if open_trades:
189186
results = handle_documents(open_trades)
190187
kline_document["open_avg"] = results["avg_price"]
191-
# TODO: 删除check
192-
kline_document["open_avg_check"] = get_avg_check(open_trades)
193188

194189
if close_trades:
195190
results = handle_documents(close_trades)
196191
kline_document["close_avg"] = results["avg_price"]
197-
# TODO: 删除check
198-
kline_document["close_avg_check"] = get_avg_check(close_trades)
199192

200193
kline_document["lag_ret"] = math.log(kline_document["close_avg"] / prev_kline["close_avg"]) \
201194
if prev_kline["close_avg"] and kline_document["close_avg"] else None
@@ -226,14 +219,18 @@ async def insert(trade, kline, begin_timestamp):
226219

227220
# 加上最后一个没有prev_price 的kline
228221
klines.append(InsertOne(kline_document))
222+
return klines
223+
224+
225+
async def insert(kline, begin_timestamp, klines):
229226
for offset in range(0, len(klines), LIMIT):
230227
result = await kline.insert_many(klines[offset: offset + LIMIT])
231228
print(result.bulk_api_result, begin_timestamp, kline.collection_name)
232229

233230

234231
async def query_prev_close_price(begin_timestamp, trade):
235232
prev_trade_cursor = trade.collection.find(
236-
{"tradedt": {"$gte": begin_timestamp - one_day, "$lt": begin_timestamp}}).sort("tradedt", -1)
233+
{"tradedt": {"$gte": begin_timestamp - ONE_DAY, "$lt": begin_timestamp}}).sort("tradedt", -1)
237234
prev_trades = [t_document for t_document in await prev_trade_cursor.to_list(length=1)]
238235
prev_close_price = prev_trades[0].get("tradeprice", 0.0) if prev_trades else 0.0
239236

@@ -250,19 +247,6 @@ async def query_prev_kline(kline, begin_timestamp):
250247
}
251248

252249

253-
async def calculate():
254-
pass
255-
256-
257-
def get_avg_check(documents):
258-
divisor = 0
259-
denominator = 0
260-
for document in documents:
261-
divisor += document["tradeprice"] * document["volume"]
262-
denominator += document["volume"]
263-
return divisor / denominator
264-
265-
266250
def handle_documents(documents):
267251
sum_amount = 0
268252
sum_volume = 0
@@ -277,14 +261,6 @@ def handle_documents(documents):
277261
}
278262

279263

280-
async def get_df():
281-
kline = Kline(exchange_name="binance", symbol_name="btcusdt")
282-
begin = 1575129600000 + 60 * 60 * 8 * 1000
283-
end = 1575129600000 + 60 * 60 * 10 * 1000
284-
df = await kline.get_df_from_table({"begin_dt": {"$gte": begin, "$lt": end}})
285-
print(df)
286-
287-
288264
if __name__ == '__main__':
289265
# TODO: 根据传入参数决定生成的kline种类
290266
loop = asyncio.get_event_loop()

db/insert_data/run.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,12 @@ def direction_change(series):
141141

142142

143143
def str_2_timestamp(series):
144-
data_str = series.get("tradedt") or series.get("dt")
145-
d = datetime.datetime.strptime(data_str, "%Y-%m-%d %H:%M:%S.%f")
146-
t = d.timetuple()
147-
timestamp = int(time.mktime(t)) * 1000 + round(d.microsecond / 1000)
148-
# 转换为东八区时间, 并转换为毫秒数
149-
timestamp = timestamp + 60 * 60 * 8 * 1000
144+
utc_date_str = series.get("tradedt") or series.get("dt")
145+
utc_d = datetime.datetime.strptime(utc_date_str, "%Y-%m-%d %H:%M:%S.%f")
146+
# 转换为本地(东八区)时间, 加8小时
147+
local_d = utc_d + datetime.timedelta(hours=8)
148+
t = local_d.timetuple()
149+
timestamp = int(time.mktime(t)) * 1000 + round(local_d.microsecond / 1000)
150150
return timestamp
151151

152152

0 commit comments

Comments
 (0)