
এই কৌশলটি কেল্টনার চ্যানেলের সূচক ব্যবহার করে, একটি চলমান গড়ের সাথে মিলিত হয়, গতিশীল বিরতিযুক্ত ক্রয় এবং বিক্রয় মূল্য নির্ধারণ করে, নিম্ন বা উচ্চ বিক্রয়ের বিরতিযুক্ত ক্রিয়াকলাপের জন্য। কৌশলটি স্বয়ংক্রিয়ভাবে চ্যানেলের বিরতিযুক্ত ক্রয় এবং বিক্রয় সুযোগগুলি সনাক্ত করতে পারে।
এই কৌশলটি সামগ্রিকভাবে বৈজ্ঞানিক যুক্তিসঙ্গত ব্যবহার করে, গতিশীল চ্যানেল সূচকগুলির মাধ্যমে মূল্যের গতি এবং দিক নির্ধারণ করে, বিরতি সংকেত ক্যাপচার করার জন্য যুক্তিসঙ্গত প্যারামিটার সেট করে, কম কেনা বেচাকেনা অর্জন করে এবং অতিরিক্ত উপার্জন অর্জন করে। একই সাথে কৌশলটির ঝুঁকিগুলি ক্রমাগত অনুকূলিতকরণ করে যাতে এটি বিভিন্ন বাজারে স্থিতিশীলভাবে পরিচালনা করতে পারে।
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Keltner Strategy", overlay=true)
length = input.int(20, minval=1)
mult = input.float(2.0, "Multiplier")
src = input(close, title="Source")
exp = input(true, "Use Exponential MA")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style")
atrlength = input(10, "ATR Length")
esma(source, length)=>
s = ta.sma(source, length)
e = ta.ema(source, length)
exp ? e : s
ma = esma(src, length)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = ta.crossover(src, upper)
crossLower = ta.crossunder(src, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
: na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
: na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (src < ma or high >= bprice )
cancelScond = crossScond and (src > ma or low <= sprice )
if (cancelBcond)
strategy.cancel("KltChLE")
if (crossUpper)
strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
if (cancelScond)
strategy.cancel("KltChSE")
if (crossLower)
strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")