
اس حکمت عملی میں تاریخی اتار چڑھاؤ پر مبنی فلٹر شامل کرکے ایک بہتر ورژن کی خرید و فروخت کی حکمت عملی کو نافذ کیا گیا ہے۔ فلٹر کا کام مارکیٹ میں زیادہ اتار چڑھاؤ کے دوران خرید و فروخت کی پوزیشنوں کو بند کرنا ہے ، اور کم اتار چڑھاؤ کے دوران خرید و فروخت کی پوزیشنوں کو دوبارہ قائم کرنا ہے ، جس سے حکمت عملی کی زیادہ سے زیادہ واپسی کو کم کیا جاسکتا ہے۔
بغیر فلٹر کے سادہ خرید و رکھنے کی حکمت عملی کے مقابلے میں ، اس حکمت عملی میں 28 سال کی جانچ پڑتال کی مدت کے دوران سالانہ منافع میں کچھ اضافہ ہوا ہے (7.95٪ بمقابلہ 9.92٪) ، جبکہ زیادہ سے زیادہ واپسی میں نمایاں کمی واقع ہوئی ہے (50.79٪ بمقابلہ 31.57٪) ۔ اس سے یہ ظاہر ہوتا ہے کہ مارکیٹ میں اتار چڑھاؤ کے فلٹر کو شامل کرنے سے حکمت عملی کی منافع میں کچھ حد تک اضافہ ہوسکتا ہے اور خطرہ کم ہوسکتا ہے۔
اس حکمت عملی کا بنیادی خطرہ اتار چڑھاؤ کی شرح کا حساب لگانے کے طریقہ کار اور فلٹر پیرامیٹرز کی ترتیب کی درستگی پر ہے۔ اگر اتار چڑھاؤ کی شرح کا حساب لگانا غلط ہے تو ، فلٹر ناکام ہوجائے گا۔ اگر فلٹر پیرامیٹرز کی ترتیب بہت قدامت پسند یا بہت سخت ہے تو ، حکمت عملی کی آمدنی پر منفی اثر پڑے گا۔ اس کے علاوہ ، ماضی کی کارکردگی مستقبل کے نتائج کی نشاندہی نہیں کرتی ہے۔
دوسرے فلٹرنگ اشارے کو تصدیق کے اشارے کے طور پر شامل کرنے پر غور کیا جاسکتا ہے ، جیسے کہ طویل مدتی منتقل اوسط ، بڑی ڈسک انڈیکس ADX اشارے وغیرہ۔ اس کے علاوہ ، پیرامیٹرز کو ایڈجسٹ کرنے کی اصلاح بھی ضروری ہے ، جیسے کہ مختلف لوک بیک پیریڈ ، فلٹرنگ دہلیز وغیرہ کی جانچ کرنا۔ مشین لرننگ اور ٹائم سیریز تجزیہ تکنیک کو اتار چڑھاؤ کی پیش گوئی کے ماڈل بنانے اور ان کو بہتر بنانے کے لئے بھی استعمال کیا جاسکتا ہے۔
اس حکمت عملی نے ایک سادہ ، تاریخی اتار چڑھاؤ پر مبنی فلٹر کے ذریعہ ، ایس پی وائی خرید و فروخت کی حکمت عملی کی واپسی میں نمایاں اضافہ کیا ہے ، جبکہ اس نے زیادہ سے زیادہ واپسی کو بھی نمایاں طور پر کم کیا ہے۔ اس سے مارکیٹ کی حالت کی شناخت اور اثاثوں کی تعیناتی کی اہمیت کا ثبوت ملتا ہے۔ ہم اتار چڑھاؤ کے ماڈل کو بہتر بنانے اور تصدیق کے اشارے شامل کرکے اس حکمت عملی کو مزید بہتر بنا سکتے ہیں۔
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
// @author Sunil Halai
//
// This script has been created to demonstrate the effectiveness of using market regime filters in your trading strategy, and how they can improve your returns and lower your drawdowns
//
// This strategy adds a simple filter (The historical volatility filter, which can be found on my trading profile) to a traditional buy and hold strategy of the index SPY. There are other filters
// that could also be added included a long term moving average / percentile rank filter / ADX filter etc, to improve the returns further.
//
// The filter added closes our long position during periods of volatility that exceed the 95th percentile (or in the top 5% of volatile days)
//
// Have included the back test results since 1993 which is 28 years of data at the time of writing, Comparing buy and hold of the SPY (S&P 500), to improved by and hold offered here.
//
// Traditional buy and hold:
//
// Return per year: 7.95 % (ex Dividends)
// Total return : 851.1 %
// Max drawdown: 50.79 %
//
// 'Modified' buy and hold (this script):
//
// Return per year: 9.92 % (ex Dividends)
// Total return: 1412.16 %
// Max drawdown: 31.57 %
//
// Feel free to use some of the market filters in my trading profile to improve and refine your strategies further, or make a copy and play around with the code yourself. This is just
// a simple example for demo purposes.
//
//@version=4
strategy(title = "Simple way to beat the market [STRATEGY]", shorttitle = "Beat The Market [STRATEGY]", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100)
upperExtreme = input(title = "Upper percentile filter (Do not trade above this number)", type = input.integer, defval = 95)
lookbackPeriod = input(title = "Lookback period", type = input.integer, defval = 100)
annual = 365
per = timeframe.isintraday or timeframe.isdaily and timeframe.multiplier == 1 ? 1 : 7
hv = lookbackPeriod * stdev(log(close / close[1]), 10) * sqrt(annual / per)
filtered = hv >= percentile_nearest_rank(hv, 100, upperExtreme)
if(not(filtered))
strategy.entry("LONG", strategy.long)
else
strategy.close("LONG")