হাই ফ্রিকোয়েন্সি ট্রেডিং কৌশল চিন্তা ((4)

লেখক:ঘাস, সৃষ্টিঃ ২০২৩-০৮-০৮ 22:31:47, আপডেটঃ ২০২৩-০৯-১৮ ১৯ঃ৫১ঃ২৫

img

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

গভীর তথ্য

বিনয় সেরা মূল্যের ইতিহাসের তথ্য ডাউনলোড করে, যার মধ্যে রয়েছেঃ best_bid_price: সেরা মূল্য, সর্বোচ্চ মূল্য, best_bid_qty: সর্বোত্তম মূল্য, best_ask_price: সর্বোত্তম মূল্য, best_ask_qty: সর্বোত্তম মূল্য, Transaction_time: সময়সীমা। এই তথ্যটি দ্বিতীয় এবং আরও গভীর তালিকা অন্তর্ভুক্ত করে না। এখানে বিশ্লেষণ করা হয়েছে 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
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);

img

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

img

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

img

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

ভারসাম্যহীন অফার

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

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

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

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)

img

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)

img

মধ্যস্থতাকারী মূল্যের সমন্বয়

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

আমি এখানে I কে সংজ্ঞায়িত করতে চাই যাতে এটি আরও স্বজ্ঞাত হয়ঃ

img

এই মুহূর্তেঃ

img

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

img

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

img

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

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)

img

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)

img

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)

img

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

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


আরো

লুইসএখন আমি বুঝতে পারছি না।

fmzeroগম্ভীর!