এই কৌশলটি কেন্দ্রীয় মাধ্যাকর্ষণ সূচক এবং এসএসএল চ্যানেল সূচককে একত্রিত করে, মূল্যের প্রবণতার বিচার এবং বিরতি ট্র্যাকিংয়ের জন্য, এটি প্রবণতা ট্র্যাকিংয়ের শ্রেণীর কৌশল।
কম্পিউটিং সেন্টার গ্র্যাভিটি ইন্ডিকেটর, যেখানে আপ-ট্র্যাক এবং ডাউন-ট্র্যাক হল দামের উত্থান এবং পতনের প্রবণতা সীমানা।
এসএসএল চ্যানেলের সূচক গণনা করুন, চ্যানেলের অভ্যন্তরটি সমন্বয় অঞ্চল, চ্যানেলের বাইরের দিকটি প্রবণতা দিক।
যখন দাম একটি ট্র্যাক বা চ্যানেল অতিক্রম করে তখন এটি একটি উচ্চতর প্রবণতা হিসাবে বিচার করা হয় এবং আরও বেশি করা হয়; যখন দাম একটি ট্র্যাক বা চ্যানেল অতিক্রম করে তখন এটি একটি নিম্ন প্রবণতা হিসাবে বিচার করা হয় এবং খালি করা হয়।
পজিশন ধরে রাখার সময় স্টপ লস ট্র্যাক করার জন্য ডায়নামিক এটিআর স্টপ ব্যবহার করুন।
রিটার্নিং সময়সীমার সাথে মিলিত করে প্রকৃত ট্রেডিং সিগন্যাল তৈরি করা হয়।
এই কৌশলটি একই সাথে দুটি সূচক ব্যবহার করে ট্রেন্ডের দিকনির্দেশের জন্য, একটি ব্রেকডাউন নির্ধারণের জন্য এবং অন্যটি ট্রেন্ড নিশ্চিত করার জন্য, এই দুটি সংমিশ্রণটি বিচার সঠিকতা বাড়িয়ে তুলতে পারে। গতিশীল স্টপ মার্কেটটি বাজারের ওঠানামা অনুসারে স্টপ পয়েন্টগুলিকে সামঞ্জস্য করতে পারে, এটি একটি খুব কার্যকর ঝুঁকি নিয়ন্ত্রণের উপায়।
একই সময়ে, এই দুটি সূচক ব্যবহার করে, প্রবণতা নির্ণয় করা যায়, যা সঠিকতা বাড়িয়ে তোলে।
কেন্দ্রীয় মাধ্যাকর্ষণ সূচক প্রবণতা পরিবর্তনের জন্য সংবেদনশীল, এসএসএল চ্যানেল প্রবণতা দিক নির্ণয় cleared。
ডায়নামিক এটিআর স্টপ মার্কেটের ওঠানামা অনুযায়ী রিয়েল টাইমে স্টপ লেভেলের সমন্বয় করে এবং এর নমনীয়তা রয়েছে।
নীতিমালা সহজ, সুস্পষ্ট, সহজে বোঝা যায় এবং বাস্তবায়িত হয়।
প্যারামিটার অপ্টিমাইজেশনের জন্য যথেষ্ট জায়গা রয়েছে, যা বিভিন্ন বাজারের জন্য সামঞ্জস্য করা যেতে পারে।
“এটি কার্যকর হয়েছে এবং কৌশলটি কার্যকর হয়েছে কিনা তা যাচাই করতে পারে।
কেন্দ্রীয় মাধ্যাকর্ষণ সূচক এবং এসএসএল চ্যানেল উভয়ই ব্যর্থ হতে পারে, যার ফলে ট্রেডিং সিগন্যালের ত্রুটি ঘটে। অন্যান্য সূচকগুলির সাথে নিশ্চিতকরণের জন্য যোগ করা যেতে পারে।
ডায়নামিক স্টপ লস হতে পারে অত্যধিক তীব্র, এবং স্টপ লস প্রস্থটি যথাযথভাবে শিথিল করা যেতে পারে।
প্রতিক্রিয়া সময়কালের ভুল নির্বাচন কৌশলগত কার্যকারিতা হ্রাস করতে পারে এবং বিভিন্ন বাজার পর্যায়ে প্রতিক্রিয়া প্রয়োজন।
লেনদেনের খরচ সম্পর্কে যথেষ্ট ধারণা থাকা দরকার।
বিভিন্ন প্যারামিটার সমন্বয় পরীক্ষা করে সেরা প্যারামিটার জোড়া খুঁজে বের করুন।
ATR চক্র এবং গুণিতক প্যারামিটারগুলিকে গতিশীল ক্ষতির জন্য অনুকূলিত করুন।
সিগন্যাল ফিল্টার করার জন্য অন্যান্য সূচক যেমন MACD, KDJ ইত্যাদি অন্তর্ভুক্ত করুন।
মেশিন লার্নিং মডেল যুক্ত করা হয়েছে যাতে ট্রেন্ডের দিকনির্দেশনা বুঝতে সাহায্য করা যায়।
তহবিল ব্যবস্থাপনা অপ্টিমাইজ করুন, পজিশন কন্ট্রোল সেট করুন
নির্দিষ্ট জাতের জন্য প্যারামিটার সমন্বয় এবং অপ্টিমাইজেশন।
এই কৌশলটি কেন্দ্রীয় মহাকর্ষের সূচক এবং এসএসএল চ্যানেলের সূচকগুলির সাথে মিলিত হয়ে প্রবণতা নির্ধারণ করে, ডায়নামিক এটিআর স্টপ লস কন্ট্রোল ঝুঁকি ব্যবহার করে, এটি একটি কার্যকর প্রবণতা-অনুসরণ কৌশল। প্যারামিটার অপ্টিমাইজেশন, অন্যান্য সূচক প্রবর্তন এবং মেশিন লার্নিং ইত্যাদির মাধ্যমে উন্নতি করা কৌশলটির স্থায়িত্ব এবং যুদ্ধের কার্যকারিতা আরও বাড়িয়ে তুলতে পারে। সামগ্রিকভাবে, এই কৌশলটি শক্তিশালী ব্যবহারিকতা এবং বিস্তারযোগ্যতা রয়েছে এবং এটি একটি কৌশলগত ধারণা যা পরিমাণগত ব্যবসায়ের জন্য মূল্যবান।
/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Thanks to HPotter for the original code for Center of Gravity Backtest
strategy("CoG SSL 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.075)
/////////////// Time Frame ///////////////
_0 = input(false, "════════ Test Period ═══════")
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
/////////////// SSL Channels ///////////////
_1 = input(false, "═════════ SSL ══════════")
len1=input(title="SMA Length 1", defval=12)
len2=input(title="SMA Length 2", defval=13)
smaHigh = sma(high, len1)
smaLow = sma(low, len2)
Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh
///////////// Center of Gravity /////////////
_2 = input(false, "═════════ CoG ══════════")
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))
///////////// Rate Of Change /////////////
_3 = input(false, "══════ Rate of Change ══════")
source = close
roclength = input(2, "ROC Length", minval=1)
pcntChange = input(10, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Srategy ///////////////
long = possig == 1 or (sslUp > sslDown and isMoving())
short = possig == -1 or (sslUp < sslDown and isMoving())
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 ///////////////
_4 = input(false, "════════ Stop Loss ═══════")
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("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=longStop, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=shortStop, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
p1 = plot(sslDown, linewidth = 1, color=color.red, title="SSL down")
p2 = plot(sslUp, linewidth = 1, color=color.lime, title="SSL up")
fill(p1, p2, color = not isMoving() ? color.white : sslDown < sslUp ? color.lime : color.red, transp=80)
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(long ? color.green : short ? color.red : not isMoving() ? color.white : na, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)