पिछले लेख में पैरामीटर को गतिशील रूप से समायोजित करने की आवश्यकता और ऑर्डर आगमन अंतराल का अध्ययन करके अनुमानों की गुणवत्ता का मूल्यांकन करने का तरीका दिखाया गया था। यह लेख गहराई के आंकड़ों पर ध्यान केंद्रित करेगा और मध्य मूल्य (जिसे उचित मूल्य या माइक्रो-मूल्य के रूप में भी जाना जाता है) का अध्ययन करेगा।
बाइनेंस बेस्ट_बिड_प्राइस (सबसे अधिक खरीद मूल्य), बेस्ट_बिड_क्वांटिटी (सबसे कम बोली मूल्य पर मात्रा), बेस्ट_एस्क_प्राइस (सबसे कम बिक्री मूल्य), बेस्ट_एस्क_क्वांटिटी (सबसे अच्छी बोली मूल्य पर मात्रा), और लेनदेन_समय के लिए ऐतिहासिक डेटा डाउनलोड प्रदान करता है। इन आंकड़ों में दूसरा या गहरा ऑर्डर बुक स्तर शामिल नहीं है। इस लेख में विश्लेषण 7 अगस्त को YGG बाजार पर आधारित है, जिसमें 9 मिलियन से अधिक डेटा बिंदुओं के साथ महत्वपूर्ण अस्थिरता का अनुभव हुआ।
सबसे पहले, आइए उस दिन बाजार की स्थितियों पर एक नज़र डालें। बड़े उतार-चढ़ाव थे, और ऑर्डर बुक की मात्रा बाजार की अस्थिरता के साथ काफी बदल गई। स्प्रेड, विशेष रूप से, बाजार के उतार-चढ़ाव की सीमा को इंगित करता है, जो कि सर्वोत्तम पूछें और बोली कीमतों के बीच का अंतर है। उस दिन YGG बाजार के आंकड़ों में, स्प्रेड 20% समय के लिए एक टिक से बड़ा था। ऑर्डर बुक में प्रतिस्पर्धा करने वाले विभिन्न ट्रेडिंग बॉट्स के इस युग में, ऐसी स्थितियां तेजी से दुर्लभ हो रही हैं।
में [1]:
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
[2] मेंः
books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')
[3] मेंः
tick_size = 0.0001
[4] मेंः
books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']
[5] मेंः
books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)
[6] मेंः
books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);
बाहर[6]:
[7] मेंः
books['best_bid_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);
books['best_ask_qty'][::10].rolling(10000).mean().plot(figsize=(10,5),grid=True);
बाहर[7]:
[8] मेंः
(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);
बाहर[8]:
[9] मेंः
books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()
बाहर[9]:
असंतुलित उद्धरण ज्यादातर समय खरीद और बिक्री आदेशों के बीच ऑर्डर बुक की मात्रा में महत्वपूर्ण अंतर से देखे जाते हैं। इस अंतर का अल्पकालिक बाजार के रुझानों पर एक मजबूत भविष्य कहने वाला प्रभाव पड़ता है, जैसा कि पहले उल्लेखित कारण के समान है कि खरीद आदेश मात्रा में कमी अक्सर गिरावट की ओर जाती है। यदि ऑर्डर बुक का एक पक्ष दूसरे की तुलना में काफी छोटा है, तो यह मानते हुए कि सक्रिय खरीद और बिक्री आदेश मात्रा में समान हैं, तो छोटे पक्ष का उपभोग होने की अधिक संभावना है, जिससे मूल्य परिवर्तन होते हैं। असंतुलित उद्धरण को
जहां Q_b लंबित खरीद आदेशों (best_bid_qty) और Q_a लंबित बिक्री आदेशों (best_ask_qty) की राशि को दर्शाता है।
मध्य मूल्य को परिभाषित करें:
नीचे दिया गया ग्राफ अगले 1 अंतराल पर मध्य मूल्य के परिवर्तन की दर और असंतुलन I के बीच संबंध दिखाता है। जैसा कि अपेक्षित है, I बढ़ने के साथ कीमत बढ़ने की अधिक संभावना है और यह 1 के करीब हो जाती है, मूल्य परिवर्तन में तेजी आती है। उच्च आवृत्ति व्यापार में, मध्यवर्ती मूल्य की शुरूआत भविष्य के मूल्य परिवर्तनों की बेहतर भविष्यवाणी करने के लिए है, अर्थात, और भविष्य का मूल्य अंतर छोटा है, मध्यवर्ती मूल्य बेहतर परिभाषित किया जाता है। जाहिर है, लंबित आदेशों का असंतुलन रणनीति की भविष्यवाणी के लिए अतिरिक्त जानकारी प्रदान करता है, इसे ध्यान में रखते हुए, भारित मध्य मूल्य को परिभाषित करते हुएः
[10] मेंः
books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])
[11] मेंः
books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2
[12] मेंः
bins = np.linspace(0, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['price_change'] = (books['mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Average Mid Price Change Rate');
plt.grid(True)
बाहर[12]:
[13] मेंः
books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
बाहर[13]:
ग्राफ से, यह देखा जा सकता है कि भारित मध्य मूल्य I के विभिन्न मूल्यों की तुलना में छोटे भिन्नताओं को दर्शाता है, यह दर्शाता है कि यह एक बेहतर फिट है। हालांकि, अभी भी कुछ विचलन हैं, विशेष रूप से 0.2 और 0.8 के आसपास। इससे पता चलता है कि मैं अभी भी अतिरिक्त जानकारी प्रदान करता हूं। मूल्य सुधार अवधि और I के बीच एक पूरी तरह से रैखिक संबंध की धारणा, जैसा कि भारित मध्य मूल्य द्वारा निहित है, वास्तविकता के साथ संरेखित नहीं है। यह ग्राफ से देखा जा सकता है कि विचलन की गति बढ़ जाती है जब मैं 0 और 1 के करीब जाता हूं, जो एक गैर-रैखिक संबंध दर्शाता है।
अधिक सहज ज्ञान युक्त प्रतिनिधित्व प्रदान करने के लिए, यहाँ मैं की एक नई परिभाषा हैः
I की संशोधित परिभाषा:
इस बिंदु परः
अवलोकन पर, यह देखा जा सकता है कि भारित मध्य मूल्य औसत मध्य मूल्य का सुधार है, जहां सुधार अवधि को प्रसार से गुणा किया जाता है। सुधार अवधि I का एक कार्य है, और भारित मध्य मूल्य I / 2 का एक सरल संबंध मानता है। इस मामले में, समायोजित I वितरण (-1, 1) का लाभ स्पष्ट हो जाता है, क्योंकि I मूल के चारों ओर सममित है, जिससे फ़ंक्शन के लिए एक उपयुक्त संबंध खोजना सुविधाजनक हो जाता है। ग्राफ की जांच करके, यह प्रतीत होता है कि इस फ़ंक्शन को I की शक्तियों को संतुष्ट करना चाहिए, क्योंकि यह दोनों पक्षों पर तेजी से वृद्धि और मूल के प्रतिरूपता के साथ संरेखित होता है। इसके अलावा, यह देखा जा सकता है कि मूल के आसपास के मूल्य रैखिक के करीब हैं। इसके अलावा, जब I 0 है, तो फ़ंक्शन का परिणाम 0 है और जब I 1 है, तो परिणाम 0.5 है। इसलिए यह अनुमान लगाया जाता है कि फ़ंक्शन का सूत्र हैः
यहाँ N एक सकारात्मक सम संख्या है, वास्तविक परीक्षण के बाद, यह बेहतर है जब N 8 है। अब तक यह पेपर संशोधित भारित मध्य मूल्य प्रस्तुत करता हैः
इस बिंदु पर मध्य मूल्य परिवर्तन की भविष्यवाणी अब महत्वपूर्ण रूप से I से संबंधित नहीं है। हालांकि यह परिणाम सरल भारित मध्य मूल्य से थोड़ा बेहतर है, यह अभी भी वास्तविक ट्रेडिंग परिदृश्यों में लागू नहीं है। यह केवल एक प्रस्तावित दृष्टिकोण है। एस स्टोइकोव द्वारा 2017 के एक लेख में,सूक्ष्म-मूल्यमार्कोव श्रृंखला दृष्टिकोण का उपयोग करके पेश किया जाता है, और संबंधित कोड प्रदान किया जाता है। शोधकर्ता इस दृष्टिकोण का आगे अन्वेषण कर सकते हैं।
[14] मेंः
books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])
[15] मेंः
books['weighted_mid_price'] = books['mid_price'] + books['spread']*books['I']/2
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['weighted_price_change'] = (books['weighted_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['weighted_price_change'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
बाहर[15]:
[16] मेंः
books['adjust_mid_price'] = books['mid_price'] + books['spread']*books['I']*(books['I']**8+1)/4
bins = np.linspace(-1, 1, 51)
books['I_bins'] = pd.cut(books['I'], bins, labels=bins[1:])
books['adjust_mid_price'] = (books['adjust_mid_price'].pct_change()/tick_size).shift(-1)
avg_change = books.groupby('I_bins')['adjust_mid_price'].mean()
plt.figure(figsize=(8,5))
plt.plot(avg_change)
plt.xlabel('I Value Range')
plt.ylabel('Weighted Average Mid Price Change Rate');
plt.grid(True)
बाहर[16]:
मध्य मूल्य उच्च आवृत्ति रणनीतियों के लिए महत्वपूर्ण है क्योंकि यह अल्पकालिक भविष्य की कीमतों की भविष्यवाणी के रूप में कार्य करता है। इसलिए, मध्य मूल्य के लिए जितना संभव हो उतना सटीक होना महत्वपूर्ण है। पहले चर्चा किए गए मध्य मूल्य दृष्टिकोण ऑर्डर बुक डेटा पर आधारित हैं, क्योंकि विश्लेषण में ऑर्डर बुक के केवल शीर्ष स्तर का उपयोग किया जाता है। लाइव ट्रेडिंग में, रणनीतियों का उद्देश्य वास्तविक लेनदेन की कीमतों के खिलाफ मध्य मूल्य भविष्यवाणियों को मान्य करने के लिए व्यापार डेटा सहित सभी उपलब्ध डेटा का उपयोग करना चाहिए। मुझे याद है कि स्टोइकोव ने एक ट्विटर में उल्लेख किया कि वास्तविक मध्य मूल्य को बोली और पूछने की कीमतों के निष्पादन की संभावनाओं का भारित औसत होना चाहिए। इस मुद्दे की खोज पिछले लेखों में की गई है। लंबाई बाधाओं के कारण, इन विषयों पर आगे के विवरणों पर अगले लेख में चर्चा की जाएगी।