抽象的
我们的交易软件肯定会消耗一些市场数据。使用市场数据的最直接方法是分析市场并为我们的交易系统产生某种信号。但是我们还可以收集大量数据,以进一步构建分析模型,训练ML算法,准备报告等。
市场数据通常是从数据提供商,交流和其他来源收集的。我们将学习如何生成合成市场数据。稍后,我们将收到来自外部提供商的数据,我们将出于教育目的建立一个数据存储系统。
什么是市场数据
市场数据通常意味着价格。它包括有关发生的贸易的事实:交换名称,资产名称,价格,数量,贸易时间戳等。现在,我们将讨论两种最常见的市场数据类型:ohlcv和ticks。
OHLCV
首先,一些定义。 OHLCV是市场数据合并为一个街区,这并不是真正的精确性,但是它使交易者对市场发生的情况有了一般的了解。
OHLCV对应于开放,高,低,关闭,卷 - 这是有关在一段时间内关闭交易的信息(例如,1分钟,15分钟,1小时,1天等)。 p>
例如,我们说我们谈论BTC/USDT市场; OHLCV数据收集了一天。在这样的时期,可以在Binance等大型交易所进行数千笔交易。 OHLCV仅提供一般信息:首次交易是以19123美元的价格(o),最高的价格为19347 $(h),最低价格为18900美元(l),最后的价格为19041 $(C ),此期间所有交易的总和为223500(v)。
当然,我们的数据标有时间戳,因此我们可以轻松理解何时执行这些交易。在我们的示例中,数据从2021年10月22日至2022年10月20日收集。
。tick
tick数据是关于交换中发生的每个单独交易的信息。那些需要更多有关市场的细节的人更喜欢tick数据。
在此示例中,我们通过Websocket连接到DYDX分散交换。我们的刻度数据包括每个交易的时间戳,符号(例如BTC/USD),侧面(买卖)和金额(在BTC中)。
合成数据
我们的目标是了解不同数据消耗,存储和操纵方法的利弊,我们将需要大量数据。我们将使用合成数据生成,因为它很容易生成具有相同功能的10或1000万个数据样本。
首先,让我们定义一些可以使用的基本数据类。
class OHLCV:
def __init__(self, timestamp, open, high, low, close, volume):
self.timestamp = timestamp
self.open = open
self.high = high
self.low = low
self.close = close
self.volume = volume
class Tick:
def __init__(self, timestamp, symbol, side, amount, price, exchange):
self.timestamp = timestamp
self.symbol = symbol
self.side = side
self.amount = amount
self.price = price
self.exchange = exchange
现在我们将创建另一个类,数据样本。它将用于生成合成数据。我们现在将实施3种方法:
- 生成()生成单个数据样本
- build()使用生成函数生成数据集
- plot()可视化我们的数据
class DataSample:
def __init__(self):
pass
def generate(self):
'''generates 1 data sample'''
pass
def build(self):
'''builds a dataframe of data samples'''
pass
def plot(self):
'''visualizes our dataset'''
pass
现在,我们将构建另外2个datasampleOhlcv和datasampleticks。他们俩都将实现生成,构建和绘制的方法。
生成功能将使用随机库,因此我们的价格看起来更自然。每个下一个生成的价格将与Previos略有不同。
datasampleOhlcv和datasampleticks代码可在我的GitHub repo中获得。
最后,还有一件事。它将同时使用datasampleOhlcv和datasampleticks类,并将作为单个接口来生成合成数据。
class DataGenerator:
def __init__(self):
self.ticks = DataSampleTicks()
self.ohlcv = DataSampleOHLCV()
def run_ticks(self):
data = self.ticks.build(n = 10000)
self.ticks.plot(data)
return data
def run_ohlcv(self):
data = self.ohlcv.build(n = 1000)
self.ohlcv.plot(data)
return data
现在让我们运行代码,看看会发生什么!
生成的OHLCV,1K样品。
生成的刻度数据,10k样品。
该代码可在我的GitHub repo中获得。