একটি সুশৃঙ্খলভাবে সাজানো মাল্টি-স্পেস ভারসাম্যপূর্ণ অধিকার ও স্বার্থ কৌশল বাস্তবায়ন

লেখক:ভাল, তৈরিঃ 2019-08-24 10:05:53, আপডেটঃ 2023-10-19 21:06:54

img

গত নিবন্ধে ((https://www.fmz.com/digest-topic/4187এই নিবন্ধে, আমরা একসাথে ট্রেডিং কৌশলগুলি দেখিয়েছি এবং কীভাবে ডেটা এবং গাণিতিক বিশ্লেষণ ব্যবহার করে ট্রেডিং কৌশলগুলি তৈরি এবং স্বয়ংক্রিয় করা যায় তা দেখিয়েছি।

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

মৌলিক নীতি

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

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

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

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

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

কিভাবে র্যাঙ্কিং তৈরি করা যায়?

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

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

  • আপনি আপনার ইনভেস্টমেন্ট ট্যাগগুলোকে ১,..., p এর মত জায়গায় সাজিয়ে রাখবেন, এবং আপনি $২/২p এর ইনভেস্টমেন্ট ট্যাগগুলোকে ফাঁকা রাখবেন।

  • আপনি আপনার ট্যাগগুলোকে m-p,...,m এর মত করে সাজিয়ে রাখবেন, যা n/2p ডলারের বেশি হবে।

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

n/2p = 100000/1000 = 100

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

আসুন একটি অনুমান দেখি।

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

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

এই ডকার সিস্টেমটি ইনভেন্টর কোয়ালিফাইং প্ল্যাটফর্মের অফিসিয়াল নামের মধ্যে হোস্ট সিস্টেম নামে পরিচিত।

আমি আমার পূর্ববর্তী নিবন্ধে লিখেছি কিভাবে হোস্ট এবং বট স্থাপন করতে হয়ঃhttps://www.fmz.com/bbs-topic/4140

যারা তাদের নিজস্ব ক্লাউড সার্ভার স্থাপনার জন্য হোস্ট কিনতে চান তাদের জন্য এই নিবন্ধটি পড়ুনঃhttps://www.fmz.com/bbs-topic/2848

একটি ভাল ক্লাউড সার্ভিস এবং হোস্ট সিস্টেম সফলভাবে স্থাপন করার পরে, আমরা এখন পাইথনের বৃহত্তম টেম্পলেট ইনস্টল করতে যাচ্ছিঃ আনাকন্ডা।

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

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

本文还将用到numpy和pandas这两个目前在Python科学计算方面十分流行且重要的库.

উপরের মৌলিক কাজগুলি আমার আগের নিবন্ধে উল্লেখ করা যেতে পারে, যেখানে আমি Anaconda পরিবেশ এবং numpy এবং pandas উভয় লাইব্রেরী সেট আপ করার বিষয়ে বিস্তারিতভাবে আলোচনা করেছিঃhttps://www.fmz.com/digest-topic/4169

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

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]

ফলাফল হলঃ ৪.১৭২

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

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

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

আমরা S&P 500-এর বিভিন্ন শিল্পের ৩২টি শেয়ারের ডেটা লোড করেছি এবং সেগুলোর র্যাঙ্কিং করার চেষ্টা করেছি।

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 দিনের গতির সাথে সম্পর্ক দেখতে পারি। ইতিবাচক সম্পর্কিত স্টকগুলি প্রবণতা অনুসরণ করে এবং নেতিবাচক সম্পর্কিত স্টকগুলি গড় রিটার্ন।

# 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

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

গড় শেয়ার রিটার্ন

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

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

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)

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

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

সঠিক র্যাঙ্কিংয়ের পদ্ধতি খুঁজে বের করুন

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

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

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

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

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

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

  • মূল্য নির্ধারণের মডেল: যে কোন ভবিষ্যৎ রিটার্নের পূর্বাভাস মডেল একটি ফ্যাক্টর হতে পারে এবং আপনার এক-বাস্কেট ট্রেডিং ইন্ডিকেটরকে র্যাঙ্কিংয়ের জন্য ব্যবহার করার সম্ভাব্য সম্ভাবনা রয়েছে। আপনি যে কোনও জটিল মূল্য নির্ধারণ মডেল গ্রহণ করতে পারেন এবং এটিকে র্যাঙ্কিং স্কিমে রূপান্তর করতে পারেন।

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

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

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

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

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

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

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

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

প্রতিটি কৌশলতে ন্যূনতম এবং সর্বাধিক মূলধন ভলিউম থাকে, এবং সর্বনিম্ন সীমা সাধারণত লেনদেনের ব্যয়ের দ্বারা নির্ধারিত হয়।

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

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


সম্পর্কিত

আরো