
এই কৌশলটির মূল ধারণা হল এলোমেলো সংখ্যার মাধ্যমে প্রবেশের পয়েন্ট নির্ধারণ করা, তিনটি স্টপ-অফ পয়েন্ট এবং একটি স্টপ-লস পয়েন্ট স্থাপন করা যা প্রতি লেনদেনের ক্ষতি নিয়ন্ত্রণের জন্য ঝুঁকি পরিচালনা করে।
এই কৌশলটি 11 থেকে 13 এর মধ্যে একাধিক প্রবেশের পয়েন্ট নির্ধারণের জন্য র্যান্ডম সংখ্যা rd_number_entry ব্যবহার করে এবং 20 থেকে 22 এর মধ্যে rd_number_exit ব্যবহার করে পজিশনটি খালি করার জন্য। অতিরিক্ত হওয়ার পরে স্টপ লসটি প্রবেশের দাম হ্রাস করেatr(14) * slx। একই সাথে তিনটি স্টপ পয়েন্ট সেট করা হয়, প্রথম স্টপ পয়েন্টটি প্রবেশের দাম যোগ করেatr(14) * tpx, দ্বিতীয় স্টপ পয়েন্টটি প্রবেশের দাম যোগ করে 2 * tpx, তৃতীয় স্টপ পয়েন্টটি প্রবেশের দাম যোগ করে 3 * tpx। খালি করার অনুরূপ নীতি, তবে এটি rd_number_entry এ সিদ্ধান্ত নেওয়া হয় যে স্টপ লসটি বিপরীত দিকে নেওয়া হবে।
এই কৌশলটি tpx এবং slx এর সমন্বয় দ্বারা ঝুঁকি নিয়ন্ত্রণ করতে পারে।
এই কৌশলটির সুবিধাগুলো হলঃ
এই কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ
স্টপ-অফ-লস ফ্যাক্টর এবং র্যান্ডম-ইন লজিকের অপ্টিমাইজেশনের মাধ্যমে ঝুঁকি হ্রাস করা যায়।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ
এই কৌশলটি এলোমেলো প্রবেশের উপর ভিত্তি করে, একাধিক স্টপ-স্টপ পয়েন্ট সেট করে যা একক লেনদেনের ঝুঁকি নিয়ন্ত্রণ করে। দৃ strong় এলোমেলোতা কার্ব-ফিট হওয়ার সম্ভাবনা হ্রাস করতে পারে, প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে লেনদেনের ঝুঁকি হ্রাস করতে পারে। পরবর্তী অপ্টিমাইজেশনের জন্য প্রচুর জায়গা রয়েছে এবং এটি আরও গবেষণা করার যোগ্য।
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Random Strategy with 3 TP levels and SL", overlay=true,max_bars_back = 50)
tpx = input(defval = 0.8, title = 'Atr multiplication for TPs?')
slx = input(defval = 1.2, title = 'Atr multiplication for SL?')
isLong = false
isLong := nz(isLong[1])
isShort = false
isShort := nz(isShort[1])
entryPrice = 0.0
entryPrice := nz(entryPrice[1])
tp1 = true
tp1 := nz(tp1[1])
tp2 = true
tp2 := nz(tp2[1])
sl_price = 3213.0
sl_price := nz(sl_price[1])
sl_atr = atr(14)*slx
tp_atr = atr(14)*tpx
rd_number_entry = 1.0
rd_number_entry := (16708 * nz(rd_number_entry[1], 1) % 2147483647)%17
rd_number_exit = 1.0
rd_number_exit := ((16708 * time % 2147483647) %17)
//plot(rd_number_entry)
shortCondition = (rd_number_entry == 13? true:false) and (year >= 2017) and not isLong and not isShort
longCondition = (rd_number_entry == 11 ? true:false) and (year >= 2017) and not isShort and not isShort
//Never exits a trade:
exitLong = (rd_number_exit == 22?true:false) and (year >= 2018) and not isShort
exitShort = (rd_number_exit == 22?true:false) and (year >= 2018) and not isLong
//shortCondition = crossunder(sma(close, 14), sma(close, 28)) and year >= 2017
//longCondition = crossover(sma(close, 14), sma(close, 28)) and year >= 2017
//exitLong = crossunder(ema(close, 14), ema(close, 28)) and year >= 2017
//exitShort = crossover(ema(close, 14), ema(close, 28)) and year >= 2017
if (longCondition and not isLong)
strategy.entry('Long1', strategy.long)
strategy.entry('Long2', strategy.long)
strategy.entry('Long3', strategy.long)
isLong := true
entryPrice := close
isShort := false
tp1 := false
tp2 := false
sl_price := close-sl_atr
if (shortCondition and not isShort)
strategy.entry('Short1', strategy.short)
strategy.entry('Short2', strategy.short)
strategy.entry('Short3', strategy.short)
isShort := true
entryPrice := close
isLong := false
tp1 := false
tp2 := false
sl_price := close+sl_atr
if (exitShort and isShort)
strategy.close('Short1')
strategy.close('Short2')
strategy.close('Short3')
isShort := false
if (exitLong and isLong)
strategy.close('Long1')
strategy.close('Long2')
strategy.close('Long3')
isLong := false
if isLong
if (close > entryPrice + tp_atr) and not tp1
strategy.close('Long1')
tp1 := true
sl_price := close - tp_atr
if (close > entryPrice + 2*tp_atr) and not tp2
strategy.close('Long2')
tp2 := true
sl_price := close - tp_atr
if (close > entryPrice + 3*tp_atr)
strategy.close('Long3')
isLong := false
if (close < sl_price)
strategy.close('Long1')
strategy.close('Long2')
strategy.close('Long3')
isLong := false
if isShort
if (close < entryPrice - tp_atr) and not tp1
strategy.close('Short1')
sl_price := close + tp_atr
tp1 := true
if (close < entryPrice - 2*tp_atr) and not tp2
strategy.close('Short2')
sl_price := close + tp_atr
tp2 := true
if (close < entryPrice - 3*tp_atr)
strategy.close('Short3')
isShort := false
if (close > sl_price)
strategy.close('Short1')
strategy.close('Short2')
strategy.close('Short3')
isShort := false
plot(atr(14)*slx)
plot(sl_price)