Kraken API 用于 OHLC 数据仅附加最新条目
Kraken API for OHLC data to only append latest entries
所以我在 Kraken API 上 运行 宁代码,我正在以 718 行和 8 列的 OHLC 数据的形式获取我想要的数据。我想获得有关此数据的实时更新,所以我想我会使用线程 运行 每 5 秒定期对代码进行处理,但这所做的只是一次又一次地打印整个数据块。
如何只附加上一个输出中不存在的数据。 IE。每五秒更新一次条目。
我的代码如下:
import krakenex
from pykrakenapi import KrakenAPI
import threading
api = krakenex.API()
api.load_key('/path/kraken.txt')
k = KrakenAPI(api)
ohlc, last = k.get_ohlc_data("BCHUSD")
def printit():
threading.Timer(5.0,printit).start()
print(ohlc)
printit()
Kraken OHLC endpoint设计了9种不同的时间间隔(1、5、15、30、60、240、1440、10080、21600分钟),其中1分钟为默认间隔。这样做的一个问题是您将无法使用此端点每 5 秒获取一次新数据,尽管每分钟都可以。
在这种情况下,您可以使用 OHLC 端点的 since
参数,如下所示,以获取您之前找到的最后一个实例之后的所有实例。
import time
import krakenex
import pandas as pd
from pykrakenapi import KrakenAPI
api = krakenex.API()
k = KrakenAPI(api)
# Initial OHLC dataframe
df, last = k.get_ohlc_data("BCHUSD", ascending=True)
# Infinite loop for additional OHLC data
while True:
# Wait 60 seconds
time.sleep(60)
# Get data and append to existing pandas dataframe
ohlc, last = k.get_ohlc_data("BCHUSD", since=last + 60000, ascending=True)
df = pd.concat([df, ohlc])
print(f'1 new data point downloaded. Total: {len(df.index)} data points.')
如果您想要以 5 秒为间隔获取 OHLC 数据,您将必须根据使用 Kraken Recent Trades endpoint 获得的交易数据自行构建此数据。
import time
import krakenex
import pandas as pd
import numpy as np
from pykrakenapi import KrakenAPI
from datetime import timedelta
def convert_to_ohlc(df, granularity):
# Determine time frame of data
since = df['time'].iloc[0] * 1000000000
to = df['time'].iloc[-1] * 1000000000
# Create an initial data table with entries from start till end time, with steps of 5 seconds
timestamps = pd.date_range(since, to, freq=str(granularity) + 's')
# Initialise output dataframe
output = pd.DataFrame(index=timestamps, columns=['open', 'high', 'low', 'close'])
# Step through data in steps of 5 seconds
df['dtime'] = df.index
df = df.set_index('time')
for i in range(0, len(output.index)):
# Select the relevant datapoints for this step
relevant_rows = df[
(df['dtime'] >= output.index[i]) &
(df['dtime'] < (output.index[i] +
timedelta(seconds=granularity)))
]
# Convert data in time frame to OHLC data
if len(relevant_rows) > 0 and not relevant_rows.empty:
# open
output.loc[output.index[i], 'open'] = relevant_rows['price'].iloc[0]
# high
output.loc[output.index[i], 'high'] = np.max(relevant_rows['price'])
# low
output.loc[output.index[i], 'low'] = np.min(relevant_rows['price'])
# close
output.loc[output.index[i], 'close'] = relevant_rows['price'].iloc[-1]
else:
for col in output.keys():
output.loc[output.index[i], str(col)] = np.nan
return output
api = krakenex.API()
k = KrakenAPI(api)
# Get trades data
df, last = k.get_recent_trades("BCHUSD", ascending=True)
# Convert data to OHLC data, steps of 5 seconds
df = convert_to_ohlc(df, 5)
# Infinite loop for additional OHLC data
while True:
# Wait 60 seconds for new trades to happen
time.sleep(60)
# Get new trades data
data, last = k.get_recent_trades("XBTUSD", since=last, ascending=True)
# Convert data to OHLC data, steps of 5 seconds
if not data.empty:
data = convert_to_ohlc(data, 5)
df = pd.concat([df, data])
print(f'{len(data.index)} new data point{"s" if len(data.index) > 1 else ""} downloaded. Total: {len(df.index)} data points.')
else:
print("Could not find new trades. Retrying...")
您应该意识到 OHLC 数据是在特定时间范围内进行的交易的汇总。在 5 秒内,通常不会进行任何交易,这意味着无法生成 OHLC 数据。可解释性是另一个问题,因为极少数交易的 OHLC 数据可能没有什么意义,尤其是当只进行了一笔交易时。
所以我在 Kraken API 上 运行 宁代码,我正在以 718 行和 8 列的 OHLC 数据的形式获取我想要的数据。我想获得有关此数据的实时更新,所以我想我会使用线程 运行 每 5 秒定期对代码进行处理,但这所做的只是一次又一次地打印整个数据块。
如何只附加上一个输出中不存在的数据。 IE。每五秒更新一次条目。
我的代码如下:
import krakenex
from pykrakenapi import KrakenAPI
import threading
api = krakenex.API()
api.load_key('/path/kraken.txt')
k = KrakenAPI(api)
ohlc, last = k.get_ohlc_data("BCHUSD")
def printit():
threading.Timer(5.0,printit).start()
print(ohlc)
printit()
Kraken OHLC endpoint设计了9种不同的时间间隔(1、5、15、30、60、240、1440、10080、21600分钟),其中1分钟为默认间隔。这样做的一个问题是您将无法使用此端点每 5 秒获取一次新数据,尽管每分钟都可以。
在这种情况下,您可以使用 OHLC 端点的 since
参数,如下所示,以获取您之前找到的最后一个实例之后的所有实例。
import time
import krakenex
import pandas as pd
from pykrakenapi import KrakenAPI
api = krakenex.API()
k = KrakenAPI(api)
# Initial OHLC dataframe
df, last = k.get_ohlc_data("BCHUSD", ascending=True)
# Infinite loop for additional OHLC data
while True:
# Wait 60 seconds
time.sleep(60)
# Get data and append to existing pandas dataframe
ohlc, last = k.get_ohlc_data("BCHUSD", since=last + 60000, ascending=True)
df = pd.concat([df, ohlc])
print(f'1 new data point downloaded. Total: {len(df.index)} data points.')
如果您想要以 5 秒为间隔获取 OHLC 数据,您将必须根据使用 Kraken Recent Trades endpoint 获得的交易数据自行构建此数据。
import time
import krakenex
import pandas as pd
import numpy as np
from pykrakenapi import KrakenAPI
from datetime import timedelta
def convert_to_ohlc(df, granularity):
# Determine time frame of data
since = df['time'].iloc[0] * 1000000000
to = df['time'].iloc[-1] * 1000000000
# Create an initial data table with entries from start till end time, with steps of 5 seconds
timestamps = pd.date_range(since, to, freq=str(granularity) + 's')
# Initialise output dataframe
output = pd.DataFrame(index=timestamps, columns=['open', 'high', 'low', 'close'])
# Step through data in steps of 5 seconds
df['dtime'] = df.index
df = df.set_index('time')
for i in range(0, len(output.index)):
# Select the relevant datapoints for this step
relevant_rows = df[
(df['dtime'] >= output.index[i]) &
(df['dtime'] < (output.index[i] +
timedelta(seconds=granularity)))
]
# Convert data in time frame to OHLC data
if len(relevant_rows) > 0 and not relevant_rows.empty:
# open
output.loc[output.index[i], 'open'] = relevant_rows['price'].iloc[0]
# high
output.loc[output.index[i], 'high'] = np.max(relevant_rows['price'])
# low
output.loc[output.index[i], 'low'] = np.min(relevant_rows['price'])
# close
output.loc[output.index[i], 'close'] = relevant_rows['price'].iloc[-1]
else:
for col in output.keys():
output.loc[output.index[i], str(col)] = np.nan
return output
api = krakenex.API()
k = KrakenAPI(api)
# Get trades data
df, last = k.get_recent_trades("BCHUSD", ascending=True)
# Convert data to OHLC data, steps of 5 seconds
df = convert_to_ohlc(df, 5)
# Infinite loop for additional OHLC data
while True:
# Wait 60 seconds for new trades to happen
time.sleep(60)
# Get new trades data
data, last = k.get_recent_trades("XBTUSD", since=last, ascending=True)
# Convert data to OHLC data, steps of 5 seconds
if not data.empty:
data = convert_to_ohlc(data, 5)
df = pd.concat([df, data])
print(f'{len(data.index)} new data point{"s" if len(data.index) > 1 else ""} downloaded. Total: {len(df.index)} data points.')
else:
print("Could not find new trades. Retrying...")
您应该意识到 OHLC 数据是在特定时间范围内进行的交易的汇总。在 5 秒内,通常不会进行任何交易,这意味着无法生成 OHLC 数据。可解释性是另一个问题,因为极少数交易的 OHLC 数据可能没有什么意义,尤其是当只进行了一笔交易时。