지난 기사에서, 나는 거래량 축적 모델링과 가격 충격 현상을 간단하게 분석하는 방법을 소개했다. 이 기사에는 거래 주문 데이터를 중심으로 분석을 계속할 것이다.
일반적으로, 주문의 도착시간이 파르산 프로세스에 맞게 가정됩니다.파르산 과정◎ 아래에서 증명하겠습니다.
8월 5일 다운로드된 aggTrades, 총 1,931193개의 트레이드, 매우 과장되었다. 먼저 지불의 분포를 살펴보면, 100ms와 500ms 정도에서 매끄럽지 않은 지역 정점을 볼 수 있다.
파산 분포의 확률 질량 함수 (PMF) 는 다음과 같은 공식으로 주어진다.
그 중 하나는:
파산 과정에서 사건들 사이의 시간 간격은 지수 분포에 복종한다. 지수 분포의 확률 밀도 함수 (PDF) 는 다음과 같은 공식으로 주어진다.
합성 결과 결과와 파르산 분포의 예상 차이가 크다는 것을 발견함으로써, 파르산 프로세스는 긴 간격 시간의 빈도를 과소평가하고 낮은 간격 시간의 빈도를 과대평가했다. (실제 간격의 분포는 수정된 파레토 분포에 더 가깝다.)
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
trades = pd.read_csv('YGGUSDT-aggTrades-2023-08-05.csv')
trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
buy_trades = buy_trades.groupby('transact_time').agg({
'agg_trade_id': 'last',
'price': 'last',
'quantity': 'sum',
'first_trade_id': 'first',
'last_trade_id': 'last',
'is_buyer_maker': 'last',
'date': 'last',
'transact_time':'last'
})
buy_trades['interval']=buy_trades['transact_time'] - buy_trades['transact_time'].shift()
buy_trades.index = buy_trades['date']
buy_trades['interval'][buy_trades['interval']<1000].plot.hist(bins=200,figsize=(10, 5));
Intervals = np.array(range(0, 1000, 5))
mean_intervals = buy_trades['interval'].mean()
buy_rates = 1000/mean_intervals
probabilities = np.array([np.mean(buy_trades['interval'] > interval) for interval in Intervals])
probabilities_s = np.array([np.e**(-buy_rates*interval/1000) for interval in Intervals])
plt.figure(figsize=(10, 5))
plt.plot(Intervals, probabilities)
plt.plot(Intervals, probabilities_s)
plt.xlabel('Intervals')
plt.ylabel('Probability')
plt.grid(True)
통계 1s 내의 주문의 발생 횟수 분포와 파산 분포를 비교하면, 또한 매우 명확한 차이가 있다. 파산 분포는 소 확률 사건의 발생 빈도를 크게 과소평가한다. 가능한 이유:
즉, 실제 환경에서는 주문이 발생하는 빈도가 불변하고 실시간으로 업데이트가 필요하며, 고정된 시간에 더 많은 주문이 더 많은 주문을 자극한다는 인센티브 작용이 발생합니다. 이것은 전략이 단 하나의 매개 변수를 고정할 수 없도록 만듭니다.
result_df = buy_trades.resample('0.1S').agg({
'price': 'count',
'quantity': 'sum'
}).rename(columns={'price': 'order_count', 'quantity': 'quantity_sum'})
count_df = result_df['order_count'].value_counts().sort_index()[result_df['order_count'].value_counts()>20]
(count_df/count_df.sum()).plot(figsize=(10,5),grid=True,label='sample pmf');
from scipy.stats import poisson
prob_values = poisson.pmf(count_df.index, 1000/mean_intervals)
plt.plot(count_df.index, prob_values,label='poisson pmf');
plt.legend() ;
앞서 주문 간격에 대한 분석을 통해 고정된 매개 변수가 실제 시장 시장에 적합하지 않으며 전략의 시장 설명에 대한 핵심 매개 변수가 실시간 업데이트가 필요하다는 결론을 내릴 수 있다. 가장 쉽게 생각할 수 있는 방법은 슬라이딩 윈도우의 이동 평균이다. 아래의 두 그래프는 각각 1s 내의 결제 빈도와 거래량 1000개의 창구의 평균값이다. 거래 집적 현상이 존재한다는 것을 볼 수 있다. 즉, 일정 기간 동안 주문의 빈도가 정상보다 현저히 높고, 이 시간 동안의 양도 동시적으로 크다. 여기서 상위 평균값을 사용하여 최신 1초의 예상값을 측정하고, 예상 잔여의 평균값의 절대 오류의 평균값을 사용하여 예측의 양을 측정한다.
이 그래프에서도 주문 빈도가 파산 분포에서 왜 그렇게 많이 벗어나는지 알 수 있다. 초당 주문 수의 평균 값은 8.5번밖에 되지 않지만, 극단적인 상황에서는 초당 주문의 평균 값은 크게 벗어난다.
여기서 첫 두 초의 평균값을 사용하여 파러디크 오류가 최소이며 단순한 평균값 예측 결과보다 훨씬 낫다는 것이 밝혀졌습니다.
result_df['order_count'][::10].rolling(1000).mean().plot(figsize=(10,5),grid=True);
result_df
order_count | 양_총 | |
---|---|---|
2023-08-05 03:30:06.100 | 1 | 76.0 |
2023-08-05 03:30:06.200 | 0 | 0.0 |
2023-08-05 03:30:06.300 | 0 | 0.0 |
2023-08-05 03:30:06.400 | 1 | 416.0 |
2023-08-05 03:30:06.500 | 0 | 0.0 |
… | … | … |
2023-08-05 23:59:59.500 | 3 | 9238.0 |
2023-08-05 23:59:59.600 | 0 | 0.0 |
2023-08-05 23:59:59.700 | 1 | 3981.0 |
2023-08-05 23:59:59.800 | 0 | 0.0 |
2023-08-05 23:59:59.900 | 2 | 534.0 |
result_df['quantity_sum'].rolling(1000).mean().plot(figsize=(10,5),grid=True);
(result_df['order_count'] - result_df['mean_count'].mean()).abs().mean()
6.985628185332997
result_df['mean_count'] = result_df['order_count'].ewm(alpha=0.11, adjust=False).mean()
(result_df['order_count'] - result_df['mean_count'].shift()).abs().mean()
0.6727616961866929
result_df['mean_quantity'] = result_df['quantity_sum'].ewm(alpha=0.1, adjust=False).mean()
(result_df['quantity_sum'] - result_df['mean_quantity'].shift()).abs().mean()
4180.171479076811
이 문서는 주문 시간 간격 오차의 원인을 간단하게 소개합니다. 주로 매개 변수가 시간이 지남에 따라 변하기 때문입니다. 보다 정확한 시장을 예측하기 위해서는 전략이 시장의 기본 매개 변수에 대한 실시간 예측을 필요로합니다. 잔액을 사용하여 예측의 양과 악을 측정 할 수 있습니다. 위의 가장 간단한 예는 특정 시간 순위 분석, 변동률 집약 등과 관련된 연구가 많이 있으며 추가로 개선 할 수 있습니다.