
এই কৌশলটি গতিশীল চ্যানেলের সূচকগুলির উপর ভিত্তি করে ট্রেডিং সিগন্যাল ডিজাইন করে, দামের ব্রেকচার্জ চ্যানেলের উত্থান-পতনের উপর ভিত্তি করে ক্রয় এবং বিক্রয় সংকেত উত্পন্ন করে। কৌশলটি কেবলমাত্র একাধিক ট্রেড করে, যদি বিক্রয় সংকেত উপস্থিত হয় তবে এটি খালি অবস্থানে চলে যায়।
এই কৌশলটি এসএমএ গড় এবং এটিআর বাস্তব ওঠানামা ব্যবহার করে একটি গতিশীল চ্যানেল তৈরি করে। চ্যানেলের উপরের এবং নীচের রেলগুলি হলঃ
ট্র্যাক আপ = SMA + ATR * ফ্যাক্টর নিচের ট্র্যাক = SMA - ATR * ফ্যাক্টর
যখন দাম উপরে উঠে যায়, তখন একটি ক্রয় সংকেত উৎপন্ন হয়; যখন দাম নীচে নেমে যায়, তখন একটি বিক্রয় সংকেত উৎপন্ন হয়।
যেহেতু এটি কেবলমাত্র একাধিক মাথা, তাই যদি বিক্রয়ের সংকেত আসে তবে পূর্ববর্তী খোলা অর্ডারটি বাতিল করুন এবং খালি স্থানে খালি স্থানে রাখুন।
এই নীতির যৌক্তিকতা নিম্নরূপঃ
এই কৌশলটির সুবিধাগুলো হলঃ
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
প্রতিকারঃ
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ
এই কৌশলটি গতিশীল চ্যানেলের সূচকগুলির উপর ভিত্তি করে, সহজেই এবং কার্যকরভাবে বাজারের প্রবণতা ক্যাপচার করে। কৌশলগত যুক্তিটি পরিষ্কার এবং সহজেই বোঝা যায়, দামের চ্যানেলটি ভেঙে ট্রেকিংয়ের মাধ্যমে ট্রেডিং সিগন্যাল তৈরি করে। যদিও কেবল মাল্টি-হেড এবং কোনও প্রস্থান প্রক্রিয়া নেই, তবে প্যারামিটার অপ্টিমাইজেশন, খালি হেড মডিউল যুক্ত করা, স্টপ লস যুক্ত করা ইত্যাদির মাধ্যমে উন্নতি করা যেতে পারে। সামগ্রিকভাবে, এই কৌশলটির উন্নতির জন্য খুব বড় জায়গা রয়েছে, এটি গভীরতর গবেষণা এবং প্রয়োগের জন্য একটি পরিমাণগত কৌশল।
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Keltner Channel Strategy", overlay=true)
source = close
useTrueRange = input(true)
length = input(20, minval=1)
mult = input(1.0)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, 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 (source < ma or high >= bprice )
cancelScond = crossScond and (source > 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")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)