ডায়নামিক ATR স্টপ লস সেন্টারলাইন কৌশল


সৃষ্টির তারিখ: 2023-10-16 16:20:06 অবশেষে সংশোধন করুন: 2023-10-16 16:20:06
অনুলিপি: 0 ক্লিকের সংখ্যা: 716
1
ফোকাস
1617
অনুসারী

ডায়নামিক ATR স্টপ লস সেন্টারলাইন কৌশল

ওভারভিউ

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

কৌশল নীতি

এই কৌশলটি 25 এর দৈর্ঘ্য ব্যবহার করে, 5 এর সমান্তরালের লিনিয়ার রিগ্রেশনটি কেন্দ্রীয় লাইন xLG. গণনা করে। তারপর কেন্দ্রীয় লাইনের নীচে 6% মূল্য গ্রহণ করে, যা একটি চ্যানেলের পরিসীমা হিসাবে কাজ করে, চ্যানেলের উপরের লাইনটি xLG1r এবং চ্যানেলের নীচের লাইনটি xLG1s।

যখন দাম xLG1r এর চেয়ে বেশি হয়, তখন বেশি করুন; যখন দাম xLG1s এর চেয়ে কম হয়, তখন খালি করুন। এবং শেষ বারের বেশি এবং খালি সময় রেকর্ড করুন। যখন শেষ বারের বেশি সময় শেষ বারের চেয়ে বেশি সময় থাকে তখন বেশি সংকেত উত্পন্ন হয়; যখন শেষ বারের বেশি সময় শেষ বারের চেয়ে বেশি সময় থাকে তখন খালি সংকেত উত্পন্ন হয়।

ডায়নামিক এটিআর স্টপটি এটিআর চক্র 1, গুণ 2 ব্যবহার করে গণনা করা হয়। অতিরিক্ত করার সময়, স্টপ লাইনটি ক্লোজিং মূল্যের জন্য এটিআর মান এবং গুণিতের গুণিতককে হ্রাস করে; খালি করার সময়, স্টপ লাইনটি ক্লোজিং মূল্যের জন্য এটিআর মান এবং গুণিতকের গুণিতক যোগ করে।

সামর্থ্য বিশ্লেষণ

  • লিনিয়ার রিগ্রেশন চ্যানেল ব্যবহার করে, দীর্ঘমেয়াদী প্রবণতা অনুসরণ করা যায়
  • এটিআর-ভিত্তিক স্টপ লস, যা গতিশীলভাবে সামঞ্জস্য করা যায় যাতে স্টপ লস খুব বড় বা খুব ছোট না হয়
  • মূল্য বিপর্যয়ের সংকেত ব্যবহার করে ভুয়া সংকেত কমানো যায়

ঝুঁকি ও উন্নতি

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

অনুকূলিতকরণ

  • বিভিন্ন রিটার্ন দৈর্ঘ্যের চক্র পরীক্ষা করে সর্বোত্তম প্যারামিটার খুঁজুন
  • বিভিন্ন ATR চক্র এবং ATR স্টপ লস গুণক চেষ্টা করুন
  • ব্রেকিং সিগন্যালের সময়, অতিরিক্ত নিশ্চিতকরণ শর্ত যুক্ত করুন, যেমন ট্রেডিং ভলিউম ব্রেকিং

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-01-01 00:00:00
end: 2023-06-24 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Thanks to HPotter for the original code for Center of Gravity Backtest
strategy("Center of Gravity BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.15)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Center of Gravity /////////////
Length = input(25, minval=1)
m = input(5, minval=0)
Percent = input(6, minval=0, title="COG %")

xLG = linreg(close, Length, m)
xLG1r = xLG + ((close * Percent) / 100)
xLG1s = xLG - ((close * Percent) / 100)

pos = 0.0
pos := iff(close > xLG1r, 1, iff(close < xLG1s, -1, nz(pos[1], 0))) 
possig = iff(pos == 1, 1, iff(pos == -1, -1, pos))

/////////////// Srategy ///////////////
long = possig == 1 
short = possig == -1 

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
atrLkb = input(1, minval=1, title='ATR Stop Period')
atrMult = input(2, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop = 0.0
longStop :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop[1]
shortStop = 0.0
shortStop := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop[1]

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("Long",  strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)
    strategy.exit("Long SL", "Long", stop=longStop, when=since_longEntry > 0)
    strategy.exit("Short SL", "Short", stop=shortStop, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
plot(xLG1r, color=color.lime, title="LG1r")
plot(xLG1s, color=color.red, title="LG1s")
plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=1)
plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)