पिछले लेख में दिखाया गया है कि ऑर्डर आने के अंतराल का अध्ययन करके पैरामीटर के लिए गतिशील समायोजन क्यों करना चाहिए और अनुमानों को कैसे अच्छी तरह से और खराब तरीके से मूल्यांकन किया जाए। यह लेख गहराई से डेटा पर ध्यान केंद्रित करेगा, मध्य-मूल्य (या उचित-मूल्य, सूक्ष्म-मूल्य आदि) का अध्ययन करेगा।
बिनान ने सबसे अच्छी बोली के लिए ऐतिहासिक डेटा डाउनलोड प्रदान किया है, जिसमें शामिल हैं best_bid_price: सबसे अच्छी खरीद कीमत, सबसे अच्छी खरीद कीमत, सबसे अच्छा_bid_qty: सबसे अच्छा खरीद मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_qty: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा बेच मूल्य, सबसे अच्छा_ask_price: सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_price, सबसे अच्छा_sell_
सबसे पहले, दिन के बाजार को देखें, बड़ा ऊपर बड़ा नीचे, इसके अलावा दिन के लेन-देन की मात्रा भी बाजार की उतार-चढ़ाव के साथ बड़ी बदलाव होती है, विशेष रूप से प्रसार (एक बेचने की कीमत से एक खरीदने की कीमत के बीच का अंतर) बहुत महत्वपूर्ण रूप से बाजार की उतार-चढ़ाव को दर्शाता है। 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
books = pd.read_csv('YGGUSDT-bookTicker-2023-08-07.csv')
tick_size = 0.0001
books['date'] = pd.to_datetime(books['transaction_time'], unit='ms')
books.index = books['date']
books['spread'] = round(books['best_ask_price'] - books['best_bid_price'],4)
books['best_bid_price'][::10].plot(figsize=(10,5),grid=True);
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);
(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);
books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()
0.0001 0.799169
0.0002 0.102750
0.0003 0.042472
0.0004 0.022821
0.0005 0.012792
0.0006 0.007350
0.0007 0.004376
0.0008 0.002712
0.0009 0.001657
0.0010 0.001089
0.0011 0.000740
0.0012 0.000496
0.0013 0.000380
0.0014 0.000258
0.0015 0.000197
0.0016 0.000140
0.0017 0.000112
0.0018 0.000088
0.0019 0.000063
Name: spread, dtype: float64
ऊपर से यह देखा जा सकता है कि खरीद और बिक्री के आदेशों की मात्रा में बहुत अधिक अंतर होता है, जो बाजार के अल्पकालिक बाजार के लिए एक मजबूत भविष्यवाणी है। पिछले लेख में उल्लेख किए गए कारणों में से एक ही कारण है कि खरीद की मात्रा में गिरावट आती है। यदि एक तरफ की सूची दूसरी तरफ से काफी कम है, तो यह मान लें कि अगले सक्रिय खरीद और बिक्री के आदेशों की मात्रा करीब है, तो छोटी सूची के पक्ष को खाने की अधिक संभावना है, जिससे कीमत में बदलाव होता है। असंतुलन बोली का अर्थ हैःQ_b सबसे अच्छी बोली मात्रा (best_bid_qty) और Q_a सबसे अच्छी मांग मात्रा (best_ask_qty) है।
मिड-प्राइस की परिभाषाः
निम्न चित्र मध्य-मूल्य में परिवर्तन की दर और असंतुलन I के बीच के संबंध को दिखाता है, और उम्मीद के अनुरूप, I के बढ़ने के साथ, कीमतें बढ़ने की अधिक संभावना है, और 1 के करीब, मूल्य परिवर्तन की मात्रा भी तेज हो जाती है। उच्च आवृत्ति व्यापार में, मध्य-मूल्य का उद्देश्य भविष्य के मूल्य परिवर्तन का बेहतर पूर्वानुमान लगाने के लिए मध्य-मूल्य का परिचय देना है, यानी, भविष्य के मूल्य परिवर्तन का बेहतर पूर्वानुमान लगाने के लिए, यानी, भविष्य के मूल्य अंतर से छोटा, मध्य-मूल्य को बेहतर परिभाषित किया जाता है। स्पष्ट रूप से संलग्न असंतुलन रणनीति के पूर्वानुमान के लिए अतिरिक्त जानकारी प्रदान करता है, और इस बात को ध्यान में रखते हुए, भारित मध्य-मूल्य को परिभाषित करता हैः
books['I'] = books['best_bid_qty'] / (books['best_bid_qty'] + books['best_ask_qty'])
books['mid_price'] = (books['best_ask_price'] + books['best_bid_price'])/2
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)
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)
ग्राफ में देखा गया है कि भारित मध्य-मूल्य में भिन्न I के सापेक्ष बहुत कम परिवर्तन होता है, जो दर्शाता है कि भारित मध्य-मूल्य एक बेहतर फिट है। लेकिन फिर भी कुछ नियम हैं, जैसे कि 0.2 और 0.8 के पास, विचलन बड़ा है। यह दर्शाता है कि I अभी भी अतिरिक्त जानकारी प्रदान कर सकता है। क्योंकि भारित मध्य-मूल्य मानता है कि मूल्य संशोधन I के साथ पूरी तरह से रैखिक है, यह स्पष्ट रूप से वास्तविकता के अनुरूप नहीं है, जैसा कि ऊपर दिए गए ग्राफ से देखा जा सकता है, जब I 0 और 1 के करीब होता है, तो विचलन की गति तेजी से होती है, न कि रैखिक संबंध।
एक बार फिर, मैं आपको बताता हूं कि क्या मैं वास्तव में एक व्यक्ति हूं जो अपने जीवन में कुछ भी नहीं करता है।
इस समयः
इस रूप को देखने पर पाया जा सकता है कि भारित मध्य मूल्य औसत मध्य मूल्य का संशोधन है, परिमार्जन के गुणक प्रसार हैं, जबकि परिमार्जन के गुणक I के बारे में एक फ़ंक्शन हैं, और भारित मध्य-मूल्य बस यह मानता है कि यह संबंध I/2 है। इस समय समायोजित किए गए I के वितरण ((-1,1) के लाभों को दर्शाया गया है, I के बारे में मूल बिंदु पर सममित है, जो हमें फ़ंक्शन के अनुरूप संबंध खोजने के लिए सुविधाजनक प्रदान करता है। ग्राफ को देखें, इस प्रकार के फ़ंक्शन को I के विषम गुणांक के संबंध को पूरा करना चाहिए, जो दोनों पक्षों में तेजी से बढ़ने के अनुरूप है, और मूल बिंदु पर सममित के बारे में, यह भी देखा जा सकता है कि मूल बिंदु के पास मूल्य रैखिक है, और जब यह I0 के करीब है, तो फ़ंक्शन का परिणाम 0 है, जब I 1 है, तो फ़ंक्शन का परिणाम 0.5 है। इसलिए यह अनुमान लगाया गया हैः
यहाँ N एक धनात्मक सम संख्या है, और वास्तविक परीक्षण के बाद, N 8 पर बेहतर है। अब तक, इस लेख में संशोधित भारित मध्य मूल्य पेश किया गया हैः
इस बिंदु पर, मध्य मूल्य के परिवर्तन का I के साथ कोई संबंध नहीं है। यह परिणाम सरल भारित मध्य मूल्य की तुलना में थोड़ा बेहतर है, लेकिन यह वास्तविक मूल्य पर लागू नहीं होता है, यहां केवल एक विचार दिया गया है। एस स्टोइकोव का एक 2017 का लेख मार्कोव श्रृंखला के तरीकों का उपयोग करके प्रस्तुत किया गया है।सूक्ष्म-मूल्यइस लेख में, हम आपको एक लेख के बारे में बताएंगे, जिसमें हम सभी के बारे में बात करेंगे।
books['I'] = (books['best_bid_qty'] - books['best_ask_qty']) / (books['best_bid_qty'] + books['best_ask_qty'])
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'].sum()
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)
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'].sum()
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)
books['adjust_mid_price'] = books['mid_price'] + books['spread']*(books['I']**3)/2
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'].sum()
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)
उच्च आवृत्ति रणनीतियों के लिए मध्यवर्ती मूल्य बहुत महत्वपूर्ण है, यह भविष्य के अल्पकालिक मूल्य का पूर्वानुमान है, इसलिए मध्यवर्ती मूल्य यथासंभव सटीक होना चाहिए। पहले की मध्यवर्ती कीमतें सभी व्युत्पन्न आंकड़ों पर आधारित हैं, क्योंकि विश्लेषण के समय केवल एक बाजार का उपयोग किया गया था। वास्तविक मूल्य में, रणनीति सभी डेटा का यथासंभव उपयोग करना चाहती है, विशेष रूप से वास्तविक मूल्य में ट्रेडों को विनिमय में, मध्यवर्ती मूल्य का पूर्वानुमान वास्तविक लेनदेन मूल्य से जांचना चाहिए। स्टोइकोव को याद रखें कि ऐसा लगता है कि एक धक्का दिया गया था कि वास्तविक मध्यवर्ती मूल्य एक लेनदेन की संभावनाओं के साथ खरीदा जाना चाहिए।
लुईयह एक बहुत ही कठिन काम है।
fmzeroयह बहुत बड़ा है!