
এই কৌশলটি সর্পিল চ্যানেলের সূচক এবং ফাঁক হার সূচককে সংযুক্ত করে, যখন দামগুলি উপরের ট্র্যাক লাইন এবং গড় লাইনটি ভেঙে দেয় তখন একটি কেনার সংকেত তৈরি করে। একইভাবে, যখন দামগুলি উপরের ট্র্যাক লাইন এবং গড় লাইনটি ভেঙে দেয়, তখন একটি বিক্রয় সংকেত তৈরি করে। এই কৌশলটি সর্পিল চ্যানেলের মাধ্যমে দামের প্রবণতার দিক নির্ধারণ করে এবং দামের গতিশীলতা সনাক্ত করতে ফাঁক হার সূচক ব্যবহার করে, দুটি সূচক একই সাথে নিশ্চিত হওয়ার ভিত্তিতে একটি ট্রেডিং সংকেত তৈরি করে, যার ফলে একটি ভাল জয়লাভ হয়।
এই কৌশলটি মূলত দুটি সূচকের উপর ভিত্তি করে তৈরি করা হয়েছেঃ
স্পিরাল চ্যানেলঃ দামের প্রবণতার দিকনির্দেশনা নির্ধারণের জন্য নিম্নগামী লাইন গণনা করা হয়। যখন দামটি উর্ধগামী হয় তখন এটি উত্সাহী হয় এবং যখন এটি নিম্নগামী হয় তখন এটি পতিত হয়।
ROC: দামের গতিশীলতা নির্ধারণের জন্য ব্যবহৃত হয়। ROC একটি ইতিবাচক মানের চেয়ে বড় হলে দাম বাড়তে থাকে এবং একটি নেতিবাচক মানের চেয়ে কম হলে দাম কমতে থাকে।
স্পাইরাল চ্যানেল এবং ডিফারেনশিয়াল রেট ইন্ডিকেটর একই সাথে একাধিক সিগন্যাল প্রেরণ করলে একটি ক্রয় সংকেত তৈরি হয়। অর্থাৎ, দাম একই সাথে ট্র্যাকিং এবং উত্থান ত্বরণের লক্ষণ দেখায়। বিক্রয় সংকেত তৈরি করার লজিকটিও অনুরূপ।
এই সংমিশ্রণটি সংকেতের নির্ভরযোগ্যতা বাড়িয়ে তোলে এবং কোন সুস্পষ্ট প্রবণতা না থাকলে অন্ধভাবে ট্রেড করা এড়ায়।
দামের প্রবণতা এবং গতিশীলতার সমন্বয়ে, সংকেতগুলি আরও নির্ভরযোগ্য, বিজয়ী হার বেশি।
প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে, কৌশলটির ট্রেডিং ফ্রিকোয়েন্সিটি সামঞ্জস্য করা যেতে পারে। যেমন প্যারামিটারগুলিকে সামঞ্জস্য করা যায় যা পজিশন খোলার সংবেদনশীলতা নিয়ন্ত্রণ করে।
স্টপ লস ব্যবহার করে একক লোকসান নিয়ন্ত্রণ করুন। প্যারামিটারগুলি কাস্টমাইজযোগ্য।
পুনরায় ভর্তি প্রক্রিয়া ট্রেন্ড অনুসরণ করতে পারে এবং আরও বেশি লাভজনক হতে পারে।
তবে, কিছু ব্যবসায়ের সুযোগ থেকে বঞ্চিত হওয়া এবং লাভজনকতা হ্রাস করা।
বিপরীতমুখী কৌশলগুলি সহজেই ফাঁদে পড়তে পারে। যখন দামগুলি বিপরীত হয়, তখন বড় ক্ষতি হতে পারে।
অপ্রয়োজনীয় প্যারামিটার সেট করলে ট্রেডিং সিগন্যাল খুব ঘন বা খুব কম দেখা দিতে পারে।
স্থির শতাংশের স্টপ লস সম্পূর্ণরূপে একটি বড় একক ক্ষতির ঘটনার এড়াতে পারে না।
অনুকূল প্যারামিটার সমন্বয় খুঁজে বের করার জন্য ডিফারেনশিয়াল রেট ইন্ডিকেটরের প্যারামিটার পরীক্ষা করা।
বিভিন্ন স্তরের স্টপ লস পরীক্ষা করে, হার এবং হার সমন্বয় করে।
সংকেতের গুণগত মান উন্নত করতে অন্যান্য সূচক ফিল্টার যুক্ত করুন, যেমন কোয়ালিটি সূচক, কম্পন সূচক ইত্যাদি।
বিভিন্ন বাজার পরীক্ষা করে দেখে নিন কোন জাতটি এই কৌশল অনুসারে সবচেয়ে ভাল কাজ করে।
পজিশন ম্যানেজমেন্ট কৌশলকে অপ্টিমাইজ করুন, বিভিন্ন বাজারের জন্য বিভিন্ন পজিশন ব্যবহার করুন।
এই কৌশলটি সর্পিল চ্যানেল এবং ডিফারেনশিয়াল রেট সূচকগুলি ব্যবহার করে মূল্যের প্রবণতা এবং গতিশীলতা নির্ধারণ করে এবং ট্রেডিং সিগন্যালের গুণমান নিশ্চিত করার সময় পুনরায় প্রবেশের মাধ্যমে এবং প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে মুনাফা বজায় রাখার ক্ষমতা। ঝুঁকি নিয়ন্ত্রণের উপর ভিত্তি করে নির্দিষ্ট শতাংশের স্টপ লস আরও অপ্টিমাইজ করা যেতে পারে। সামগ্রিকভাবে, এই কৌশলটি পরিপূর্ণ এবং পরিমাণগত ব্যবসায়ের জন্য একটি মৌলিক কাঠামো হিসাবে উপযুক্ত।
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SSL Chaikin BF 🚀", overlay=true, precision=2, 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
/////////////// Chaikin MF ///////////////
_1 = input(false, "═══════ Chaikin MF ═══════")
length = input(20, minval=1, title = "Chaikin SMA Length")
upperThreshold = input(0.04, step=0.01, title="Upper Threshold")
lowerThreshold = input(0.02, step=0.01, title="Lower Threshold")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, length) / sum(volume, length)
/////////////// SSL Channels ///////////////
_2 = 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
///////////// Rate Of Change /////////////
_3 = input(false, "══════ Rate of Change ══════")
source = close
roclength = input(13, "ROC Length", minval=1)
pcntChange = input(4, "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))
/////////////// Strategy ///////////////
long = sslUp > sslDown and isMoving() or crossover(mf, upperThreshold)
short = sslUp < sslDown and isMoving() or crossunder(mf, lowerThreshold)
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])
//////////////// Stop loss ///////////////
_4 = input(false, "════════ Stop Loss ═══════")
sl_inp = input(2.0, title='Stop Loss %') / 100
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
p1 = plot(sslDown, linewidth = 1, color=color.red)
p2 = plot(sslUp, linewidth = 1, color=color.lime)
fill(p1, p2, color = sslDown < sslUp ? color.lime : color.red, transp=80)
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(crossover(mf, upperThreshold) ? color.blue : crossunder(mf, lowerThreshold) ? color.orange : na, transp=30)