اس حکمت عملی میں Keltner چینل اشارے کا استعمال کیا گیا ہے ، جو متحرک اوسط کے ساتھ مل کر ، متحرک خریدی اور فروخت کی قیمتوں کو طے کرتا ہے ، جس سے کم خریدنے اور فروخت کرنے کے لئے توڑنے کی کارروائی ہوتی ہے۔ حکمت عملی خود بخود چینل کو توڑنے کے لئے خریدنے اور فروخت کرنے کے مواقع کی نشاندہی کرتی ہے۔
یہ حکمت عملی مجموعی طور پر سائنسی طور پر معقول استعمال کرتی ہے ، قیمتوں کے رجحانات اور سمت کا تعین کرنے کے لئے متحرک چینل اشارے کے ذریعہ ، توڑنے والے سگنل کو پکڑنے کے لئے معقول پیرامیٹرز مرتب کریں ، کم خرید و فروخت کو کم کریں ، اور اس کے نتیجے میں اضافی منافع حاصل کریں۔ اس کے ساتھ ساتھ حکمت عملی کے خطرات کو مستقل طور پر بہتر بنائیں ، تاکہ یہ متعدد مارکیٹوں میں مستحکم کام کرسکے۔
/*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")