بہترین ٹریلنگ سٹاپ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-21 20:58:22
ٹیگز:

جائزہ

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

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

حکمت عملی رجحان کی سمت کا فیصلہ کرتے ہوئے ڈبل ایم اے کراس اوورز کی بنیاد پر داخل ہوتی ہے۔

جدت سٹاپ نقصان کے ڈیزائن میں ہے:

  1. اسٹاپ ٹرگر لائن سیٹ ہے۔ قیمت اس لائن کو توڑنے کے بعد ٹریلنگ اسٹاپ شروع ہوتا ہے۔

  2. سٹاپ نقصان کی لائن فیصد پیرامیٹر کی بنیاد پر چلتی ہے۔ مثال کے طور پر 3 فیصد پیچھے رہنے کا مطلب ہے کہ آخری کم سے 3 فیصد نیچے۔

  3. پوزیشن اس وقت بند ہو جاتی ہے جب قیمت ٹرائلنگ سٹاپ نقصان لائن کو چھونے کے لئے الٹ جاتی ہے۔

اس سے یہ یقینی بنتا ہے کہ اسٹاپ منافع کو خود بخود پیچھے چھوڑ دے گا ، جبکہ جب منافع ابھی بھی اچھا ہے تو روکنے کا امکان کم ہوجاتا ہے۔

فوائد

  • فی صد پر مبنی خودکار ٹریلنگ اسٹاپ
  • ٹرگر لائن قبل از وقت چالو کرنے سے بچتا ہے
  • متحرک ٹریلنگ منافع کی حفاظت کرتی ہے
  • مختصر retracements کی وجہ سے باہر روکنے سے بچتا ہے
  • ٹرگر لائن اور فیصد جو مارکیٹوں کے مطابق ایڈجسٹ کیا جا سکتا ہے

خطرات

  • MA کراس اوور میں تاخیر ہو سکتی ہے، جس سے غلط سگنل پیدا ہوتے ہیں
  • غلط ٹرگر لائن کی ترتیبات ابتدائی یا دیر سے چالو کرنے کا سبب بنتی ہے
  • غلط فیصد کی ترتیبات بہت وسیع یا تنگ رک جاتا ہے
  • مکمل طور پر whipsaw خطرات سے بچنے کے لئے نہیں کر سکتے
  • مارکیٹ کی اتار چڑھاؤ کے لئے پیرامیٹرز کو بہتر بنانے کی ضرورت ہے

خطرات کو کم کیا جا سکتا ہے:

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

بہتری کی ہدایات

اسٹریٹیجی کو بہتر بنایا جاسکتا ہے:

  1. ڈبل ایم اے کی مدت کو بہتر بنانا

  2. ٹرگر لائن کو بہتر بنانا یا ہٹانا

    براہ راست ٹریلنگ شروع کریں یا مختلف مصنوعات کے لئے مختلف اقدار کا استعمال کریں

  3. مختلف ٹرائل فی صد اقدار کی جانچ

    مختلف مصنوعات کے لئے بہترین اقدار تلاش کریں

  4. دوبارہ داخلے کے قواعد کا اضافہ

    رکنے کے بعد دوبارہ داخل ہونے کی شرائط مقرر کریں

  5. اتار چڑھاؤ کی طرف سے روکنے کی سختی کو ایڈجسٹ کرنا

    بڑھتی ہوئی اتار چڑھاؤ کے ماحول میں وسیع تر رکاوٹیں

خلاصہ

یہ حکمت عملی چالو کرنے سے پہلے ٹرگر لائن کے ساتھ پیچھے کی فیصد اسٹاپ کا استعمال کرتی ہے۔ یہ متحرک میکانزم منافع کی حفاظت اور مارکیٹ کی نقل و حرکت کی بنیاد پر غیر ضروری اسٹاپ سے بچنے کا توازن رکھتا ہے۔ لیکن پیرامیٹرز کو مختلف مصنوعات کے ل optimization اصلاح کی ضرورت ہے ، نیز درستگی کو بہتر بنانے کے ل entries اندراجات پر اضافی فلٹرز کی ضرورت ہے۔ دوبارہ اندراجات سے قبل ہی روکنے کے بعد غائب ہونے والے رجحانات سے بچنے میں بھی مدد ملتی ہے۔ موافقت کے ل continuous مستقل بہتری کی ضرورت ہے۔


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author=Daveatt

SystemName = "BEST Trailing Stop Strategy"
TradeId = "BEST"

InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true


// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, 
//  pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, 
//  commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)


src = close
// Calculate moving averages
fastSMA = sma(close, 15)
slowSMA = sma(close, 45)

// Calculate trading conditions
enterLong  = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)

// trend states
since_buy  = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend  = since_sell > since_buy
sell_trend = since_sell < since_buy 

change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])

//plot(buy_trend ? 1 : 0, title='buy_trend', transp=100)
//plot(sell_trend ? 1 : 0, title='sell_trend', transp=100)

// get the entry price
entry_price = valuewhen(enterLong or enterShort, close, 0)

// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)

// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)



///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////

// use SL?
useSL = input(true, "Use stop Loss")
// Configure trail stop level with input
StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Will trigger the take profit trailing once reached
use_SL_Trigger = input(true, "Use stop Loss Trigger")
StopTrailTrigger   = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01


StopLossPriceTrigger = 0.0
StopLossPriceTrigger := if (use_SL_Trigger)
    if buy_trend
        entry_price * (1 + StopTrailTrigger) 
    else
        entry_price * (1 - StopTrailTrigger)
else
    -1


var SL_Trigger_Long_HIT = false
SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger
 ? true : SL_Trigger_Long_HIT[1]


var SL_Trigger_Short_HIT = false
SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger
 ? true : SL_Trigger_Short_HIT[1]


display_long_SL_trigger     = useSL and buy_trend  and use_SL_Trigger 
 and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1
display_short_SL_trigger    = useSL and sell_trend and use_SL_Trigger 
 and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1
display_SL_trigger          = display_long_SL_trigger or display_short_SL_trigger

plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0, 
 color=color.maroon, style=plot.style_circles, linewidth=3)


// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0

longStopPrice := if useSL and buy_trend
    stopValue = low * (1 - StopTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

shortStopPrice := if useSL and sell_trend
    stopValue = high * (1 + StopTrailPerc)
    min(stopValue, shortStopPrice[1])
else
    999999

//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS  ***//
//////////////////////////////////////////////////////////////////////////////////////////

cond_long_stop_loss_hit  = useSL and buy_trend and crossunder(low, longStopPrice[1]) 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)


// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice 
 and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
 ? longStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Long Trail Stop")

plot(series=useSL and sell_trend and high <= shortStopPrice 
 and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
 ? shortStopPrice : na,
 color=color.fuchsia, style=plot.style_cross,
 linewidth=2, title="Short Trail Stop")

close_long  = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit

// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)

//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)


if change_trend
    SL_Trigger_Long_HIT := false
    SL_Trigger_Short_HIT := false


مزید