রিসোর্স লোড হচ্ছে... লোডিং...

উচ্চ ফ্রিকোয়েন্সি ট্রেডিং কৌশল সম্পর্কে চিন্তাভাবনা (4)

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২৩-০৮-১০ 13:44:30, আপডেটঃ ২০২৩-০৯-১২ 15:51:24

Thoughts on High-Frequency Trading Strategies (4)

উচ্চ ফ্রিকোয়েন্সি ট্রেডিং কৌশল সম্পর্কে চিন্তাভাবনা (4)

পূর্ববর্তী নিবন্ধটি গতিশীলভাবে পরামিতিগুলি সামঞ্জস্য করার প্রয়োজনীয়তা এবং অর্ডার আগমনের ব্যবধান অধ্যয়ন করে অনুমানের গুণমান মূল্যায়ন করার উপায় প্রদর্শন করেছে। এই নিবন্ধটি গভীরতার ডেটাতে মনোনিবেশ করবে এবং মধ্যম মূল্য (যা ন্যায্য মূল্য বা মাইক্রো-মূল্য হিসাবেও পরিচিত) অধ্যয়ন করবে।

গভীরতার তথ্য

বাইনারেন্স সেরা_বিড_প্রাইস (সর্বোচ্চ ক্রয় মূল্য), সেরা_বিড_কোয়ান্টিটি (সর্বোচ্চ বিড মূল্যে পরিমাণ), সেরা_অ্যাসক_প্রাইস (সর্বনিম্ন বিক্রয় মূল্য), সেরা_অ্যাসক_কোয়ান্টিটি (সর্বোত্তম বিড মূল্যে পরিমাণ) এবং লেনদেন_সময় এর জন্য historicalতিহাসিক ডেটা ডাউনলোড সরবরাহ করে। এই ডেটাতে দ্বিতীয় বা আরও গভীর অর্ডার বুকের স্তর অন্তর্ভুক্ত নেই। এই নিবন্ধের বিশ্লেষণটি 7 আগস্টের YGG বাজারের উপর ভিত্তি করে, যা 9 মিলিয়নেরও বেশি ডেটা পয়েন্ট সহ উল্লেখযোগ্য অস্থিরতা অনুভব করেছিল।

প্রথমত, আসুন সেই দিনের বাজারের অবস্থার দিকে নজর রাখি। বড় ওঠানামা ছিল, এবং অর্ডার বুকের পরিমাণ বাজারের অস্থিরতার সাথে উল্লেখযোগ্যভাবে পরিবর্তিত হয়েছিল। স্প্রেড, বিশেষত, বাজারের ওঠানামার মাত্রা নির্দেশ করে, যা সেরা জিজ্ঞাসা এবং বিড মূল্যের মধ্যে পার্থক্য। সেই দিনের ইয়েজিজি বাজারের পরিসংখ্যানগুলিতে, স্প্রেডটি 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]:

Thoughts on High-Frequency Trading Strategies (4)

[৭] এঃ

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

Thoughts on High-Frequency Trading Strategies (4)

[8] এঃ

(books['spread'][::10]/tick_size).rolling(10000).mean().plot(figsize=(10,5),grid=True);

আউট[8]:

Thoughts on High-Frequency Trading Strategies (4)

[৯] এঃ

books['spread'].value_counts()[books['spread'].value_counts()>500]/books['spread'].value_counts().sum()

আউট[9]:

Thoughts on High-Frequency Trading Strategies (4)

ভারসাম্যহীন উদ্ধৃতি

অর্ডার বইয়ের পরিমাণের মধ্যে উল্লেখযোগ্য পার্থক্য থেকে অসামঞ্জস্যপূর্ণ কোটগুলি বেশিরভাগ সময়ই দেখা যায়। এই পার্থক্যের স্বল্পমেয়াদী বাজারের প্রবণতাগুলিতে শক্তিশালী ভবিষ্যদ্বাণীমূলক প্রভাব রয়েছে, পূর্বে উল্লিখিত কারণের অনুরূপ যে ক্রয় আদেশের পরিমাণ হ্রাস প্রায়শই হ্রাসের দিকে পরিচালিত করে। যদি অর্ডার বইয়ের একটি দিকটি অন্যটির তুলনায় উল্লেখযোগ্যভাবে ছোট হয়, তবে সক্রিয় ক্রয় এবং বিক্রয় আদেশগুলি ভলিউমে অনুরূপ হয় তবে ছোট দিকটি গ্রাস হওয়ার সম্ভাবনা বেশি, যার ফলে দামের পরিবর্তন ঘটে। অসামঞ্জস্যপূর্ণ কোটগুলি I অক্ষর দ্বারা প্রতিনিধিত্ব করা হয়।

Thoughts on High-Frequency Trading Strategies (4)

যেখানে Q_b হল অপেক্ষমান ক্রয় আদেশের পরিমাণ (best_bid_qty) এবং Q_a হল অপেক্ষমান বিক্রয় আদেশের পরিমাণ (best_ask_qty) ।

মাঝারি মূল্য নির্ধারণ করুনঃ

Thoughts on High-Frequency Trading Strategies (4)

নিম্নলিখিত গ্রাফটি পরবর্তী 1 অন্তরাল এবং ভারসাম্যহীনতা I এর মধ্যে পরিবর্তনের হারের মধ্যে সম্পর্ক দেখায়। প্রত্যাশিত হিসাবে, I বৃদ্ধি পাওয়ায় এবং এটি 1 এর কাছাকাছি আসার সাথে সাথে দাম বাড়ার সম্ভাবনা বেশি, দামের পরিবর্তন ত্বরান্বিত হয়। উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ে, মধ্যবর্তী মূল্যের প্রবর্তন ভবিষ্যতের দামের পরিবর্তনগুলি আরও ভালভাবে পূর্বাভাস দেওয়ার জন্য, অর্থাৎ ভবিষ্যতের দামের পার্থক্যটি ছোট, মধ্যবর্তী মূল্যটি আরও ভালভাবে সংজ্ঞায়িত হয়। স্পষ্টতই, মুলতুবি অর্ডারের ভারসাম্যহীনতা কৌশলটির পূর্বাভাসের জন্য অতিরিক্ত তথ্য সরবরাহ করে, এটি মাথায় রেখে, ওজনযুক্ত মধ্যম মূল্য সংজ্ঞায়িত করেঃ

Thoughts on High-Frequency Trading Strategies (4)

[১০] এঃ

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

[১২] এঃ

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)

আউট[১২]:

Thoughts on High-Frequency Trading Strategies (4)

[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]:

Thoughts on High-Frequency Trading Strategies (4)

ওজনযুক্ত মধ্যম মূল্যের সমন্বয়ঃ

গ্রাফ থেকে দেখা যায় যে ওজনযুক্ত মধ্যম মূল্য I এর বিভিন্ন মানের তুলনায় ছোট পরিবর্তন দেখায়, যা এটি আরও ভাল ফিট বলে নির্দেশ করে। তবে, এখনও কিছু বিচ্যুতি রয়েছে, বিশেষত 0.2 এবং 0.8 এর আশেপাশে। এটি পরামর্শ দেয় যে আমি এখনও অতিরিক্ত তথ্য সরবরাহ করি। মূল্য সংশোধন শব্দ এবং I এর মধ্যে সম্পূর্ণরূপে রৈখিক সম্পর্কের অনুমান, যেমন ওজনযুক্ত মধ্যম মূল্য দ্বারা বোঝানো হয়, বাস্তবতার সাথে সামঞ্জস্যপূর্ণ নয়। গ্রাফ থেকে দেখা যায় যে 0 এবং 1 এর কাছাকাছি আসার সাথে সাথে বিচ্যুতির গতি বৃদ্ধি পায়, একটি অ-রৈখিক সম্পর্ক নির্দেশ করে।

আরও স্বজ্ঞাত উপস্থাপনা প্রদানের জন্য, এখানে আই এর একটি নতুন সংজ্ঞা রয়েছেঃ

আই এর সংশোধিত সংজ্ঞাঃ

Thoughts on High-Frequency Trading Strategies (4)

এই মুহুর্তে:

Thoughts on High-Frequency Trading Strategies (4)

পর্যবেক্ষণে, এটি লক্ষ্য করা যায় যে ওজনযুক্ত মধ্যম মূল্য গড় মধ্যম মূল্যের একটি সংশোধন, যেখানে সংশোধন শব্দটি স্প্রেড দ্বারা গুণিত হয়। সংশোধন শব্দটি আই এর একটি ফাংশন, এবং ওজনযুক্ত মধ্যম মূল্য I / 2 এর একটি সহজ সম্পর্ক অনুমান করে। এই ক্ষেত্রে, সমন্বিত আই বিতরণের সুবিধা (-1, 1) স্পষ্ট হয়ে ওঠে, কারণ আই মূলের চারপাশে সমতুল্য, ফাংশনের জন্য একটি উপযুক্ত সম্পর্ক খুঁজে পাওয়া সুবিধাজনক করে তোলে। গ্রাফটি পরীক্ষা করে দেখা যায় যে এই ফাংশনটি আই এর শক্তিগুলি সন্তুষ্ট করা উচিত, কারণ এটি উভয় পক্ষের দ্রুত বৃদ্ধি এবং মূলের সমতুল্যের সাথে সারিবদ্ধ। উপরন্তু, এটি পর্যবেক্ষণ করা যেতে পারে যে মূলের কাছাকাছি মানগুলি রৈখিকের কাছাকাছি। উপরন্তু, যখন আমি 0, ফাংশন ফলাফল 0, এবং যখন আমি ফলাফল 1,5. অতএব, এটি অনুমান করা হয় যে ফাংশনটির ফর্মুলাঃ

Thoughts on High-Frequency Trading Strategies (4)

এখানে N একটি ধনাত্মক যুগ্ম সংখ্যা, প্রকৃত পরীক্ষার পরে, এটি ভাল যখন N 8 হয়। এখন পর্যন্ত এই কাগজটি সংশোধিত ওজনযুক্ত মধ্যম মূল্য উপস্থাপন করেঃ

Thoughts on High-Frequency Trading Strategies (4)

এই মুহুর্তে, মধ্যম মূল্যের পরিবর্তনগুলির পূর্বাভাস আর আই এর সাথে উল্লেখযোগ্যভাবে সম্পর্কিত নয়। যদিও এই ফলাফলটি সহজ ওজনযুক্ত মধ্যম মূল্যের চেয়ে কিছুটা ভাল, এটি এখনও বাস্তব ট্রেডিং দৃশ্যকল্পগুলিতে প্রযোজ্য নয়। এটি কেবল একটি প্রস্তাবিত পদ্ধতি। এস স্টোইকভের একটি 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]:

Thoughts on High-Frequency Trading Strategies (4)

[১৬] এঃ

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

Thoughts on High-Frequency Trading Strategies (4)

সংক্ষিপ্তসার

মধ্যম মূল্য উচ্চ-ফ্রিকোয়েন্সি কৌশলগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ কারণ এটি স্বল্পমেয়াদী ভবিষ্যতের দামের পূর্বাভাস হিসাবে কাজ করে। অতএব, মধ্যম মূল্যের পক্ষে যতটা সম্ভব সঠিক হওয়া গুরুত্বপূর্ণ। পূর্বে আলোচনা করা মধ্যম মূল্য পদ্ধতিগুলি অর্ডার বুকের ডেটার উপর ভিত্তি করে, কারণ বিশ্লেষণে অর্ডার বুকের কেবলমাত্র শীর্ষ স্তরটি ব্যবহার করা হয়। লাইভ ট্রেডিংয়ে, কৌশলগুলিকে প্রকৃত লেনদেনের দামের তুলনায় মধ্যম মূল্যের পূর্বাভাসগুলি যাচাই করার জন্য ট্রেড ডেটা সহ সমস্ত উপলব্ধ ডেটা ব্যবহার করার লক্ষ্য রাখতে হবে। আমি স্টোইকভকে টুইটারে উল্লেখ করার কথা মনে করি যে প্রকৃত মধ্যম মূল্যটি বিড এবং জিজ্ঞাসা মূল্যের সম্ভাবনার একটি ওজনযুক্ত গড় হওয়া উচিত। এই বিষয়টি পূর্ববর্তী নিবন্ধগুলিতে অনুসন্ধান করা হয়েছে। দৈর্ঘ্যের সীমাবদ্ধতার কারণে, এই বিষয়গুলির উপর আরও বিশদ পরবর্তী নিবন্ধে আলোচনা করা হবে।


আরও দেখুন