یہ حکمت عملی قیمت فرق کے اصول کو اپناتی ہے کہ جب قیمت حالیہ کم سے کم ہوتی ہے تو ، اسٹاپ نقصان اور منافع لینے کے احکامات کے ساتھ ، منافع لینے کے لئے کم سے کم قیمت کے پیچھے جانے کے لئے۔
یہ فرق کی نشاندہی کرتا ہے جب قیمت حالیہ N گھنٹوں میں سب سے کم قیمت سے نیچے ٹوٹ جاتی ہے ، اسٹاپ نقصان اور منافع لینے کے احکامات کے ساتھ تشکیل شدہ فیصد کی بنیاد پر طویل عرصے تک جاتا ہے۔ قیمت کی کارروائی کے مطابق اسٹاپ نقصان لائن اور منافع لینے کی لائن منتقل ہوتی ہے۔ منطق یہ ہے:
اس حکمت عملی کے فوائد:
کچھ خطرات بھی ہیں:
اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
آخر میں ، یہ قیمت کے فرق پر مبنی ایک آسان اور موثر ٹریلنگ اسٹاپ نقصان کی حکمت عملی ہے۔ یہ غلط اندراجات کو مؤثر طریقے سے کم کرتا ہے اور منافع میں تالے لگاتا ہے۔ پیرامیٹرز ٹوننگ اور سگنل فلٹرنگ میں بہتری کے لئے ابھی بھی بہت زیادہ گنجائش ہے۔ یہ مزید تحقیق اور بہتر بنانے کے قابل ہے۔
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Squeeze Backtest by Shaqi v1.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0) strategy.risk.allow_entry_in(strategy.direction.long) R0 = "6 Hours" R1 = "12 Hours" R2 = "24 Hours" R3 = "48 Hours" R4 = "1 Week" R5 = "2 Weeks" R6 = "1 Month" R7 = "Maximum" buyPercent = input( title="Buy, %", type=input.float, defval=3, minval=0.01, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 sellPercent = input(title="Sell, %", type=input.float, defval=1, minval=0.01, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 stopPercent = input(title="Stop Loss, %", type=input.float, defval=1, minval=0.01, maxval=100, step=0.01, inline="Percents", group="Squeeze Settings") * 0.01 isMaxBars = input( title="Max Bars To Sell", type=input.bool, defval=true , inline="MaxBars", group="Squeeze Settings") maxBars = input( title="", type=input.integer, defval=2, minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings") bind = input( title="Bind", type=input.source, defval=close, group="Squeeze Settings") isRange = input( title="Fixed Range", type=input.bool, defval=true, inline="Range", group="Backtesting Period") rangeStart = input( title="", defval=R4, options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period") periodStart = input(title="Backtesting Start", type=input.time, defval=timestamp("01 Aug 2021 00:00 +0000"), group="Backtesting Period") periodEnd = input( title="Backtesting End", type=input.time, defval=timestamp("01 Aug 2022 00:00 +0000"), group="Backtesting Period") int startDate = na int endDate = na if isRange if rangeStart == R0 startDate := timenow - 21600000 endDate := timenow else if rangeStart == R1 startDate := timenow - 43200000 endDate := timenow else if rangeStart == R2 startDate := timenow - 86400000 endDate := timenow else if rangeStart == R3 startDate := timenow - 172800000 endDate := timenow else if rangeStart == R4 startDate := timenow - 604800000 endDate := timenow else if rangeStart == R5 startDate := timenow - 1209600000 endDate := timenow else if rangeStart == R6 startDate := timenow - 2592000000 endDate := timenow else if rangeStart == R7 startDate := time endDate := timenow else startDate := periodStart endDate := periodEnd afterStartDate = (time >= startDate) beforeEndDate = (time <= endDate) notInTrade = strategy.position_size == 0 inTrade = strategy.position_size > 0 barsFromEntry = barssince(strategy.position_size[0] > strategy.position_size[1]) entry = strategy.position_size[0] > strategy.position_size[1] entryBar = barsFromEntry == 0 notEntryBar = barsFromEntry != 0 buyLimitPrice = bind - bind * buyPercent buyLimitFilled = low <= buyLimitPrice sellLimitPriceEntry = buyLimitPrice * (1 + sellPercent) sellLimitPrice = strategy.position_avg_price * (1 + sellPercent) stopLimitPriceEntry = buyLimitPrice - buyLimitPrice * stopPercent stopLimitPrice = strategy.position_avg_price - strategy.position_avg_price * stopPercent if afterStartDate and beforeEndDate and notInTrade strategy.entry("BUY", true, limit = buyLimitPrice) strategy.exit("INSTANT", limit = sellLimitPriceEntry, stop = stopLimitPriceEntry) strategy.cancel("INSTANT", when = inTrade) if isMaxBars strategy.close("BUY", when = barsFromEntry >= maxBars, comment = "Don't Sell") strategy.exit("SELL", limit = sellLimitPrice, stop = stopLimitPrice) showStop = stopPercent <= 0.03 plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", style=plot.style_linebr, color=color.red, linewidth=1) plot(sellLimitPrice, title="Take Profit Limit Order", style=plot.style_linebr, color=color.purple, linewidth=1) plot(strategy.position_avg_price, title="Buy Order Filled Price", style=plot.style_linebr, color=color.blue, linewidth=1) plot(buyLimitPrice, title="Trailing Buy Limit Order", style=plot.style_stepline, color=color.new(color.blue, 30), offset=1)