उच्च आवृत्ति व्यापार रणनीतियों पर विचार (3)

लेखक:लिडिया, बनाया गयाः 2023-08-08 10:05:19, अद्यतन किया गयाः 2023-09-12 15:50:55

img

उच्च आवृत्ति व्यापार रणनीतियों पर विचार (3)

पिछले लेख में, मैंने संचयी ट्रेडिंग वॉल्यूम को मॉडलिंग करने का तरीका पेश किया और मूल्य प्रभाव की घटना का विश्लेषण किया। इस लेख में, मैं ट्रेड ऑर्डर डेटा का विश्लेषण करना जारी रखूंगा। YGG ने हाल ही में बिनेंस यू-आधारित अनुबंध लॉन्च किए हैं, और मूल्य उतार-चढ़ाव महत्वपूर्ण रहे हैं, एक बिंदु पर ट्रेडिंग वॉल्यूम BTC से भी अधिक है। आज, मैं इसका विश्लेषण करूंगा।

आदेश समय अंतराल

आम तौर पर यह माना जाता है कि आदेशों के आगमन का समय एक पोयसन प्रक्रिया का पालन करता है।पिसन प्रक्रियायहाँ, मैं अनुभवजन्य प्रमाण प्रदान करूंगा।

मैंने 5 अगस्त के लिए एगट्रेड्स डेटा डाउनलोड किया, जिसमें 1,931,193 ट्रेड शामिल हैं, जो काफी महत्वपूर्ण है। सबसे पहले, आइए खरीद ऑर्डर के वितरण पर एक नज़र डालें। हम 100ms और 500ms के आसपास एक गैर-स्मूथ स्थानीय शिखर देख सकते हैं, जो संभवतः नियमित अंतराल पर ट्रेडिंग बॉट्स द्वारा रखे गए आइसबर्ग ऑर्डर के कारण होता है। यह उस दिन असामान्य बाजार स्थितियों के कारणों में से एक भी हो सकता है।

पोयसन वितरण का संभावना द्रव्यमान फलन (पीएमएफ) निम्नलिखित सूत्र द्वारा दिया जाता हैः

img

जहांः

  • κ वह घटनाओं की संख्या है जो हमें रुचि रखते हैं।
  • λ प्रति इकाई समय (या इकाई स्थान) होने वाली घटनाओं की औसत दर है।
  • imgऔसत दर λ को देखते हुए, ठीक κ घटनाओं के होने की संभावना को दर्शाता है।

पोइसन प्रक्रिया में, घटनाओं के बीच समय अंतराल एक घातीय वितरण का पालन करते हैं। घातीय वितरण का संभावना घनत्व कार्य (पीडीएफ) निम्नलिखित सूत्र द्वारा दिया जाता हैः

img

फिटिंग परिणामों से पता चलता है कि अवलोकन किए गए डेटा और अपेक्षित पोएसन वितरण के बीच एक महत्वपूर्ण अंतर है। पोएसन प्रक्रिया लंबे समय के अंतराल की आवृत्ति को कम आंकती है और छोटे समय के अंतराल की आवृत्ति को अधिक मानती है। (अंतराल का वास्तविक वितरण संशोधित पैरेटो वितरण के करीब है)

में [1]:

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

[2] मेंः

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']

[10] मेंः

buy_trades['interval'][buy_trades['interval']<1000].plot.hist(bins=200,figsize=(10, 5));

बाहर[10]:

img

[20] मेंः

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)

बाहर[20]:

img

जब 1 सेकंड के भीतर क्रम की घटनाओं की संख्या के वितरण की तुलना पोयसन वितरण के साथ की जाती है, तो अंतर भी महत्वपूर्ण होता है। पोयसन वितरण दुर्लभ घटनाओं की आवृत्ति को काफी कम आंकता है। इसके संभावित कारण हैंः

  • घटनाओं की गैर-स्थिर दर: पोइसन प्रक्रिया मानती है कि किसी दिए गए समय अंतराल के भीतर होने वाली घटनाओं की औसत दर स्थिर है। यदि यह धारणा सही नहीं है, तो डेटा का वितरण पोइसन वितरण से विचलित होगा।
  • प्रक्रियाओं के बीच बातचीत: पोइसन प्रक्रिया की एक और मौलिक धारणा यह है कि घटनाएं एक-दूसरे से स्वतंत्र हैं। यदि वास्तविक दुनिया में घटनाएं एक-दूसरे के साथ बातचीत करती हैं, तो उनका वितरण पोइसन वितरण से विचलित हो सकता है।

दूसरे शब्दों में, एक वास्तविक दुनिया के वातावरण में, आदेश की घटनाओं की आवृत्ति अस्थिर है, और इसे वास्तविक समय में अपडेट करने की आवश्यकता है। एक प्रोत्साहन प्रभाव भी हो सकता है, जहां एक निश्चित समय अवधि के भीतर अधिक आदेश अधिक आदेशों को उत्तेजित करते हैं। इससे रणनीतियां एक एकल निश्चित पैरामीटर पर भरोसा करने में असमर्थ होती हैं।

१९० मेंः

result_df = buy_trades.resample('1S').agg({ 
    'price': 'count',
    'quantity': 'sum'
}).rename(columns={'price': 'order_count', 'quantity': 'quantity_sum'})

[219] मेंः

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() ;

बाहर[219]:

img

वास्तविक समय पैरामीटर अद्यतन

ऑर्डर अंतराल के विश्लेषण से, यह निष्कर्ष निकाला जा सकता है कि निश्चित मापदंड वास्तविक बाजार की स्थिति के लिए उपयुक्त नहीं हैं, और रणनीति में बाजार का वर्णन करने वाले प्रमुख मापदंडों को वास्तविक समय में अपडेट करने की आवश्यकता है। सबसे सीधा समाधान एक स्लाइडिंग विंडो मूविंग एवरेज का उपयोग करना है। नीचे दिए गए दो ग्राफ 1 सेकंड के भीतर खरीद ऑर्डर की आवृत्ति और 1000 के विंडो आकार के साथ ट्रेडिंग वॉल्यूम का औसत दिखाते हैं। यह देखा जा सकता है कि ट्रेडिंग में एक क्लस्टरिंग घटना है, जहां ऑर्डर की आवृत्ति एक अवधि के लिए सामान्य से काफी अधिक होती है, और वॉल्यूम भी सिंक्रोनस रूप से बढ़ता है। यहां, पिछले मूल्यों के औसत का उपयोग नवीनतम मूल्य की भविष्यवाणी करने के लिए किया जाता है, और शेष के औसत त्रुटि का उपयोग भविष्यवाणी की गुणवत्ता को मापने के लिए किया जाता है।

ग्राफ से, हम यह भी समझ सकते हैं कि ऑर्डर आवृत्ति पोयसन वितरण से इतना क्यों विचलित होती है। यद्यपि प्रति सेकंड ऑर्डर की औसत संख्या केवल 8.5 है, चरम मामले इस मूल्य से काफी विचलित होते हैं।

यह पाया जाता है कि पूर्वानुमान के लिए पिछले दो सेकंड के औसत का उपयोग करने से सबसे छोटी अवशिष्ट त्रुटि होती है, और यह केवल पूर्वानुमान परिणामों के लिए औसत का उपयोग करने से बहुत बेहतर है।

[221] मेंः

result_df['order_count'].rolling(1000).mean().plot(figsize=(10,5),grid=True);

बाहर[1]:

img

[193] मेंः

result_df['quantity_sum'].rolling(1000).mean().plot(figsize=(10,5),grid=True);

बाहर[1]:

img

[195] मेंः

(result_df['order_count'] - result_df['mean_count'].mean()).abs().mean()

बाहर[195]:

6.985628185332997

[205] मेंः

result_df['mean_count'] = result_df['order_count'].rolling(2).mean()
(result_df['order_count'] - result_df['mean_count'].shift()).abs().mean()

बाहर[1]:

3.091737586730269

सारांश

इस लेख में पोइसन प्रक्रिया से ऑर्डर समय अंतराल के विचलन के कारणों को संक्षेप में समझाया गया है, मुख्य रूप से समय के साथ मापदंडों के परिवर्तन के कारण। बाजार की सटीक भविष्यवाणी करने के लिए, रणनीतियों को बाजार के मौलिक मापदंडों के वास्तविक समय के पूर्वानुमान बनाने की आवश्यकता होती है। भविष्यवाणियों की गुणवत्ता को मापने के लिए अवशेषों का उपयोग किया जा सकता है। ऊपर दिया गया उदाहरण एक सरल प्रदर्शन है, और विशिष्ट समय श्रृंखला विश्लेषण, अस्थिरता क्लस्टरिंग और अन्य संबंधित विषयों पर व्यापक शोध है, उपरोक्त प्रदर्शन में और सुधार किया जा सकता है।


अधिक