Created time
Aug 12, 2023 3:32 PM
Submitted at
發問人 暱稱
sheng
Tags
量化交易證券交易所API
Status
已解決
- 關於 Binance API,取歷史 k 棒條件如下:
- timeframe: 較小時區 ( e.g. 1m、5m )
- start datetime: 從該貨幣對上線時間起
- end datetime: 現在
- 想尋問有辦法取得 “所有完整的” k棒資料嗎?
- 有 sleep
- 且沒有超過 API rate limit
Jo Chen:
Hi sheng, 有辦法,只是較小時區會花比較長的時間
給你一個單線程、單個貨幣對的 pseudo code 你試試看(虛擬碼,意思是一個框架的想法,不是完整程式碼)
full_klines = []
now_time = int(time.time() * 1000)
start_time = 一開始上線時間
while True:
response = client.klines(填入你要的貨幣對所需參數)
if len(full_klines) == 0:
full_klines = 複製一份 response
else:
full_klines.extends(response)
if response 的最後一個 list (也就是最後一根 K 棒)的時間 == now_time:
break
else:
start_time = 目前取到的最後一根 K 棒的收線時間
time.sleep(睡一陣子)
以上的意思就是用一個無限迴圈,不斷檢查已經取到最後想要的時間了沒,拼接起來,如果已經取到了就退出迴圈
要注意幾個點:
- K 棒收線時間跟開始時間不要搞混
- 這裡沒有計算該睡多久這件事,要計算的話就是設定一個變數來存現在要求權重累積到多少了、還有一個是設定重新計算權重時間,然後每次要求 K 棒之前檢查一下是否可以重新累計權重了(過一分鐘了嗎)、權重累積是不是要超過上限了,是就直接睡到下次重新計算的時候。不過實務上.我的計時器是另一個線程在進行
cool:
hey sheng 我比較熟悉 JavaScript,參考了 Yun-Qiao Chen 的 pseudo code,就嘗試來實現單個加密貨幣自幣安上線開始獲取它的現貨歷史資料,可能能借鑒實現的方式。
有使用到異步(同時多個)發送請求,來進行一定程度的優化執行。 (但 JavaScript 是單線程…XD)
‣
‣
‣
‣
‣
Jo Chen:
好讚!順便學到 JS 會怎麼寫 XD
另外其實比較小的時區要加快也可以切開分給多線程做
我可以在 tg 上呼喊大家來看你寫的嗎
cool:
在想可不可以餵給 GPT,直接轉 Python 來跑(還沒試…XD) JavaScript 只能單線程,不過我有用到異步執行,多線程要移去 Node.js 上了, 我多線程也不算很熟練要看看了 XD 當然可以喲~ 我還沒改成跑完下載全部加密貨幣對
Jo Chen:
有這個工具 我之前有看到 Embed GitHub 這裡