
اس حکمت عملی کا بنیادی خیال یہ ہے کہ ایک رجحان کی پیروی کی حکمت عملی کو ممکن حد تک درست بنایا جائے۔ اس نے ماضی میں بند ہونے والی قیمتوں کی ایک خاص تعداد کی گنتی کے ذریعہ اعتماد کی ایک حد کو طے کیا ہے تاکہ موجودہ لکیری رجحان کے برقرار رہنے کی امکان کا اندازہ لگایا جاسکے۔ اس حکمت عملی کا فرض ہے کہ ایک بار جب اعتماد کی ایک خاص سطح سے زیادہ ہوجائے تو ، موجودہ لکیری رجحان کے برقرار رہنے کا امکان زیادہ ہے۔
اس حکمت عملی نے پچھلے N اختتامی قیمتوں کے لئے لکیری فٹنس کا حساب لگانے کے لئے عام لکیری رجعت کا استعمال کیا ، لکیری فٹنس کے لئے اسکیلپنگ k اور اختتامی قیمتوں کے ساتھ انحراف معیاری فرق σ ∈ اور پھر رجحان کی عدم اعتماد کی تعریف k / σ ∈ کے طور پر کی ہے۔
جب رجحان کا اعتماد زیادہ ہوتا ہے تو ، زیادہ سے زیادہ انٹری کی قیمت میں کمی ہوتی ہے۔ جب یہ کم ہوتا ہے تو ، اس کی قیمت میں کمی ہوتی ہے۔ اسی طرح ، جب رجحان کا اعتماد کم ہوتا ہے تو ، اس کی قیمت میں کمی ہوتی ہے۔ جب اس سے زیادہ ہوتا ہے تو ، اس کی قیمت میں کمی ہوتی ہے۔
اس طرح ، یہ قیمتوں میں تبدیلیوں سے پیدا ہونے والے سگنل کو فلٹر کرسکتا ہے جو واضح طور پر لکیری رجحانات پر عمل نہیں کرتے ہیں۔
اس حکمت عملی میں رجحانات کی پیروی اور اعداد و شمار میں لکیری رجعت کا طریقہ شامل کیا گیا ہے۔ اس سے قلیل مدتی قیمتوں کے اتار چڑھاؤ کی پیروی کرنے سے گریز کیا جاسکتا ہے ، اور صرف طویل مدتی رجحانات کی پیروی کی جاسکتی ہے ، جس سے کم تجارتی تعدد اور زیادہ جیت کی شرح حاصل ہوتی ہے۔
اس حکمت عملی کے پیرامیٹرز کو ایڈجسٹ کرنے کے لئے کافی جگہ ہے ، جس میں مختلف نسلوں اور وقت کے دورانیوں کے لئے پیرامیٹرز کو ایڈجسٹ کرکے اچھی عمومیتا حاصل کی جاسکتی ہے۔
اس حکمت عملی میں بیعانہ لینے کا خطرہ ہے۔ جب قیمت میں واضح رجحان الٹ جاتا ہے تو اس حکمت عملی سے زیادہ نقصان ہوتا ہے۔ اس کے علاوہ ، پیرامیٹرز کی غلط ترتیب بھی زیادہ تجارت یا اچھے تجارتی مواقع سے محروم ہوسکتی ہے۔
نقصان کے خطرے کو کنٹرول کرنے کے لئے اسٹاپ نقصان کا تعین کیا جاسکتا ہے۔ اس کے ساتھ ہی ، پیرامیٹرز کے انتخاب کا محتاط اندازہ لگانا ضروری ہے ، تاکہ ضرورت سے زیادہ اصلاح سے بچا جاسکے۔
اس حکمت عملی کو مزید بہتر بنایا جاسکتا ہے:
منافع کو لاک کرنے اور خطرے کو کنٹرول کرنے کے لئے اسٹاپ نقصان اور اسٹاپ لاجسٹکس شامل کریں
پیرامیٹرز کو متحرک طور پر ایڈجسٹ کرنے کے لئے ماڈیول کو بہتر بنانے کے لئے پیرامیٹرز شامل کریں
ٹرینڈ ریورس پوائنٹس کا اندازہ لگانے کے لئے مشین لرننگ ماڈل شامل کریں ، حکمت عملی کی کامیابی کو مزید بہتر بنائیں
مختلف اقسام اور وقت کے ساتھ مطابقت کو آزمانے اور عام کرنے کی صلاحیت کو بڑھانے کے لئے
یہ حکمت عملی مجموعی طور پر ایک طویل مدتی رجحان پر مبنی ، خطرے کو کنٹرول کرنے کی ایک مقداری حکمت عملی ہے۔ یہ رجحان سے باخبر رہنے اور لکیری رجعت کے طریقوں کو جوڑتا ہے ، جو شور سے متعلق تجارتی سگنل کو فلٹر کرسکتا ہے۔ پیرامیٹرز کو ایڈجسٹ کرنے کے ذریعہ ، یہ مختلف اقسام اور ادوار کے لئے اچھی طرح سے موزوں ہے ، اور یہ ایک موثر حکمت عملی ہے جس میں تحقیق اور بہتری کے قابل ہے۔
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 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/
// © carefulCamel61097
// ################################################################################################
// "This is a trend following strategy that performed very well on the past 5 years"
// "Intended to be used on BTC-USDT, 4hr timeframe"
// "A factor 2 Leverage can be added by changing Order Size to 200% of equity"
// "Higher leverage is not recommended due to big drawdowns"
// "Also seems to work on 1D timeframe, although ideal parameters may be different"
// "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different"
// ################################################################################################
//@version=5
strategy("Trend Following based on Trend Confidence", overlay=false )
// Inputs
source = input(close)
since = input(timestamp('2000-01-01'), title='Start trading interval')
till = input(timestamp('2030-01-01'), title='End trading interval')
length = input(30, title='Length')
longs_on = input.bool(true, title='Longs')
shorts_on = input.bool(true, title='Shorts')
// Parameters for best performance 2018 - 2022
// long_entry = input.float(0.26, step=0.01, title='Long entry threshold')
// long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
// short_entry = input.float(-0.24, step=0.01, title='Short entry threshold')
// short_exit = input.float(-0.04, step=0.01, title='Short exit threshold')
long_entry = input.float(0.25, step=0.01, title='Long entry threshold')
long_exit = input.float(-0.10, step=0.01, title='Long exit threshold')
short_entry = input.float(-0.25, step=0.01, title='Short entry threshold')
short_exit = input.float(-0.05, step=0.01, title='Short exit threshold')
stop_loss = input.float(10, step=1, title='Stop loss (percentage)') / 100
// Trend Confidence
linreg = ta.linreg(source, length, 0)
linreg_p = ta.linreg(source, length, 0+1)
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = math.sqrt(deviationSum/(length))
slope_perc = slope / source[0]
deviation_perc = deviation / source[0]
trend_confidence = slope_perc / deviation_perc
// Strategy
in_interval = true
sl_long = strategy.position_avg_price * (1 - stop_loss)
sl_short = strategy.position_avg_price * (1 + stop_loss)
if in_interval and longs_on and ta.crossover(trend_confidence, long_entry)
strategy.entry("TC Long Entry", strategy.long)
strategy.exit("TC Long Exit", stop=sl_long)
if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit)
strategy.close("TC Long Entry")
if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry)
strategy.entry("TC Short Entry", strategy.short)
strategy.exit("TC Short Exit", stop=sl_short)
if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit)
strategy.close("TC Short Entry")
// Plots
plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255))
plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1)
plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1)
plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1)
plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)