
اس مضمون میں، ہم ایک دن کی تجارتی حکمت عملی لکھیں گے۔ یہ “میان ریورژن ٹریڈنگ پیئرز” کا کلاسک تجارتی تصور استعمال کرے گا۔ اس مثال میں، ہم دو ایکسچینج ٹریڈڈ فنڈز (ETFs)، SPY اور IWM استعمال کریں گے، جو نیویارک اسٹاک ایکسچینج (NYSE) پر تجارت کرتے ہیں اور امریکی اسٹاک مارکیٹ انڈیکس، S&P 500 اور رسل 2000 کی نمائندگی کرنے کی کوشش کرتے ہیں۔” .
حکمت عملی ایک ETF کو لمبا کرکے اور دوسرے کو مختصر کرکے “کیری” بناتی ہے۔ طویل-مختصر تناسب کو کئی طریقوں سے بیان کیا جا سکتا ہے، مثال کے طور پر شماریاتی ہم آہنگی ٹائم سیریز کے طریقوں کا استعمال۔ اس منظر نامے میں، ہم رولنگ لکیری ریگریشن کے ذریعے SPY اور IWM کے درمیان ہیج تناسب کا حساب لگائیں گے۔ یہ ہمیں SPY اور IWM کے درمیان ایک “پھیلاؤ” بنانے کی اجازت دے گا جس کو z-اسکور پر معمول بنایا گیا ہے۔ جب زیڈ سکور ایک مخصوص حد سے تجاوز کر جاتا ہے، تو تجارتی سگنل پیدا ہوتا ہے کیونکہ ہمیں یقین ہے کہ یہ “پھیلاؤ” وسط پر واپس آجائے گا۔
حکمت عملی کا استدلال یہ ہے کہ SPY اور IWM دونوں تقریباً ایک ہی مارکیٹ کے منظر نامے کی نمائندگی کرتے ہیں، یعنی بڑی اور چھوٹی امریکی کمپنیوں کے گروپ کی اسٹاک کی قیمت کی کارکردگی۔ بنیاد یہ ہے کہ اگر آپ قیمتوں کے “میان ریورژن” تھیوری کو قبول کرتے ہیں، تو یہ ہمیشہ پلٹ جائے گا، کیونکہ “واقعات” S&P500 اور رسل 2000 کو بہت کم وقت میں الگ الگ متاثر کر سکتے ہیں، لیکن “سود کی شرح میں فرق” کے درمیان وہ ہمیشہ رہیں گے عام وسط پر واپس جائیں گے، اور دونوں کی طویل مدتی قیمتوں کی سیریز ہمیشہ ایک ساتھ مربوط ہوتی ہیں۔
حکمت عملی
حکمت عملی کو مندرجہ ذیل طور پر انجام دیا جاتا ہے:
ڈیٹا - اپریل 2007 سے فروری 2014 تک SPY اور IWM کے 1 منٹ کے کینڈل سٹک چارٹ حاصل کریں۔
پروسیسنگ - ڈیٹا کو صحیح طریقے سے سیدھ میں رکھیں اور ان سلاخوں کو حذف کریں جو ایک دوسرے سے غائب ہیں۔ (اگر ایک طرف غائب ہے تو، دونوں اطراف کو حذف کر دیا جائے گا)
پھیلاؤ - دو ETFs کے درمیان ہیج کا تناسب ایک رولنگ لکیری ریگریشن کا استعمال کرتے ہوئے شمار کیا جاتا ہے۔ ایک لُک بیک ونڈو کا استعمال کرتے ہوئے بیٹا ریگریشن گتانک کے طور پر بیان کیا جاتا ہے جسے 1 بار سے آگے بڑھایا جاتا ہے اور ریگریشن گتانک کا دوبارہ حساب کیا جاتا ہے۔ لہذا، ہیجنگ کا تناسب βi، bi K-لائن bi-1-k سے bi-1 تک کراسنگ پوائنٹ کا حساب لگا کر K-لائن کو ٹریس کرنے کے لیے استعمال کیا جاتا ہے۔
Z-Score - معیاری اسپریڈ کی قدر کا حساب معمول کے مطابق کیا جاتا ہے۔ اس کا مطلب ہے پھیلاؤ (نمونہ) کے وسط کو گھٹانا اور پھیلاؤ (نمونہ) کے معیاری انحراف سے تقسیم کرنا۔ ایسا کرنے کی وجہ تھریشولڈ پیرامیٹر کو سمجھنے میں آسان بنانا ہے کیونکہ Z-Score ایک طول و عرض کے بغیر مقدار ہے۔ میں نے جان بوجھ کر حسابات میں “لُک ہیڈ تعصب” متعارف کرایا تاکہ یہ ظاہر کیا جا سکے کہ یہ کتنا لطیف ہو سکتا ہے۔ اسے آزمائیں!
ٹریڈنگ - جب منفی زیڈ سکور کی قدر پہلے سے طے شدہ (یا پوسٹ آپٹمائزڈ) حد سے نیچے گر جاتی ہے تو طویل سگنلز پیدا ہوتے ہیں، جبکہ مختصر سگنلز اس کے برعکس پیدا ہوتے ہیں۔ جب زیڈ سکور کی مطلق قدر ایک اضافی حد سے نیچے گر جاتی ہے، تو پوزیشن کو بند کرنے کا سگنل پیدا ہوتا ہے۔ اس حکمت عملی کے لیے، میں نے |z| = 2 کو داخلے کی حد کے طور پر اور |z| = 1 کا انتخاب کیا ہے۔ یہ فرض کرتے ہوئے کہ اوسط تبدیلی پھیلنے میں ایک کردار ادا کرتی ہے، امید ہے کہ اوپر والے اس ثالثی تعلق کو حاصل کر لیں گے اور اچھا منافع فراہم کریں گے۔
شاید کسی حکمت عملی کو گہرائی سے سمجھنے کا بہترین طریقہ اس پر عمل درآمد کرنا ہے۔ مندرجہ ذیل حصے میں مکمل Python کوڈ (سنگل فائل) کی تفصیل دی گئی ہے جو اس اوسط کو تبدیل کرنے کی حکمت عملی کو نافذ کرنے کے لیے استعمال کیا جاتا ہے۔ میں نے آپ کو بہتر طور پر سمجھنے میں مدد کے لیے تفصیلی کوڈ تبصرے شامل کیے ہیں۔
ازگر کا نفاذ
تمام Python/pandas ٹیوٹوریلز کی طرح، آپ کا Python ماحول ترتیب دیا جانا چاہیے جیسا کہ اس ٹیوٹوریل میں بیان کیا گیا ہے۔ سیٹ اپ مکمل ہونے کے بعد، پہلا کام ضروری Python لائبریریوں کو درآمد کرنا ہے۔ یہ matplotlib اور pandas استعمال کرنے کے لیے ضروری ہے۔
لائبریری کے مخصوص ورژن جو میں استعمال کر رہا ہوں وہ درج ذیل ہیں:
Python - 2.7.3 NumPy - 1.8.0 pandas - 0.12.0 matplotlib - 1.1.0
آئیے آگے بڑھیں اور ان لائبریریوں کو درآمد کریں:
# mr_spy_iwm.py
import matplotlib.pyplot as plt
import numpy as np
import os, os.path
import pandas as pd
مندرجہ ذیل فنکشن create_pairs_dataframe دو CSV فائلوں کو درآمد کرتا ہے جس میں دو علامتوں کی انٹرا ڈے کینڈلسٹک ہوتی ہیں۔ ہمارے معاملے میں، یہ SPY اور IWM ہوگا۔ اس کے بعد یہ ایک علیحدہ “ڈیٹا فریموں کا جوڑا” بناتا ہے جو دونوں اصل فائلوں کے اشاریہ جات کا استعمال کرتا ہے۔ ان کے ٹائم اسٹیمپ چھوٹ گئے لین دین اور غلطیوں کی وجہ سے مختلف ہو سکتے ہیں۔ یہ پانڈا کی طرح ڈیٹا تجزیہ لائبریری کے استعمال کے اہم فوائد میں سے ایک ہے۔ ہم “بوائلر پلیٹ” کوڈ کو بہت موثر طریقے سے ہینڈل کرتے ہیں۔
# mr_spy_iwm.py
def create_pairs_dataframe(datadir, symbols):
"""Creates a pandas DataFrame containing the closing price
of a pair of symbols based on CSV files containing a datetime
stamp and OHLCV data."""
# Open the individual CSV files and read into pandas DataFrames
print "Importing CSV data..."
sym1 = pd.io.parsers.read_csv(os.path.join(datadir, '%s.csv' % symbols[0]),
header=0, index_col=0,
names=['datetime','open','high','low','close','volume','na'])
sym2 = pd.io.parsers.read_csv(os.path.join(datadir, '%s.csv' % symbols[1]),
header=0, index_col=0,
names=['datetime','open','high','low','close','volume','na'])
# Create a pandas DataFrame with the close prices of each symbol
# correctly aligned and dropping missing entries
print "Constructing dual matrix for %s and %s..." % symbols
pairs = pd.DataFrame(index=sym1.index)
pairs['%s_close' % symbols[0].lower()] = sym1['close']
pairs['%s_close' % symbols[1].lower()] = sym2['close']
pairs = pairs.dropna()
return pairs
اگلا مرحلہ SPY اور IWM کے درمیان رولنگ لکیری ریگریشن کرنا ہے۔ اس منظر نامے میں، IWM پیشین گوئی کرنے والا ہے (‘x’) اور SPY ردعمل (‘y’) ہے۔ میں نے 100 کینڈل اسٹکس کی ڈیفالٹ لک بیک ونڈو سیٹ کی ہے۔ جیسا کہ اوپر ذکر کیا گیا ہے، یہ حکمت عملی کے پیرامیٹرز ہیں۔ حکمت عملی کو مضبوط تصور کرنے کے لیے، ہم مثالی طور پر واپسی کی رپورٹ دیکھنا چاہیں گے جو کہ نظر آنے والی مدت (یا کارکردگی کی کوئی دوسری پیمائش) پر محدب ہو۔ اس لیے، کوڈ کے بعد کے مرحلے پر، ہم دائرہ کار کے اندر نظر آنے کی مدت کو مختلف کرکے حساسیت کا تجزیہ کریں گے۔
SPY-IWM کے لیے لکیری ریگریشن ماڈل میں رولنگ بیٹا کوفیشینٹس کا حساب لگانے کے بعد، اسے DataFrame جوڑے میں شامل کریں اور خالی قطاروں کو ہٹا دیں۔ یہ موم بتیوں کا پہلا سیٹ بناتا ہے، جو لک بیک کی لمبائی کے تراشے ہوئے پیمانہ کے برابر ہے۔ اس کے بعد ہم نے دو ETFs، SPY کی ایک اکائی اور IWM کی -βi کی ایک اکائی کے درمیان ایک اسپریڈ بنایا۔ ظاہر ہے، یہ کوئی حقیقت پسندانہ منظر نامہ نہیں ہے، کیونکہ ہم IWM کی تھوڑی سی مقدار میں کام کر رہے ہیں، جس کا عملی نفاذ ممکن نہیں ہے۔
آخر میں، ہم اسپریڈ کا زیڈ اسکور بناتے ہیں، جس کا حساب اسپریڈ کے وسط کو گھٹا کر اور اسپریڈ کے معیاری انحراف سے نارملائز کیا جاتا ہے۔ یہ نوٹ کرنا ضروری ہے کہ یہاں کام پر ایک باریک “مستقبل کا تعصب” ہے۔ میں نے اسے کوڈ میں جان بوجھ کر چھوڑ دیا کیونکہ میں اس بات کو اجاگر کرنا چاہتا تھا کہ تحقیق میں اس طرح کی غلطیاں کرنا کتنا آسان ہے۔ پوری اسپریڈ ٹائم سیریز کے اوسط اور معیاری انحراف کا حساب لگائیں۔ اگر اس کا مقصد حقیقی تاریخی درستگی کی عکاسی کرنا ہے، تو یہ معلومات حاصل نہیں کی جا سکتیں کیونکہ یہ مستقبل کی معلومات کو واضح طور پر استعمال کرتی ہے۔ لہذا، ہمیں زیڈ سکور کا حساب لگانے کے لیے رولنگ میڈین اور stdev کا استعمال کرنا چاہیے۔
# mr_spy_iwm.py
def calculate_spread_zscore(pairs, symbols, lookback=100):
"""Creates a hedge ratio between the two symbols by calculating
a rolling linear regression with a defined lookback period. This
is then used to create a z-score of the 'spread' between the two
symbols based on a linear combination of the two."""
# Use the pandas Ordinary Least Squares method to fit a rolling
# linear regression between the two closing price time series
print "Fitting the rolling Linear Regression..."
model = pd.ols(y=pairs['%s_close' % symbols[0].lower()],
x=pairs['%s_close' % symbols[1].lower()],
window=lookback)
# Construct the hedge ratio and eliminate the first
# lookback-length empty/NaN period
pairs['hedge_ratio'] = model.beta['x']
pairs = pairs.dropna()
# Create the spread and then a z-score of the spread
print "Creating the spread/zscore columns..."
pairs['spread'] = pairs['spy_close'] - pairs['hedge_ratio']*pairs['iwm_close']
pairs['zscore'] = (pairs['spread'] - np.mean(pairs['spread']))/np.std(pairs['spread'])
return pairs
Create_long_short_market_signals میں، تجارتی سگنل بنائیں۔ یہ ایک حد سے زیادہ زیڈ سکور کی قدر کی پیمائش کر کے شمار کیے جاتے ہیں۔ جب زیڈ سکور کی مطلق قدر کسی اور (چھوٹی) حد سے کم یا اس کے برابر ہوتی ہے، تو پوزیشن کو بند کرنے کا اشارہ دیا جاتا ہے۔
اس کو حاصل کرنے کے لیے، یہ طے کرنا ضروری ہے کہ آیا تجارتی حکمت عملی ہر K-لائن کے لیے “کھولنا” ہے یا “بند” ہے۔ لانگ_مارکیٹ اور شارٹ_مارکیٹ دو متغیر ہیں جو طویل اور مختصر پوزیشنوں کو ٹریک کرنے کے لیے بیان کیے گئے ہیں۔ بدقسمتی سے، یہ کمپیوٹیشنل طور پر سست ہے کیونکہ ویکٹرائزڈ اپروچ کے مقابلے میں تکراری انداز میں پروگرام کرنا بہت آسان ہے۔ اگرچہ 1 منٹ کے کینڈل سٹک چارٹ کے لیے فی CSV فائل ~700,000 ڈیٹا پوائنٹس کی ضرورت ہوتی ہے، لیکن میرے پرانے ڈیسک ٹاپ پر حساب لگانا اب بھی نسبتاً تیز ہے!
پانڈا ڈیٹا فریم (ایک غیر معمولی آپریشن) پر اعادہ کرنے کے لیے، یہ ضروری ہے کہ آئیٹرو طریقہ استعمال کیا جائے، جو ایک قابل تکرار جنریٹر فراہم کرتا ہے:
# mr_spy_iwm.py
def create_long_short_market_signals(pairs, symbols,
z_entry_threshold=2.0,
z_exit_threshold=1.0):
"""Create the entry/exit signals based on the exceeding of
z_enter_threshold for entering a position and falling below
z_exit_threshold for exiting a position."""
# Calculate when to be long, short and when to exit
pairs['longs'] = (pairs['zscore'] <= -z_entry_threshold)*1.0
pairs['shorts'] = (pairs['zscore'] >= z_entry_threshold)*1.0
pairs['exits'] = (np.abs(pairs['zscore']) <= z_exit_threshold)*1.0
# These signals are needed because we need to propagate a
# position forward, i.e. we need to stay long if the zscore
# threshold is less than z_entry_threshold by still greater
# than z_exit_threshold, and vice versa for shorts.
pairs['long_market'] = 0.0
pairs['short_market'] = 0.0
# These variables track whether to be long or short while
# iterating through the bars
long_market = 0
short_market = 0
# Calculates when to actually be "in" the market, i.e. to have a
# long or short position, as well as when not to be.
# Since this is using iterrows to loop over a dataframe, it will
# be significantly less efficient than a vectorised operation,
# i.e. slow!
print "Calculating when to be in the market (long and short)..."
for i, b in enumerate(pairs.iterrows()):
# Calculate longs
if b[1]['longs'] == 1.0:
long_market = 1
# Calculate shorts
if b[1]['shorts'] == 1.0:
short_market = 1
# Calculate exists
if b[1]['exits'] == 1.0:
long_market = 0
short_market = 0
# This directly assigns a 1 or 0 to the long_market/short_market
# columns, such that the strategy knows when to actually stay in!
pairs.ix[i]['long_market'] = long_market
pairs.ix[i]['short_market'] = short_market
return pairs
اس مرحلے پر، ہم اصل لمبے اور مختصر سگنلز پر مشتمل جوڑوں کو اپ ڈیٹ کرتے ہیں، جو ہمیں یہ تعین کرنے کی اجازت دیتا ہے کہ آیا ہمیں پوزیشن کھولنے کی ضرورت ہے۔ اب ہمیں پوزیشنوں کی مارکیٹ ویلیو کو ٹریک کرنے کے لیے ایک پورٹ فولیو بنانے کی ضرورت ہے۔ پہلا کام ایک پوزیشن کالم بنانا ہے جو طویل اور مختصر سگنل کو یکجا کرتا ہے۔ اس میں (1,0,-1) کے عناصر کی ایک فہرست ہوگی جہاں 1 لمبی پوزیشن کی نمائندگی کرتا ہے، 0 کسی پوزیشن کی نمائندگی نہیں کرتا ہے (جسے بند ہونا چاہیے)، اور -1 ایک مختصر پوزیشن کی نمائندگی کرتا ہے۔ sym1 اور sym2 کالم ہر کینڈل اسٹک کے آخر میں SPY اور IWM پوزیشنوں کی مارکیٹ ویلیو کی نمائندگی کرتے ہیں۔
ایک بار جب ETF کی مارکیٹ ویلیو بن جاتی ہے، تو ہم ان کو ہر ایک کینڈل سٹک کے آخر میں کل مارکیٹ ویلیو بنانے کے لیے جمع کرتے ہیں۔ اس کے بعد اسے اس آبجیکٹ کے pct_change طریقہ کے ذریعے واپسی کی قدر میں تبدیل کیا جاتا ہے۔ کوڈ کی بعد کی لائنیں غلط اندراجات (NaN اور inf عناصر) کو صاف کرتی ہیں اور آخر میں مکمل ایکویٹی وکر کا حساب لگاتی ہیں۔
# mr_spy_iwm.py
def create_portfolio_returns(pairs, symbols):
"""Creates a portfolio pandas DataFrame which keeps track of
the account equity and ultimately generates an equity curve.
This can be used to generate drawdown and risk/reward ratios."""
# Convenience variables for symbols
sym1 = symbols[0].lower()
sym2 = symbols[1].lower()
# Construct the portfolio object with positions information
# Note that minuses to keep track of shorts!
print "Constructing a portfolio..."
portfolio = pd.DataFrame(index=pairs.index)
portfolio['positions'] = pairs['long_market'] - pairs['short_market']
portfolio[sym1] = -1.0 * pairs['%s_close' % sym1] * portfolio['positions']
portfolio[sym2] = pairs['%s_close' % sym2] * portfolio['positions']
portfolio['total'] = portfolio[sym1] + portfolio[sym2]
# Construct a percentage returns stream and eliminate all
# of the NaN and -inf/+inf cells
print "Constructing the equity curve..."
portfolio['returns'] = portfolio['total'].pct_change()
portfolio['returns'].fillna(0.0, inplace=True)
portfolio['returns'].replace([np.inf, -np.inf], 0.0, inplace=True)
portfolio['returns'].replace(-1.0, 0.0, inplace=True)
# Calculate the full equity curve
portfolio['returns'] = (portfolio['returns'] + 1.0).cumprod()
return portfolio
مرکزی فنکشن اس سب کو ایک ساتھ جوڑتا ہے۔ انٹرا ڈے CSV فائلیں ڈیٹاڈیر پاتھ میں واقع ہیں۔ اپنی مخصوص ڈائریکٹری کی طرف اشارہ کرنے کے لیے درج ذیل کوڈ میں ترمیم کرنا یقینی بنائیں۔
اس بات کا تعین کرنے کے لیے کہ لائک بیک مدت کے لیے حکمت عملی کتنی حساس ہے، یہ ضروری ہے کہ لُک بیک پرفارمنس میٹرکس کی ایک رینج کا حساب لگایا جائے۔ میں نے پرفارمنس میٹرک اور لک بیک رینج کے طور پر پورٹ فولیو کے حتمی کل واپسی کا فیصد منتخب کیا۔[50,200] 10 کے انکریمنٹ کے ساتھ۔ آپ نیچے کوڈ میں دیکھ سکتے ہیں کہ پچھلا فنکشن اس رینج پر ایک فار لوپ میں لپٹا ہوا ہے اور دیگر حدیں وہی رہیں گی۔ حتمی کام یہ ہے کہ میٹپلوٹلیب کا استعمال کرتے ہوئے لُک بیکس بمقابلہ واپسی کا ایک لائن چارٹ بنائیں:
# mr_spy_iwm.py
if __name__ == "__main__":
datadir = '/your/path/to/data/' # Change this to reflect your data path!
symbols = ('SPY', 'IWM')
lookbacks = range(50, 210, 10)
returns = []
# Adjust lookback period from 50 to 200 in increments
# of 10 in order to produce sensitivities
for lb in lookbacks:
print "Calculating lookback=%s..." % lb
pairs = create_pairs_dataframe(datadir, symbols)
pairs = calculate_spread_zscore(pairs, symbols, lookback=lb)
pairs = create_long_short_market_signals(pairs, symbols,
z_entry_threshold=2.0,
z_exit_threshold=1.0)
portfolio = create_portfolio_returns(pairs, symbols)
returns.append(portfolio.ix[-1]['returns'])
print "Plot the lookback-performance scatterchart..."
plt.plot(lookbacks, returns, '-o')
plt.show()

اب آپ لک بیکس اور ریٹرن کا گراف دیکھ سکتے ہیں۔ نوٹ کریں کہ لک بیکس کے لیے زیادہ سے زیادہ “عالمی” ہے، جو 110 بارز کے برابر ہے۔ اگر ہم ایسی صورت حال دیکھتے ہیں جہاں لوٹنے کا واپسی سے کوئی تعلق نہیں ہے، تو اس کی وجہ یہ ہے:
SPY-IWM لکیری ریگریشن ہیج ریشو لک بیک پیریڈ حساسیت کا تجزیہ
کوئی بیک ٹیسٹنگ مضمون اوپر کی طرف ڈھلوان منافع کے وکر کے بغیر مکمل نہیں ہوگا! لہذا اگر آپ وقت کے مقابلے میں مجموعی منافع کی واپسی کی منصوبہ بندی کرنا چاہتے ہیں، تو آپ درج ذیل کوڈ استعمال کر سکتے ہیں۔ یہ لک بیک پیرامیٹر اسٹڈی سے تیار کردہ حتمی پورٹ فولیو کی منصوبہ بندی کرے گا۔ لہٰذا، آپ جس چارٹ کو دیکھنا چاہتے ہیں اس کے مطابق لُک بیک کا انتخاب کرنا ضروری ہے۔ یہ چارٹ موازنہ میں مدد کے لیے اسی مدت میں SPY کی واپسی کو بھی پیش کرتا ہے:
# mr_spy_iwm.py
# This is still within the main function
print "Plotting the performance charts..."
fig = plt.figure()
fig.patch.set_facecolor('white')
ax1 = fig.add_subplot(211, ylabel='%s growth (%%)' % symbols[0])
(pairs['%s_close' % symbols[0].lower()].pct_change()+1.0).cumprod().plot(ax=ax1, color='r', lw=2.)
ax2 = fig.add_subplot(212, ylabel='Portfolio value growth (%%)')
portfolio['returns'].plot(ax=ax2, lw=2.)
fig.show()
نیچے دیے گئے ایکویٹی وکر چارٹ میں 100 دن کی تلاش کی مدت ہے:

SPY-IWM لکیری ریگریشن ہیج ریشو لک بیک پیریڈ حساسیت کا تجزیہ
نوٹ کریں کہ مالیاتی بحران کے دوران 2009 میں SPY ڈرا ڈاؤن کافی بڑا تھا۔ اس مرحلے کے دوران حکمت عملی بھی ہنگامہ خیز دور میں ہے۔ یہ بھی نوٹ کریں کہ S&P 500 کی عکاسی کرنے والے اس عرصے کے دوران SPY کی مضبوط رجحان سازی کی وجہ سے کارکردگی پچھلے سال کے دوران خراب ہوئی ہے۔
نوٹ کریں کہ زیڈ سکور کے پھیلاؤ کا حساب لگاتے وقت ہمیں اب بھی “لُک ہیڈ تعصب” کا حساب دینا ہوگا۔ مزید برآں، یہ تمام حسابات لین دین کے اخراجات کے بغیر کئے جاتے ہیں۔ ایک بار جب ان عوامل کو مدنظر رکھا جائے تو یہ حکمت عملی ناقص کارکردگی کا پابند ہے۔ فیس اور سلپیج دونوں فی الحال غیر متعین ہیں۔ مزید برآں، حکمت عملی ETF کی جزوی اکائیوں میں تجارت کرتی ہے، جو کہ انتہائی غیر حقیقی بھی ہے۔
مستقبل کے مضمون میں، ہم ایک زیادہ پیچیدہ ایونٹ پر مبنی بیکٹیسٹر بنائیں گے جو اوپر کی تمام چیزوں کو مدنظر رکھے گا، جس سے ہمیں اپنے ایکویٹی کریو اور کارکردگی کے اشاریوں میں مزید اعتماد ملے گا۔