সমন্বিত স্লাইডিং স্টপ লস কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৩-১১-০২ ১৬ঃ২৮ঃ৫৫
ট্যাগঃ

img

সারসংক্ষেপ

এই কৌশলটি স্টোকাস্টিক আরএসআই এবং মূল্য পরিবর্তনের হারের সূচক ব্যবহার করে প্রবেশের প্রবণতা দিক নির্ধারণ করে এবং ঝুঁকি ব্যবস্থাপনার জন্য স্লাইডিং স্টপ লস সমন্বয় করে।

কৌশলগত যুক্তি

প্রথমত, কৌশলটি দৈর্ঘ্য 5 এবং দৈর্ঘ্য 7 সহ স্টোকাস্টিক RSI সূচক ব্যবহার করে স্টোকাস্টিক RSI গণনা করে। যখন স্টোকাস্টিক RSI K মান D মানের উপরে থাকে, এটি একটি উত্থান সংকেত। যখন K ডি এর নীচে থাকে, এটি একটি হ্রাস সংকেত।

দ্বিতীয়ত, কৌশলটি মূল্য পরিবর্তনের হারের সূচক EMA ROC গণনা করে। যখন EMA ROC প্রান্তিক অর্ধেকের উপরে বা প্রান্তিকের নেতিবাচক অর্ধেকের নীচে থাকে, তখন এটি সক্রিয় মূল্য আন্দোলন সনাক্ত করে।

তারপর, স্টোকাস্টিক আরএসআই সংকেত এবং মূল্য পরিবর্তনের হার একত্রিত করে, এটি প্রবণতা দিক চিহ্নিত করে। যখন স্টোকাস্টিক আরএসআই উত্থানমুখী হয় এবং দাম সক্রিয়ভাবে চলতে থাকে, তখন দীর্ঘ যান। যখন স্টোকাস্টিক আরএসআই হ্রাস এবং মূল্য সক্রিয়ভাবে চলতে থাকে, তখন সংক্ষিপ্ত যান।

অবশেষে, কৌশলটি ঝুঁকি পরিচালনার জন্য সমন্বিত স্লাইডিং স্টপ লস ব্যবহার করে। পজিশন খোলার পরে, এটি সর্বোচ্চ / সর্বনিম্ন মূল্য রিফ্রেশ করতে থাকে এবং সর্বোচ্চ / সর্বনিম্ন মূল্য থেকে নির্দিষ্ট শতাংশ দূরত্বকে স্টপ লস স্তর হিসাবে ব্যবহার করে।

সুবিধা বিশ্লেষণ

এই কৌশলটির সুবিধাঃ

  1. স্টোকাস্টিক আরএসআই ইন্ডিকেটর কার্যকরভাবে প্রবণতা এবং অতিরিক্ত ক্রয় / অতিরিক্ত বিক্রয় পরিস্থিতি চিহ্নিত করে।

  2. ভুয়া সংকেত এড়ানোর জন্য মূল্য পরিবর্তনের হার ব্যাপ্তি সীমাবদ্ধ বাজারের বাইরে ফিল্টার করে।

  3. সমন্বিত স্লাইডিং স্টপ লস ঝুঁকি নিয়ন্ত্রণের সময় সর্বাধিক পরিমাণে লাভকে লক করতে পারে।

  4. কৌশলটি বিভিন্ন পণ্যের উপর ভিত্তি করে পরামিতি সমন্বয় জন্য বড় অপ্টিমাইজেশান স্থান আছে।

  5. কৌশলগত যুক্তি সহজ এবং স্পষ্ট, সহজেই বোঝা যায় এবং বাস্তবায়ন করা যায়।

ঝুঁকি বিশ্লেষণ

এই কৌশলের ঝুঁকি:

  1. স্টোকাস্টিক আরএসআই মিথ্যা সংকেত সৃষ্টি করতে পারে, অন্যান্য কারণের সাথে নিশ্চিতকরণের প্রয়োজন।

  2. সমন্বয় স্লাইডিং স্টপ লস খুব আক্রমণাত্মক হতে পারে, রাতারাতি ফাঁক দ্বারা বন্ধ করা যেতে পারে।

  3. স্বল্পমেয়াদী বিপরীতমুখী হতে পারে স্টপ লস।

  4. বিভিন্ন পণ্যের জন্য পরামিতিগুলির অপ্টিমাইজেশান প্রয়োজন, অন্যথায় পারফরম্যান্সটি খারাপ হতে পারে।

  5. ট্রেডিং খরচ কৌশল লাভজনকতা প্রভাবিত, যুক্তিসঙ্গত ট্রেডিং ফ্রিকোয়েন্সি প্রয়োজন।

অপ্টিমাইজেশান নির্দেশাবলী

কৌশলটি নিম্নলিখিত দিকগুলিতে আরও অনুকূলিত করা যেতে পারেঃ

  1. মিথ্যা সংকেত কমাতে স্টোকাস্টিক আরএসআই পরামিতি অপ্টিমাইজ করুন। বিভিন্ন কে এবং ডি মান পরীক্ষা করতে পারেন।

  2. ফিল্টারিং প্রভাব উন্নত করতে পরিবর্তন পরামিতি মূল্য হার অপ্টিমাইজ করুন। বিভিন্ন দৈর্ঘ্য এবং থ্রেশহোল্ড মান পরীক্ষা করতে পারেন।

  3. ট্রেন্ড ইন্ডিকেটর যোগ করুন যাতে বিপরীতমুখী পরিবর্তন থেকে বিরত থাকতে না হয়। যেমন চলমান গড়।

  4. আটকে থাকার ঝুঁকি কমাতে স্টপ লস শতাংশ অপ্টিমাইজ করুন। বিভিন্ন স্টপ লস প্রস্থ পরীক্ষা করতে পারেন।

  5. একক ট্রেড ঝুঁকি নিয়ন্ত্রণের জন্য পজিশন সাইজিং ম্যানেজমেন্ট যোগ করুন। যেমন ফিক্সড স্টপ লস পরিমাণ, অথবা অ্যাকাউন্ট ইক্যুইটি উপর ভিত্তি করে গতিশীলভাবে অবস্থান আকার সামঞ্জস্য করুন।

  6. অভিযোজনযোগ্যতা উন্নত করতে বিভিন্ন পণ্যের উপর পরামিতি পরীক্ষা করুন। একাধিক বাজার এবং সময়সীমার উপর যাচাই করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Sto2", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// 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
    
///////////// Stochastic calc /////////////
smoothK = input(1, minval=1)
smoothD = input(7, minval=1)
lengthRSI = input(5, minval=1)
lengthStoch = input(7, minval=1)
src = input(close, title="RSI Source")

up = sma(max(change(src), 0), lengthRSI) 
down = sma(-min(change(src), 0), lengthRSI)
rsi1 = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

///////////// Rate Of Change ///////////// 
source = close, roclength = input(14, minval=1), pcntChange = input(2, 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 = k > d and isMoving()
short = k < d 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])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(9.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

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

// Strategy
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long)
    strategy.entry("Short Entry", strategy.short, when=short)
    strategy.exit("Long Ex", "Long Entry", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short Entry", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
p1 = plot(k, color=color.gray, linewidth=0)
p2 = plot(d, color=color.gray, linewidth=0)
h0 = hline(100)
h1 = hline(50)
h3 = hline(0)
fill(p1, p2, color = k > d ? color.lime : color.red, transp=70)

আরো