یہ حکمت عملی قیمت چینل کا حساب لگانے کے لئے ایک لکیری رجسٹریشن فنکشن اور کم سے کم مربع طریقہ استعمال کرتی ہے ، جس میں دو سبز اور سرخ لائنیں ہوتی ہیں۔ یہ حالیہ اے ٹی آر پر مبنی متحرک اسٹاپ نقصان کا استعمال کرتی ہے۔
حکمت عملی لمبائی 25 اور شفٹ 5 کے ساتھ لکیری رجعت کا استعمال کرتے ہوئے مرکز لائن xLG کا حساب لگاتی ہے۔ پھر یہ چینل رینج کے طور پر مرکز لائن سے اوپر اور نیچے 6٪ لیتا ہے ، جس میں xLG1r اوپری لائن اور xLG1s نچلی لائن ہے۔
جب قیمت xLG1r سے اوپر ہوتی ہے تو ، یہ طویل ہوجاتی ہے۔ جب قیمت xLG1s سے نیچے ہوتی ہے تو ، یہ مختصر ہوجاتی ہے۔ یہ آخری لمبا اور مختصر وقت ریکارڈ کرتا ہے۔ جب آخری لمبا وقت آخری مختصر وقت سے بڑا ہوتا ہے تو ایک لمبا سگنل تیار ہوتا ہے۔ جب آخری مختصر وقت آخری لمبا وقت سے بڑا ہوتا ہے تو ایک مختصر سگنل تیار ہوتا ہے۔
متحرک اے ٹی آر اسٹاپ نقصان 1 کی اے ٹی آر مدت اور 2 کا ضرب استعمال کرتا ہے۔ لمبی تجارت کے ل the ، اسٹاپ نقصان اختتامی قیمت مائنس اے ٹی آر ویلیو ٹائمز ضرب ہے۔ مختصر تجارت کے ل the ، اسٹاپ نقصان اختتامی قیمت پلس اے ٹی آر ویلیو ٹائمز ضرب ہے۔
یہ حکمت عملی ایک انکولی ٹرینڈ ٹریکنگ سسٹم بنانے کے لئے رجحان کی پیروی ، متحرک اسٹاپس اور بریک آؤٹ سگنل جیسی متعدد تکنیکوں کو یکجا کرتی ہے۔ پیرامیٹر کی اصلاح اور سگنل فلٹرنگ میں مزید بہتری سے استحکام اور منافع میں بہتری آسکتی ہے۔ یہ کوانٹ ٹریڈرز کے لئے ایک قیمتی نقطہ نظر فراہم کرتا ہے۔
/*backtest start: 2023-01-01 00:00:00 end: 2023-06-24 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Thanks to HPotter for the original code for Center of Gravity Backtest strategy("Center of Gravity BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.15) /////////////// 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 ///////////// Center of Gravity ///////////// Length = input(25, minval=1) m = input(5, minval=0) Percent = input(6, minval=0, title="COG %") xLG = linreg(close, Length, m) xLG1r = xLG + ((close * Percent) / 100) xLG1s = xLG - ((close * Percent) / 100) pos = 0.0 pos := iff(close > xLG1r, 1, iff(close < xLG1s, -1, nz(pos[1], 0))) possig = iff(pos == 1, 1, iff(pos == -1, -1, pos)) /////////////// Srategy /////////////// long = possig == 1 short = possig == -1 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]) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) /////////////// Dynamic ATR Stop Losses /////////////// atrLkb = input(1, minval=1, title='ATR Stop Period') atrMult = input(2, step=0.25, title='ATR Stop Multiplier') atr1 = atr(atrLkb) longStop = 0.0 longStop := short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop[1] shortStop = 0.0 shortStop := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop[1] /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short) strategy.exit("Long SL", "Long", stop=longStop, when=since_longEntry > 0) strategy.exit("Short SL", "Short", stop=shortStop, when=since_shortEntry > 0) /////////////// Plotting /////////////// plot(xLG1r, color=color.lime, title="LG1r") plot(xLG1s, color=color.red, title="LG1s") plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=1) plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=1) bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)