قیمت کے فرق پر مبنی ٹریلنگ سٹاپ نقصان کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-28 13:53:16
ٹیگز:

img

جائزہ

یہ حکمت عملی قیمت فرق کے اصول کو اپناتی ہے کہ جب قیمت حالیہ کم سے کم ہوتی ہے تو ، اسٹاپ نقصان اور منافع لینے کے احکامات کے ساتھ ، منافع لینے کے لئے کم سے کم قیمت کے پیچھے جانے کے لئے۔

حکمت عملی منطق

یہ فرق کی نشاندہی کرتا ہے جب قیمت حالیہ N گھنٹوں میں سب سے کم قیمت سے نیچے ٹوٹ جاتی ہے ، اسٹاپ نقصان اور منافع لینے کے احکامات کے ساتھ تشکیل شدہ فیصد کی بنیاد پر طویل عرصے تک جاتا ہے۔ قیمت کی کارروائی کے مطابق اسٹاپ نقصان لائن اور منافع لینے کی لائن منتقل ہوتی ہے۔ منطق یہ ہے:

  1. آخری N گھنٹوں میں کم ترین قیمت کا حساب کتاب پابند قیمت کے طور پر کریں
  2. جب حقیقی وقت کی قیمت پابند قیمت * خرید فیصد سے کم ہو تو طویل عرصے تک جائیں
  3. داخلہ قیمت * فروخت فیصد کی بنیاد پر منافع حاصل کریں
  4. اسٹاپ نقصان کی بنیاد پر داخلہ قیمت مقرر کریں - داخلہ قیمت * اسٹاپ نقصان فیصد
  5. پوزیشن کا سائز حکمت عملی کے ایکویٹی کا فیصد ہے
  6. سب سے کم قیمت کے ساتھ ٹریل سٹاپ نقصان لائن
  7. جب منافع لینے یا سٹاپ نقصان کو متحرک کیا جاتا ہے تو پوزیشن بند کریں

فوائد کا تجزیہ

اس حکمت عملی کے فوائد:

  1. قیمت فرق کے تصور کا استعمال کریں، جیت کی شرح کو بہتر بنائیں
  2. زیادہ تر منافع میں مقفل کرنے کے لئے خودکار ٹریلنگ اسٹاپ نقصان
  3. مختلف مارکیٹوں کے لئے اسٹاپ نقصان اور منافع حاصل کرنے کا تناسب
  4. واضح rebounds کے ساتھ آلات کے لئے اچھی طرح کام کرتا ہے
  5. سادہ منطق اور لاگو کرنے میں آسان

خطرے کا تجزیہ

کچھ خطرات بھی ہیں:

  1. نچلے نچلے درجے کے ساتھ خلاؤں کی خرابی ناکام ہوسکتی ہے
  2. غیر مناسب سٹاپ نقصان یا منافع لینے کی ترتیبات سے قبل از وقت باہر نکلنے کا سبب بن سکتا ہے
  3. مارکیٹ کی تبدیلیوں کے لئے بار بار پیرامیٹرز کو ایڈجسٹ کرنے کی ضرورت ہے
  4. محدود قابل اطلاق آلات، کچھ کے لئے کام نہیں کر سکتے ہیں
  5. وقت وقت پر دستی مداخلت کی ضرورت ہوتی ہے

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:

  1. خودکار پیرامیٹر ٹیوننگ کے لئے مشین لرننگ ماڈل شامل کریں
  2. سٹاپ نقصان / منافع حاصل کرنے کی مزید اقسام شامل کریں، مثال کے طور پر ٹریلنگ سٹاپ نقصان، بریکٹ آرڈرز
  3. زیادہ ذہین باہر نکلنے کے لئے سٹاپ نقصان / منافع لے منطق کو بہتر بنائیں
  4. غلط سگنل کو فلٹر کرنے کے لئے مزید اشارے شامل کریں
  5. عالمگیریت کو بہتر بنانے کے لئے مزید آلات تک توسیع کریں

نتیجہ

آخر میں ، یہ قیمت کے فرق پر مبنی ایک آسان اور موثر ٹریلنگ اسٹاپ نقصان کی حکمت عملی ہے۔ یہ غلط اندراجات کو مؤثر طریقے سے کم کرتا ہے اور منافع میں تالے لگاتا ہے۔ پیرامیٹرز ٹوننگ اور سگنل فلٹرنگ میں بہتری کے لئے ابھی بھی بہت زیادہ گنجائش ہے۔ یہ مزید تحقیق اور بہتر بنانے کے قابل ہے۔


/*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)



مزید