দীর্ঘ শর্ট পজিশনের সুষম সমন্বয় সহ সুষম মূলধন কৌশল অর্জন

লেখক:লিডিয়া, তৈরিঃ 2023-01-09 13:46:21, আপডেটঃ 2023-09-20 10:13:35

img

দীর্ঘ শর্ট পজিশনের সুষম সমন্বয় সহ সুষম মূলধন কৌশল অর্জন

পূর্ববর্তী নিবন্ধে (https://www.fmz.com/bbs-topic/9862), আমরা জোড়া ট্রেডিং কৌশল চালু এবং ডেটা এবং গাণিতিক বিশ্লেষণ ব্যবহার করে ট্রেডিং কৌশল তৈরি এবং স্বয়ংক্রিয় কিভাবে প্রদর্শন।

লং-শর্ট পজিশন ব্যালেন্সড ইক্যুইটি কৌশল হল ট্রেডিং অবজেক্টের একটি বাস্কে প্রযোজ্য জোড়া ট্রেডিং কৌশলটির একটি প্রাকৃতিক সম্প্রসারণ। এটি ডিজিটাল মুদ্রা বাজার এবং পণ্যের ফিউচার বাজারগুলির মতো অনেকগুলি বৈচিত্র্য এবং আন্তঃসংযোগ সহ ট্রেডিং বাজারের জন্য বিশেষভাবে উপযুক্ত।

মৌলিক নীতি

লং-শর্ট পজিশনের ভারসাম্যপূর্ণ ইক্যুইটি কৌশলটি হ'ল একযোগে ট্রেডিং লক্ষ্যগুলির একটি ঝুড়ি লং এবং শর্ট করা। জোড়া ট্রেডিংয়ের মতোই, এটি নির্ধারণ করে যে কোন বিনিয়োগের লক্ষ্যটি সস্তা এবং কোন বিনিয়োগের লক্ষ্যটি ব্যয়বহুল। পার্থক্যটি হ'ল লং-শর্ট পজিশনের ভারসাম্যপূর্ণ ইক্যুইটি কৌশলটি কোন বিনিয়োগের লক্ষ্যগুলি তুলনামূলকভাবে সস্তা বা ব্যয়বহুল তা নির্ধারণ করার জন্য একটি স্টক নির্বাচন পুলের মধ্যে সমস্ত বিনিয়োগের লক্ষ্যগুলি সাজিয়ে দেবে। তারপরে, এটি র্যাঙ্কিংয়ের ভিত্তিতে শীর্ষ এন বিনিয়োগের লক্ষ্যগুলি লং করবে এবং একই পরিমাণে নীচের এন বিনিয়োগের লক্ষ্যগুলি শর্ট করবে (লং পজিশনের মোট মূল্য = শর্ট পজিশনের মোট মূল্য) ।

আপনি কি মনে রাখবেন যে আমরা যা বলেছি যে জোড়া ট্রেডিং একটি বাজার নিরপেক্ষ কৌশল? লং-শর্ট পজিশনের ভারসাম্যপূর্ণ ইক্যুইটি কৌশলটির ক্ষেত্রেও এটি সত্য, কারণ সমান পরিমাণে লং এবং শর্ট পজিশন নিশ্চিত করে যে কৌশলটি বাজার নিরপেক্ষ থাকবে (বাজার ওঠানামা দ্বারা প্রভাবিত হবে না) । কৌশলটি পরিসংখ্যানগতভাবেও শক্তিশালী; বিনিয়োগের লক্ষ্যগুলি র্যাঙ্কিং করে এবং লং পজিশনগুলি ধরে রেখে আপনি আপনার র্যাঙ্কিং মডেলের পজিশনগুলি অনেকবার খুলতে পারেন, কেবলমাত্র একবারের ঝুঁকি খোলা পজিশন নয়। আপনি কেবলমাত্র আপনার র্যাঙ্কিং স্কিমের মানের উপর বাজি ধরেছেন।

র্যাঙ্কিং স্কিম কি?

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

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

কিভাবে একটি র্যাঙ্কিং স্কিম তৈরি করবেন?

একবার আমরা র্যাঙ্কিং স্কিমটি নির্ধারণ করার পরে, আমরা এটি থেকে মুনাফা অর্জনের আশা করি। আমরা শীর্ষ বিনিয়োগের লক্ষ্যগুলি দীর্ঘ এবং নীচের বিনিয়োগের লক্ষ্যগুলি সংক্ষিপ্ত করার জন্য একই পরিমাণ মূলধন বিনিয়োগ করে এটি করি। এটি নিশ্চিত করে যে কৌশলটি কেবল র্যাঙ্কিংয়ের মানের অনুপাতে মুনাফা অর্জন করবে এবং এটি হবে বাজার নিরপেক্ষ

ধরুন আপনি সমস্ত বিনিয়োগের লক্ষ্যগুলি m র্যাঙ্ক করছেন, এবং আপনার বিনিয়োগের জন্য n ডলার রয়েছে, এবং আপনি মোট 2p (যেখানে m> 2p) অবস্থানগুলি ধরে রাখতে চান। যদি বিনিয়োগের বস্তুর র্যাঙ্কিং র্যাঙ্কিং 1 সবচেয়ে খারাপ সম্পাদন করার আশা করা হয় তবে বিনিয়োগের বস্তুর র্যাঙ্কিং m সেরা সম্পাদন করার আশা করা হয়ঃ

  • আপনি ইনভেস্টমেন্ট অবজেক্টগুলিকে র্যাঙ্ক করুনঃ 1,...,p পজিশন, 2/2p USD এর ইনভেস্টমেন্ট টার্গেট শর্ট করুন।

  • আপনি ইনভেস্টমেন্ট অবজেক্টগুলিকে এইভাবে র্যাঙ্ক করুনঃ m-p,...,m অবস্থান, n/2p USD এর বিনিয়োগের লক্ষ্যমাত্রা দীর্ঘ করুন।

দ্রষ্টব্যঃ যেহেতু মূল্যের ওঠানামা দ্বারা সৃষ্ট বিনিয়োগের বিষয়বস্তুর দাম সর্বদা n / 2p সমানভাবে ভাগ করবে না, এবং কিছু বিনিয়োগের বিষয়বস্তু পূর্ণসংখ্যা দিয়ে কেনা উচিত, কিছু ভুল অ্যালগরিদম থাকবে, যা এই সংখ্যার যতটা সম্ভব কাছাকাছি হওয়া উচিত। n = 100000 এবং p = 500 চলমান কৌশলগুলির জন্য, আমরা দেখতে পাচ্ছি যেঃ

n/2p = 100000/1000 = 100

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

আসুন একটি অনুমানমূলক উদাহরণ নিই।

  • এফএমজেড কোয়ান্ট প্ল্যাটফর্মে আমাদের গবেষণা পরিবেশ তৈরি করুন

প্রথমত, সুষ্ঠুভাবে কাজ করার জন্য আমাদের আমাদের গবেষণা পরিবেশ তৈরি করতে হবে। এই নিবন্ধে আমরা FMZ Quant প্ল্যাটফর্ম ব্যবহার করি (FMZ.COM) আমাদের গবেষণা পরিবেশ তৈরি করতে, প্রধানত সুবিধাজনক এবং দ্রুত এপিআই ইন্টারফেস এবং এই প্ল্যাটফর্মের ভাল প্যাকেজড ডকার সিস্টেম ব্যবহার করার জন্য।

FMZ Quant প্ল্যাটফর্মের আনুষ্ঠানিক নামে এই ডকার সিস্টেমকে ডকার সিস্টেম বলা হয়।

দয়া করে আমার আগের নিবন্ধটি দেখুন কিভাবে একটি ডকার এবং রোবট স্থাপন করবেনঃhttps://www.fmz.com/bbs-topic/9864.

যারা নিজের ক্লাউড কম্পিউটিং সার্ভার ক্রয় করতে চান তারা এই নিবন্ধটি দেখতে পারেনঃhttps://www.fmz.com/digest-topic/5711.

ক্লাউড কম্পিউটিং সার্ভার এবং ডকার সিস্টেম সফলভাবে স্থাপন করার পর, পরবর্তী আমরা পাইথন বর্তমান বৃহত্তম শিল্পকর্ম ইনস্টল করা হবেঃ Anaconda

এই নিবন্ধে প্রয়োজনীয় সমস্ত প্রাসঙ্গিক প্রোগ্রাম পরিবেশ (নির্ভরতা লাইব্রেরি, সংস্করণ পরিচালনা ইত্যাদি) বাস্তবায়ন করার জন্য, সবচেয়ে সহজ উপায় হ'ল অ্যানাকোন্ডা ব্যবহার করা। এটি একটি প্যাকেজড পাইথন ডেটা সায়েন্স বাস্তুতন্ত্র এবং নির্ভরতা লাইব্রেরি ম্যানেজার।

Anaconda এর ইনস্টলেশন পদ্ধতির জন্য, অনুগ্রহ করে Anaconda এর অফিসিয়াল গাইড দেখুনঃhttps://www.anaconda.com/distribution/.

এই নিবন্ধটি পাইথন বৈজ্ঞানিক কম্পিউটিংয়ের দুটি জনপ্রিয় এবং গুরুত্বপূর্ণ লাইব্রেরি নম্পি এবং পান্ডা ব্যবহার করবে।

উপরের মৌলিক কাজটি আমার পূর্ববর্তী নিবন্ধগুলিতেও উল্লেখ করতে পারে, যা অ্যানাকোন্ডা পরিবেশ এবং নম্পি এবং পান্ডা লাইব্রেরিগুলি কীভাবে সেট আপ করবেন তা পরিচয় করিয়ে দেয়। বিস্তারিত জানার জন্য, দয়া করে পড়ুনঃhttps://www.fmz.com/digest-topic/9863.

আমরা এলোমেলো বিনিয়োগের লক্ষ্যমাত্রা এবং এলোমেলো ফ্যাক্টর তৈরি করি। আসুন অনুমান করি যে আমাদের ভবিষ্যতের রিটার্ন আসলে এই ফ্যাক্টর মানগুলির উপর নির্ভর করে।

import numpy as np
import statsmodels.api as sm
import scipy.stats as stats
import scipy
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
## PROBLEM SETUP ##
# Generate stocks and a random factor value for them
stock_names = ['stock ' + str(x) for x in range(10000)]
current_factor_values = np.random.normal(0, 1, 10000)
# Generate future returns for these are dependent on our factor values
future_returns = current_factor_values + np.random.normal(0, 1, 10000)
# Put both the factor values and returns into one dataframe
data = pd.DataFrame(index = stock_names, columns=['Factor Value','Returns'])
data['Factor Value'] = current_factor_values
data['Returns'] = future_returns
# Take a look
data.head(10)

img

এখন যেহেতু আমরা ফ্যাক্টর মান এবং রিটার্ন পেয়েছি, আমরা দেখতে পারি যদি আমরা ফ্যাক্টর মানের উপর ভিত্তি করে বিনিয়োগের লক্ষ্যগুলি র্যাঙ্ক করি এবং তারপরে দীর্ঘ এবং সংক্ষিপ্ত অবস্থানগুলি খুলতে পারি।

# Rank stocks
ranked_data = data.sort_values('Factor Value')
# Compute the returns of each basket with a basket size 500, so total (10000/500) baskets
number_of_baskets = int(10000/500)
basket_returns = np.zeros(number_of_baskets)
for i in range(number_of_baskets):
    start = i * 500
    end = i * 500 + 500 
    basket_returns[i] = ranked_data[start:end]['Returns'].mean()
# Plot the returns of each basket
plt.figure(figsize=(15,7))
plt.bar(range(number_of_baskets), basket_returns)
plt.ylabel('Returns')
plt.xlabel('Basket')
plt.legend(['Returns of Each Basket'])
plt.show()

img

আমাদের কৌশল হল বিনিয়োগের লক্ষ্যবস্তু পুলের প্রথম র্যাঙ্কিং বাস্কেটে দীর্ঘ যেতে; দশম র্যাঙ্কিং বাস্কেটের কম যেতে। এই কৌশলটির রিটার্নগুলি হলঃ

basket_returns[number_of_baskets-1] - basket_returns[0]

ফলাফল হচ্ছে: ৪.১৭২

আমাদের র্যাঙ্কিং মডেলের উপর অর্থ বিনিয়োগ করুন যাতে এটি উচ্চ-পারফরম্যান্স বিনিয়োগের লক্ষ্যগুলিকে নিম্ন-পারফরম্যান্স বিনিয়োগের লক্ষ্যগুলি থেকে পৃথক করতে পারে।

এই নিবন্ধের বাকি অংশে, আমরা কীভাবে র্যাঙ্কিং স্কিমটি মূল্যায়ন করব তা নিয়ে আলোচনা করব। র্যাঙ্কিং-ভিত্তিক সালিশের সুবিধাটি হ'ল এটি বাজারের বিশৃঙ্খলা দ্বারা প্রভাবিত হয় না, পরিবর্তে বাজারের বিশৃঙ্খলা ব্যবহার করা যেতে পারে।

আসুন বাস্তব বিশ্বের একটি উদাহরণ বিবেচনা করি।

আমরা এস এন্ড পি ৫০০ সূচকের বিভিন্ন শিল্পের ৩২টি শেয়ারের ডেটা লোড করেছি এবং সেগুলোকে র্যাঙ্ক করার চেষ্টা করেছি।

from backtester.dataSource.yahoo_data_source import YahooStockDataSource
from datetime import datetime
startDateStr = '2010/01/01'
endDateStr = '2017/12/31'
cachedFolderName = '/Users/chandinijain/Auquan/yahooData/'
dataSetId = 'testLongShortTrading'
instrumentIds = ['ABT','AKS','AMGN','AMD','AXP','BK','BSX',
                'CMCSA','CVS','DIS','EA','EOG','GLW','HAL',
                'HD','LOW','KO','LLY','MCD','MET','NEM',
                'PEP','PG','M','SWN','T','TGT',
                'TWX','TXN','USB','VZ','WFC']
ds = YahooStockDataSource(cachedFolderName=cachedFolderName,
                            dataSetId=dataSetId,
                            instrumentIds=instrumentIds,
                            startDateStr=startDateStr,
                            endDateStr=endDateStr,
                            event='history')
price = 'adjClose'

আসুন এক মাসের সময়ের জন্য স্ট্যান্ডার্ডাইজড ইম্পুটম ইনডিকেটরকে র্যাঙ্কিংয়ের ভিত্তি হিসেবে ব্যবহার করি।

## Define normalized momentum
def momentum(dataDf, period):
    return dataDf.sub(dataDf.shift(period), fill_value=0) / dataDf.iloc[-1]
## Load relevant prices in a dataframe
data = ds.getBookDataByFeature()['Adj Close']
#Let's load momentum score and returns into separate dataframes
index = data.index
mscores = pd.DataFrame(index=index,columns=assetList)
mscores = momentum(data, 30)
returns = pd.DataFrame(index=index,columns=assetList)
day = 30

এখন আমরা আমাদের স্টকগুলির আচরণ বিশ্লেষণ করব এবং দেখব যে আমাদের স্টকগুলি আমাদের নির্বাচিত র্যাঙ্কিং ফ্যাক্টরে বাজারে কীভাবে কাজ করে।

তথ্য বিশ্লেষণ

স্টক আচরণ

আসুন দেখি আমাদের নির্বাচিত স্টকগুলির বাস্কেটটি আমাদের র্যাঙ্কিং মডেলটিতে কীভাবে সম্পাদন করে। এটি করার জন্য, আসুন আমরা সমস্ত স্টকগুলির জন্য সাপ্তাহিক ফরওয়ার্ড রিটার্ন গণনা করি। তারপরে আমরা প্রতিটি স্টক এবং পূর্ববর্তী 30 দিনের গতির 1 সপ্তাহের ফরওয়ার্ড রিটার্নের মধ্যে সম্পর্ক দেখতে পারি। ইতিবাচক সম্পর্ক দেখানো স্টকগুলি ট্রেন্ড অনুসরণকারী, যখন নেতিবাচক সম্পর্ক দেখানো স্টকগুলি গড় বিপরীত হয়।

# Calculate Forward returns
forward_return_day = 5
returns = data.shift(-forward_return_day)/data -1
returns.dropna(inplace = True)
# Calculate correlations between momentum and returns
correlations = pd.DataFrame(index = returns.columns, columns = ['Scores', 'pvalues'])
mscores = mscores[mscores.index.isin(returns.index)]
for i in correlations.index:
    score, pvalue = stats.spearmanr(mscores[i], returns[i])
    correlations[‘pvalues’].loc[i] = pvalue
    correlations[‘Scores’].loc[i] = score
correlations.dropna(inplace = True)
correlations.sort_values('Scores', inplace=True)
l = correlations.index.size
plt.figure(figsize=(15,7))
plt.bar(range(1,1+l),correlations['Scores'])
plt.xlabel('Stocks')
plt.xlim((1, l+1))
plt.xticks(range(1,1+l), correlations.index)
plt.legend(['Correlation over All Data'])
plt.ylabel('Correlation between %s day Momentum Scores and %s-day forward returns by Stock'%(day,forward_return_day));
plt.show()

img

আমাদের সমস্ত স্টক একটি নির্দিষ্ট পরিমাণে একটি গড় বিপরীতমুখী আছে! (স্পষ্টতই, আমরা যে মহাবিশ্বটি বেছে নিয়েছি তা এভাবেই কাজ করে) এটি আমাদের বলে যে যদি স্টকগুলি গতি বিশ্লেষণে শীর্ষে থাকে তবে আমাদের আশা করা উচিত যে তারা পরের সপ্তাহে খারাপভাবে সম্পাদন করবে।

গতি বিশ্লেষণের স্কোর এবং রিটার্নের র্যাঙ্কিংয়ের মধ্যে সম্পর্ক

এরপরে, আমাদের র্যাঙ্কিং স্কোর এবং বাজারের সামগ্রিক ফরওয়ার্ড রিটার্নের মধ্যে সম্পর্ক দেখতে হবে, অর্থাৎ, পূর্বাভাসিত রিটার্ন রেট এবং আমাদের র্যাঙ্কিং ফ্যাক্টরের মধ্যে সম্পর্ক। একটি উচ্চতর সম্পর্ক স্তর একটি নিম্ন আপেক্ষিক রিটার্ন পূর্বাভাস দিতে পারে, বা বিপরীতভাবে?

এই উদ্দেশ্যে, আমরা সমস্ত স্টকগুলির 30 দিনের গতি এবং 1 সপ্তাহের ফরওয়ার্ড রিটার্নের মধ্যে দৈনিক সম্পর্ক গণনা করি।

correl_scores = pd.DataFrame(index = returns.index.intersection(mscores.index), columns = ['Scores', 'pvalues'])
for i in correl_scores.index:
    score, pvalue = stats.spearmanr(mscores.loc[i], returns.loc[i])
    correl_scores['pvalues'].loc[i] = pvalue
    correl_scores['Scores'].loc[i] = score
correl_scores.dropna(inplace = True)
l = correl_scores.index.size
plt.figure(figsize=(15,7))
plt.bar(range(1,1+l),correl_scores['Scores'])
plt.hlines(np.mean(correl_scores['Scores']), 1,l+1, colors='r', linestyles='dashed')
plt.xlabel('Day')
plt.xlim((1, l+1))
plt.legend(['Mean Correlation over All Data', 'Daily Rank Correlation'])
plt.ylabel('Rank correlation between %s day Momentum Scores and %s-day forward returns'%(day,forward_return_day));
plt.show()

img

দৈনিক সম্পর্কগুলি একটি খুব জটিল কিন্তু খুব সামান্য সম্পর্ক দেখায় (যা আমরা বলেছি যে সমস্ত স্টক গড়ের দিকে ফিরে আসবে) । আমাদের 1 মাসের ফরওয়ার্ড রিটার্নের গড় মাসিক সম্পর্কও দেখতে হবে।

monthly_mean_correl =correl_scores['Scores'].astype(float).resample('M').mean()
plt.figure(figsize=(15,7))
plt.bar(range(1,len(monthly_mean_correl)+1), monthly_mean_correl)
plt.hlines(np.mean(monthly_mean_correl), 1,len(monthly_mean_correl)+1, colors='r', linestyles='dashed')
plt.xlabel('Month')
plt.xlim((1, len(monthly_mean_correl)+1))
plt.legend(['Mean Correlation over All Data', 'Monthly Rank Correlation'])
plt.ylabel('Rank correlation between %s day Momentum Scores and %s-day forward returns'%(day,forward_return_day));
plt.show()

img

আমরা দেখতে পাচ্ছি যে গড় সম্পর্ক আবার কিছুটা নেতিবাচক, কিন্তু এটি প্রতি মাসে ব্যাপকভাবে পরিবর্তিত হয়।

স্টক বাস্কেটের গড় আয়

আমরা আমাদের র্যাঙ্কিং থেকে নেওয়া স্টকগুলির একটি বাস্কেটের রিটার্ন গণনা করেছি। যদি আমরা সমস্ত স্টকগুলিকে র্যাঙ্ক করি এবং তাদের nn গ্রুপে ভাগ করি, প্রতিটি গ্রুপের গড় রিটার্ন কী?

প্রথম ধাপ হল একটি ফাংশন তৈরি করা যা প্রতি মাসে দেওয়া প্রতিটি বাস্কেটের গড় রিটার্ন এবং র্যাঙ্কিং ফ্যাক্টর দেবে।

def compute_basket_returns(factor, forward_returns, number_of_baskets, index):
data = pd.concat([factor.loc[index],forward_returns.loc[index]], axis=1)
    # Rank the equities on the factor values
    data.columns = ['Factor Value', 'Forward Returns']
    data.sort_values('Factor Value', inplace=True)
    # How many equities per basket
    equities_per_basket = np.floor(len(data.index) / number_of_baskets)
basket_returns = np.zeros(number_of_baskets)
# Compute the returns of each basket
    for i in range(number_of_baskets):
        start = i * equities_per_basket
        if i == number_of_baskets - 1:
            # Handle having a few extra in the last basket when our number of equities doesn't divide well
            end = len(data.index) - 1
        else:
            end = i * equities_per_basket + equities_per_basket
        # Actually compute the mean returns for each basket
        #s = data.index.iloc[start]
        #e = data.index.iloc[end]
        basket_returns[i] = data.iloc[int(start):int(end)]['Forward Returns'].mean()
        
    return basket_returns

যখন আমরা এই স্কোরের উপর ভিত্তি করে স্টকগুলিকে র্যাঙ্ক করি, আমরা প্রতিটি বাস্কেটের গড় রিটার্ন গণনা করি। এটি আমাদের তাদের সম্পর্ককে দীর্ঘ সময়ের জন্য বুঝতে সহায়তা করবে।

number_of_baskets = 8
mean_basket_returns = np.zeros(number_of_baskets)
resampled_scores = mscores.astype(float).resample('2D').last()
resampled_prices = data.astype(float).resample('2D').last()
resampled_scores.dropna(inplace=True)
resampled_prices.dropna(inplace=True)
forward_returns = resampled_prices.shift(-1)/resampled_prices -1
forward_returns.dropna(inplace = True)
for m in forward_returns.index.intersection(resampled_scores.index):
    basket_returns = compute_basket_returns(resampled_scores, forward_returns, number_of_baskets, m)
    mean_basket_returns += basket_returns
mean_basket_returns /= l    
print(mean_basket_returns)
# Plot the returns of each basket
plt.figure(figsize=(15,7))
plt.bar(range(number_of_baskets), mean_basket_returns)
plt.ylabel('Returns')
plt.xlabel('Basket')
plt.legend(['Returns of Each Basket'])
plt.show()

img

দেখে মনে হচ্ছে আমরা উচ্চ পারফরম্যান্সকারীদের থেকে নিম্ন পারফরম্যান্সকারীদের আলাদা করতে পারি।

মার্জিন (বেস) এর সামঞ্জস্যতা

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

total_months = mscores.resample('M').last().index
months_to_plot = 24
monthly_index = total_months[:months_to_plot+1]
mean_basket_returns = np.zeros(number_of_baskets)
strategy_returns = pd.Series(index = monthly_index)
f, axarr = plt.subplots(1+int(monthly_index.size/6), 6,figsize=(18, 15))
for month in range(1, monthly_index.size):
    temp_returns = forward_returns.loc[monthly_index[month-1]:monthly_index[month]]
    temp_scores = resampled_scores.loc[monthly_index[month-1]:monthly_index[month]]
    for m in temp_returns.index.intersection(temp_scores.index):
        basket_returns = compute_basket_returns(temp_scores, temp_returns, number_of_baskets, m)
        mean_basket_returns += basket_returns
    
    strategy_returns[monthly_index[month-1]] = mean_basket_returns[ number_of_baskets-1] - mean_basket_returns[0]
    
    mean_basket_returns /= temp_returns.index.intersection(temp_scores.index).size
    
    r = int(np.floor((month-1) / 6))
    c = (month-1) % 6
    axarr[r, c].bar(range(number_of_baskets), mean_basket_returns)
    axarr[r, c].xaxis.set_visible(False)
    axarr[r, c].set_title('Month ' + str(month))
plt.show()

img

plt.figure(figsize=(15,7))
plt.plot(strategy_returns)
plt.ylabel('Returns')
plt.xlabel('Month')
plt.plot(strategy_returns.cumsum())
plt.legend(['Monthly Strategy Returns', 'Cumulative Strategy Returns'])
plt.show()

img

অবশেষে, যদি আমরা প্রতি মাসে শেষ বাস্কেটটি লম্বা করি এবং প্রথম বাস্কেটটি শর্ট করি, তাহলে আসুন রিটার্নগুলি দেখুন (প্রতিটি টিকিটের জন্য সমান মূলধন বরাদ্দ অনুমান করে) ।

total_return = strategy_returns.sum()
ann_return = 100*((1 + total_return)**(12.0 /float(strategy_returns.index.size))-1)
print('Annual Returns: %.2f%%'%ann_return)

বার্ষিক রিটার্ন রেটঃ ৫.০৩%

আমরা দেখতে পাচ্ছি যে আমাদের একটি দুর্বল র্যাঙ্কিং স্কিম রয়েছে, যা উচ্চ পারফরম্যান্স স্টকগুলিকে নিম্ন পারফরম্যান্স স্টক থেকে কেবল নরমভাবে আলাদা করতে পারে। উপরন্তু, এই র্যাঙ্কিং স্কিমটি ধারাবাহিক নয় এবং প্রতি মাসে ব্যাপকভাবে পরিবর্তিত হয়।

সঠিক র্যাঙ্কিং স্কিম খুঁজুন

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

র্যাঙ্কিং স্কিমটি প্রায় যে কোনও মডেল থেকেও আসতে পারে। এটি অবশ্যই মূল্য ভিত্তিক ফ্যাক্টর মডেল নয়। এটি একটি মেশিন লার্নিং প্রযুক্তি হতে পারে যা এক মাস আগে রিটার্ন পূর্বাভাস দিতে পারে এবং এই স্তর অনুসারে র্যাঙ্ক করতে পারে।

র্যাঙ্কিং স্কিম নির্বাচন এবং মূল্যায়ন

র্যাঙ্কিং স্কিমটি দীর্ঘ-স্বল্প স্থিতিশীল ইক্যুইটি কৌশলটির সুবিধা এবং সবচেয়ে গুরুত্বপূর্ণ অংশ। একটি ভাল র্যাঙ্কিং স্কিম নির্বাচন করা একটি পদ্ধতিগত প্রকল্প, এবং কোন সহজ উত্তর নেই।

একটি ভাল সূচনা পয়েন্ট হল বিদ্যমান পরিচিত প্রযুক্তি নির্বাচন করা এবং আপনি তাদের সামান্য পরিবর্তন করতে পারেন কিনা তা দেখুন। এখানে আমরা বেশ কয়েকটি সূচনা পয়েন্ট নিয়ে আলোচনা করবঃ

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

  • মূল্য নির্ধারণের মডেলঃ যে কোনও মডেল যা ভবিষ্যতের রিটার্ন পূর্বাভাস দেয় তা এমন একটি কারণ হতে পারে যা সম্ভাব্যভাবে আপনার ট্রেডিং অবজেক্টের বাস্কেটকে র্যাঙ্ক করতে ব্যবহার করা যেতে পারে। আপনি যে কোনও জটিল মূল্য নির্ধারণের মডেল নিতে পারেন এবং এটিকে র্যাঙ্কিং স্কিমে রূপান্তর করতে পারেন।

  • মূল্য-ভিত্তিক কারণ (প্রযুক্তিগত সূচক): মূল্য-ভিত্তিক কারণগুলি, যেমনটি আজ আলোচনা করা হয়েছে, প্রতিটি শেয়ারের ঐতিহাসিক মূল্য সম্পর্কে তথ্য অর্জন করে এবং এটিকে ফ্যাক্টর মান তৈরি করতে ব্যবহার করে। উদাহরণস্বরূপ চলমান গড় সূচক, গতির সূচক বা অস্থিরতা সূচক হতে পারে।

  • পুনরাবৃত্তি এবং গতিঃ এটি লক্ষণীয় যে কিছু কারণ বিশ্বাস করে যে একবার দাম একদিকে চলে গেলে তারা এটি চালিয়ে যাবে, যখন কিছু কারণ ঠিক বিপরীত। উভয়ই বিভিন্ন সময় দিগন্ত এবং সম্পদগুলির জন্য কার্যকর মডেল এবং মৌলিক আচরণটি গতি বা পুনরাবৃত্তির উপর ভিত্তি করে কিনা তা অধ্যয়ন করা গুরুত্বপূর্ণ।

  • বেসিক ফ্যাক্টর (মূল্য ভিত্তিক): এটি মূল মানের সংমিশ্রণ, যেমন পিই, লভ্যাংশ ইত্যাদি। বেসিক ভ্যালুতে কোম্পানির বাস্তব বিশ্বের তথ্য সম্পর্কিত তথ্য রয়েছে, তাই এটি অনেক দিক থেকে দামের চেয়ে শক্তিশালী হতে পারে।

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

অন্যান্য বিবেচ্য বিষয়

  • পুনরায় ভারসাম্য বজায় রাখার ফ্রিকোয়েন্সি

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

  • মূলধন ক্ষমতা এবং লেনদেনের খরচ

প্রতিটি কৌশলতে ন্যূনতম এবং সর্বোচ্চ মূলধন পরিমাণ রয়েছে এবং ন্যূনতম প্রান্তিক সাধারণত লেনদেনের ব্যয় দ্বারা নির্ধারিত হয়।

অনেক স্টক ট্রেডিং উচ্চ লেনদেনের খরচ হতে হবে। যদি আপনি 1,000 শেয়ার কিনতে চান, এটি প্রতি পুনরায় ভারসাম্য বজায় রাখতে হাজার হাজার ডলার খরচ হবে। আপনার মূলধন বেস যথেষ্ট উচ্চ হতে হবে যাতে লেনদেনের খরচ আপনার কৌশল উত্পন্ন রিটার্ন একটি ছোট অংশের জন্য অ্যাকাউন্ট করতে পারেন। উদাহরণস্বরূপ, যদি আপনার মূলধন $ 100,000 হয় এবং আপনার কৌশল প্রতি মাসে 1% ($ 1,000) উপার্জন করে, তবে এই সমস্ত রিটার্ন লেনদেনের খরচ দ্বারা গ্রাস করা হবে। আপনাকে 1,000 টিরও বেশি শেয়ার উপার্জন করতে লক্ষ লক্ষ ডলার মূলধন দিয়ে কৌশলটি চালাতে হবে।

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


সম্পর্কিত

আরো