আমি ডিজিটাল মুদ্রার উচ্চ ফ্রিকোয়েন্সি ট্রেডিং সম্পর্কে দুটি নিবন্ধ লিখেছি, যথা
আমার পূর্ববর্তী নিবন্ধগুলিতে, আমি উল্লেখ করেছি যে উচ্চ-ফ্রিকোয়েন্সি কৌশলগুলি অত্যন্ত অস্থিরতাযুক্ত বাজারগুলির জন্য বিশেষত উপযুক্ত। স্বল্প সময়ের মধ্যে একটি ট্রেডিং সরঞ্জামের দামের পরিবর্তনগুলি সামগ্রিক প্রবণতা এবং দোলগুলির সমন্বয়ে গঠিত। যদিও আমরা যদি প্রবণতা পরিবর্তনগুলি সঠিকভাবে পূর্বাভাস দিতে পারি তবে এটি সত্যই লাভজনক, এটিও সবচেয়ে চ্যালেঞ্জিং দিক। এই নিবন্ধে, আমি প্রাথমিকভাবে উচ্চ-ফ্রিকোয়েন্সি মেকার কৌশলগুলিতে মনোনিবেশ করব এবং প্রবণতা পূর্বাভাসের দিকে মনোনিবেশ করব না। দোলক বাজারে, বিড এবং জিজ্ঞাসা আদেশগুলি কৌশলগতভাবে স্থাপন করে, যদি অর্ডারগুলির ফ্রিকোয়েন্সি যথেষ্ট উচ্চ এবং মুনাফা মার্জিন উল্লেখযোগ্য হয় তবে এটি প্রবণতা দ্বারা সৃষ্ট সম্ভাব্য ক্ষতিগুলি আচ্ছাদন করতে পারে। এইভাবে, বাজারের গতিবিধিগুলি পূর্বাভাস না দিয়ে লাভজনকতা অর্জন করা যায়। বর্তমানে, এক্সচেঞ্জগুলি মেকার ট্রেডগুলির জন্য ছাড় প্রদান করে, যা মুনাফারও একটি উপাদান। প্রতিযোগিতামূলক বাজারের অনুপাত যত বেশি, ছাড়
ক্রয় এবং বিক্রয় আদেশ উভয়ই স্থাপন করে এমন একটি কৌশল বাস্তবায়নের প্রথম সমস্যা হ'ল এই আদেশগুলি কোথায় স্থাপন করা যায় তা নির্ধারণ করা। অর্ডারগুলি বাজারের গভীরতার কাছাকাছি স্থাপন করা হয়, কার্যকর হওয়ার সম্ভাবনা তত বেশি। তবে, অত্যন্ত অস্থির বাজারের পরিস্থিতিতে, যে মূল্যে একটি অর্ডার তাত্ক্ষণিকভাবে কার্যকর করা হয় তা বাজারের গভীরতা থেকে দূরে থাকতে পারে, যার ফলে অপর্যাপ্ত লাভ হতে পারে। অন্যদিকে, আদেশগুলি খুব দূরে স্থাপন করা কার্যকর হওয়ার সম্ভাবনা হ্রাস করে। এটি একটি অপ্টিমাইজেশন সমস্যা যা মোকাবেলা করা দরকার।
ঝুঁকি পরিচালনার জন্য পজিশন কন্ট্রোল অত্যন্ত গুরুত্বপূর্ণ। একটি কৌশল দীর্ঘ সময়ের জন্য অত্যধিক অবস্থান জমা করতে পারে না। এটি স্থাপন করা আদেশের দূরত্ব এবং পরিমাণ নিয়ন্ত্রণ করে এবং সামগ্রিক অবস্থানের সীমা নির্ধারণ করে মোকাবেলা করা যেতে পারে।
উপরের উদ্দেশ্যগুলি অর্জনের জন্য, মডেলিং এবং অনুমান বিভিন্ন দিক যেমন কার্যকর হওয়ার সম্ভাবনা, কার্যকর হওয়া থেকে লাভ এবং বাজারের অনুমানের জন্য প্রয়োজনীয়। এই বিষয়ে অসংখ্য নিবন্ধ এবং কাগজপত্র উপলব্ধ রয়েছে, যেমন
বিন্যান্স প্রদান করেডাউনলোডযোগ্য তথ্যএই নিবন্ধে আমরা HOOKUSDT-aggTrades-2023-01-27 ডেটার উদাহরণ ব্যবহার করব। এই নিবন্ধে আমরা HOOKUSDT-aggTrades-2023-01-27 ডেটার উদাহরণ ব্যবহার করব।
[1]:
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
পৃথক বাণিজ্যিক তথ্যের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছেঃ
আপনি দেখতে পাচ্ছেন যে সেদিন 660,000 টি ট্রেড কার্যকর করা হয়েছিল, যা একটি অত্যন্ত সক্রিয় বাজারকে নির্দেশ করে।
[4] এঃ
trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades
আউট[4]: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
৬৬৪৪৭৫ সারি × ৭ কলাম
প্রথমত, মূল ট্রেডগুলিকে দুটি গ্রুপে বিভক্ত করে ডেটা প্রক্রিয়াজাত করা হয়ঃ নির্মাতা হিসাবে কার্যকর ক্রয় অর্ডার এবং গ্রহণকারী হিসাবে কার্যকর বিক্রয় অর্ডার। অতিরিক্তভাবে, মূল সমষ্টিগত ট্রেড ডেটা একই সময়ে, একই দামে এবং একই দিকের একক ডেটা পয়েন্টে কার্যকর করা ট্রেডগুলিকে একত্রিত করে। উদাহরণস্বরূপ, যদি 100 এর ভলিউম সহ একটি একক ক্রয় অর্ডার থাকে তবে দামগুলি যদি আলাদা হয় তবে এটি যথাক্রমে 60 এবং 40 এর ভলিউম সহ দুটি ট্রেডে বিভক্ত হতে পারে। এটি ক্রয় অর্ডার ভলিউমের অনুমানকে প্রভাবিত করতে পারে। অতএব, লেনদেন_সময় ভিত্তিতে আবার ডেটা সমষ্টি করা প্রয়োজন। এই দ্বিতীয় সমষ্টির পরে, ডেটা ভলিউম 140,000 রেকর্ড হ্রাস পায়।
[6] এঃ
trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
sell_trades = trades[trades['is_buyer_maker']==True].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'
})
sell_trades = sell_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()
sell_trades['interval']=sell_trades['transact_time'] - sell_trades['transact_time'].shift()
[১০] এঃ
print(trades.shape[0] - (buy_trades.shape[0]+sell_trades.shape[0]))
বাইরে [10]: ১৪৬১৮১
উদাহরণস্বরূপ ক্রয় অর্ডার নিন, আসুন প্রথমে একটি হিস্টোগ্রাম প্লট করি। এটি পর্যবেক্ষণ করা যেতে পারে যে একটি উল্লেখযোগ্য লং-টেইল প্রভাব রয়েছে, বেশিরভাগ ডেটা হিস্টোগ্রামের বামতম অংশের দিকে কেন্দ্রীভূত। তবে, কিছু বড় বাণিজ্যও লেজ শেষের দিকে বিতরণ করা হয়েছে।
[36] এঃ
buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));
বাইরে [36]:
সহজ পর্যবেক্ষণের জন্য, আসুন লেজটি ট্রিম করি এবং ডেটা বিশ্লেষণ করি। এটি পর্যবেক্ষণ করা যেতে পারে যে বাণিজ্যের পরিমাণ বাড়ার সাথে সাথে ঘটনার ফ্রিকোয়েন্সি হ্রাস পায় এবং হ্রাসের হার দ্রুততর হয়।
[৩৭] এঃ
buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));
বাইরে [37]:
ট্রেড পরিমাণের বন্টন সম্পর্কে অসংখ্য গবেষণা হয়েছে। দেখা গেছে যে ট্রেড পরিমাণগুলি পাওয়ার-আইন বন্টন অনুসরণ করে, যা প্যারেটো বন্টন নামেও পরিচিত, যা পরিসংখ্যান পদার্থবিজ্ঞান এবং সামাজিক বিজ্ঞানগুলিতে একটি সাধারণ সম্ভাব্যতা বন্টন। একটি পাওয়ার-আইন বন্টনে, কোনও ইভেন্টের আকার (বা ফ্রিকোয়েন্সি) এর সম্ভাব্যতা সেই ইভেন্টের আকারের নেতিবাচক এক্সপোনেন্টের সমানুপাতিক। এই বন্টনের প্রধান বৈশিষ্ট্য হ'ল বড় ইভেন্টগুলির ফ্রিকোয়েন্সি (অর্থাৎ, গড় থেকে দূরে) অন্যান্য অনেক বন্টনে প্রত্যাশিতের চেয়ে বেশি। এটি ঠিক বাণিজ্য পরিমাণ বন্টনের বৈশিষ্ট্য। প্যারেটো বন্টনের ফর্মটি P ((x) = C ((x^-α) দ্বারা দেওয়া হয়। আসুন এটি পরীক্ষামূলকভাবে যাচাই করি।
নিম্নলিখিত গ্রাফটি একটি নির্দিষ্ট মান অতিক্রম করে ট্রেড পরিমাণের সম্ভাবনাকে উপস্থাপন করে। নীল রেখাটি প্রকৃত সম্ভাবনাকে উপস্থাপন করে, যখন কমলা রেখাটি সিমুলেটেড সম্ভাবনাকে উপস্থাপন করে। দয়া করে নোট করুন যে আমরা এই মুহুর্তে নির্দিষ্ট পরামিতিগুলিতে যাব না। এটি পর্যবেক্ষণ করা যেতে পারে যে বিতরণটি সত্যই একটি প্যারেটো বিতরণ অনুসরণ করে। যেহেতু শূন্যের চেয়ে বড় ট্রেড পরিমাণের সম্ভাবনা 1 এবং স্বাভাবিককরণ সন্তুষ্ট করার জন্য, বিতরণ সমীকরণটি নিম্নরূপ হওয়া উচিতঃ
এখানে, N হল নরমালাইজেশনের পরামিতি। আমরা গড় ট্রেড পরিমাণ, M নির্বাচন করব এবং আলফা -2.06 এ সেট করব। যখন D=N হয় তখন P-মান গণনা করে আলফার নির্দিষ্ট অনুমান পাওয়া যাবে। বিশেষত, আলফা = লগ (((P(d>M)) / লগ ((2) । বিভিন্ন পয়েন্টের পছন্দ আলফার মানের সামান্য পার্থক্যের ফলে হতে পারে।
[৫৫] এঃ
depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
alpha = np.log(np.mean(buy_trades['quantity'] > mean_quantity))/np.log(2)
mean_quantity = buy_trades['quantity'].mean()
probabilities_s = np.array([(1+depth/mean_quantity)**alpha for depth in depths])
plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)
আউট[55]:
[৫৬] এঃ
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);
আউট [56]:
তবে এই অনুমানটি কেবলমাত্র আনুমানিক, যেমনটি গ্রাফটিতে দেখানো হয়েছে যেখানে আমরা সিমুলেটেড এবং প্রকৃত মানগুলির মধ্যে পার্থক্যটি গ্রাফ করি। যখন বাণিজ্যের পরিমাণ ছোট হয়, তখন বিচ্যুতি উল্লেখযোগ্য, এমনকি 10% এর কাছাকাছিও হয়। যদিও প্যারামিটার অনুমানের সময় বিভিন্ন পয়েন্ট নির্বাচন করা সেই নির্দিষ্ট পয়েন্টের সম্ভাবনার নির্ভুলতা উন্নত করতে পারে, এটি সামগ্রিকভাবে বিচ্যুতি সমস্যা সমাধান করে না। এই বিচ্যুতি শক্তি আইন বিতরণের এবং প্রকৃত বন্টনের মধ্যে পার্থক্য থেকে উদ্ভূত হয়। আরও সঠিক ফলাফল পেতে, শক্তি আইন বিতরণের সমীকরণটি সংশোধন করা দরকার। নির্দিষ্ট প্রক্রিয়াটি এখানে বিশদভাবে ব্যাখ্যা করা হয়নি, তবে সংক্ষেপে, একটি মুহূর্তের অন্তর্দৃষ্টি পাওয়ার পরে, এটি পাওয়া যায় যে প্রকৃত সমীকরণটি নিম্নরূপ হওয়া উচিতঃ
সরলীকরণের জন্য, আসুন r = q / M ব্যবহার করে স্বাভাবিক ট্রেড পরিমাণ উপস্থাপন করি। আমরা আগের মতো একই পদ্ধতি ব্যবহার করে পরামিতিগুলি অনুমান করতে পারি। নিম্নলিখিত গ্রাফটি দেখায় যে সংশোধন করার পরে, সর্বাধিক বিচ্যুতি 2% এর বেশি নয়। তত্ত্বগতভাবে, আরও সমন্বয় করা যেতে পারে, তবে এই স্তরের নির্ভুলতা ইতিমধ্যে যথেষ্ট।
[৫২] এঃ
depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
mean = buy_trades['quantity'].mean()
alpha = np.log(np.mean(buy_trades['quantity'] > mean))/np.log(2.05)
probabilities_s = np.array([(((1+20**(-depth/mean))*depth+mean)/mean)**alpha for depth in depths])
plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)
আউট[52]:
[৫৩] এঃ
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);
আউট[53]:
ট্রেড পরিমাণ বিতরণের আনুমানিক সমীকরণের সাথে, এটি লক্ষ করা গুরুত্বপূর্ণ যে সমীকরণে সম্ভাব্যতা প্রকৃত সম্ভাব্যতা নয়, তবে শর্তাধীন সম্ভাব্যতা। এই মুহুর্তে, আমরা প্রশ্নের উত্তর দিতে পারিঃ পরবর্তী অর্ডারটি একটি নির্দিষ্ট মানের চেয়ে বড় হওয়ার সম্ভাবনা কী? আমরা বিভিন্ন গভীরতায় অর্ডারের সম্ভাব্যতাও নির্ধারণ করতে পারি (একটি আদর্শ দৃশ্যকল্পে, অর্ডার সংযোজন, বাতিলকরণ এবং একই গভীরতায় সারি বিবেচনা না করে) ।
এই পর্যায়ে, পাঠ্যটির দৈর্ঘ্য ইতিমধ্যে বেশ দীর্ঘ, এবং এখনও অনেক প্রশ্নের উত্তর প্রয়োজন। নিম্নলিখিত সিরিজের নিবন্ধগুলি উত্তর দেওয়ার চেষ্টা করবে।