لوفٹ اسٹاپ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-07 16:11:45
ٹیگز:

جائزہ

یہ حکمت عملی قیمتوں کو ٹریک کرنے کے لئے ایک کالمین فلٹر کا استعمال کرتی ہے اور سلائڈنگ اسٹاپ نقصان کو حاصل کرنے کے لئے اسٹاپ نقصان لائن کے ساتھ اسٹاپ نقصان نقطہ کو متحرک طور پر ایڈجسٹ کرتی ہے۔

اصول

یہ حکمت عملی حقیقی وقت میں قیمتوں کو ٹریک کرنے کے لئے ایک کالمین فلٹر کا استعمال کرتی ہے۔ کالمین فلٹر میں دو مساوات شامل ہیں:

پیشن گوئی مساوات:

ہموار = kf[1] + dk * sqrt(فائدہ / 10000 * 2)

اپ ڈیٹ مساوات:

kf = ہموار + velo

جہاں dk پیشن گوئی کی غلطی ہے ، فائدہ کیلمان فائدہ ہے جو ٹریکنگ حساسیت کا تعین کرتا ہے۔

اس کے علاوہ ، حکمت عملی منافع میں مقفل کرنے کے لئے سلائیڈنگ اسٹاپ نقصان لائن کا استعمال کرتی ہے۔ ابتدائی اسٹاپ نقصان کا فاصلہ اسٹاپ نقصان فیصد کی ترتیب ہے ، جیسے 2٪۔

جب لمبا ہوتا ہے تو ، اگر قیمت بڑھتی ہے تو ، اسٹاپ نقصان لائن بھی آہستہ آہستہ کالمین لائن کی طرف بڑھتی ہے ، جس میں ڈاؤن اسٹیپ کا ایک قدم سائز ہوتا ہے ، جیسے 0.5٪۔ اگر قیمت اسٹاپ نقصان پر گر جاتی ہے تو ، پوزیشن کو دوبارہ کھولیں اور ابتدائی اسٹاپ نقصان کا فاصلہ طے کریں۔

مختصر اسی طرح ہے.

اس طرح، حکمت عملی اچھی طرح سے خطرے کے انتظام کے ساتھ، رجحان کے مطابق، منافع میں آہستہ آہستہ مقفل کر سکتے ہیں.

فوائد

  1. فوری جواب کے ساتھ حقیقی وقت میں قیمتوں کو ٹریک کرنے کے لئے Kalman فلٹر کا استعمال کریں.

  2. سلائیڈنگ سٹاپ نقصان لائن کے ساتھ منافع میں مقفل، اچھا خطرے کے انتظام کو حاصل کرنے. اپنی مرضی کے مطابق سٹاپ نقصان فاصلے.

  3. لچکدار انتخاب طویل / مختصر یا صرف طویل / مختصر.

  4. رجحان کی بنیاد پر فعال یا محتاط سٹاپ نقصان۔

  5. لچکدار سیٹ کریں منافع لیں اور ضرورت کے مطابق نقصان کو روکیں۔

خطرات

  1. Kalman فلٹر کی غلط پیرامیٹر کی ترتیبات غیر مستحکم ٹریکنگ کی قیادت کر سکتے ہیں.

  2. سلائڈنگ سٹاپ نقصان نقطہ کو قبل از وقت متحرک کر سکتا ہے. مناسب طریقے سے سٹاپ نقصان کے فاصلے کو بڑھانے.

  3. سلائیڈنگ سٹاپ نقصان مضبوط رجحان مارکیٹوں کے لئے موزوں نہیں ہے، رجحان کی پیروی کرنا چاہئے.

  4. سٹاپ نقصان کی حد میں مارکیٹوں میں اکثر ٹرگر ہوسکتا ہے۔ اسٹاپ نقصان کا فاصلہ بڑھانا یا سلائیڈنگ اسٹاپ نقصان کا استعمال نہ کریں۔

اصلاح

  1. داخلہ کے وقت کو بہتر بنانے کے لئے مزید اشارے شامل کریں.

  2. سٹاپ نقصان لائن کی نقل و حرکت کے مرحلے کو مارکیٹ کی اتار چڑھاؤ کی بنیاد پر ایڈجسٹ کریں۔

  3. بہترین سٹاپ نقصان پیرامیٹرز کو تربیت کرنے کے لئے مشین سیکھنے کا استعمال کریں.

  4. متحرک طور پر پوزیشن سائزنگ کو ایڈجسٹ کرنے کے لئے مزید خطرے کے اشارے شامل کریں۔

نتیجہ

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


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BigCoinHunter

//@version=5
// strategy(title='Loft Strategy V1', overlay=true, 
//      pyramiding=0, default_qty_type=strategy.fixed, 
//      default_qty_value=100, initial_capital=100000, 
//      currency=currency.USD, commission_value=0.05, 
//      commission_type=strategy.commission.percent, 
//      process_orders_on_close=true)

//-------------- fetch user inputs ------------------
gain = input.float(title="Kalman Gain:", defval=1.0, minval=1.0, maxval=5000.0, step=100.0)
src = input(defval=close, title='Source:')

stopPercentMax = input.float(title='Beginning Approach(%):', defval=2.0, minval=0.1, maxval=30.0, step=0.1)
stopPercentMin = input.float(title='Final Approach(%):    ', defval=0.5, minval=0.1, maxval=30.0, step=0.1)
downStep = input.float(title='Approach Decrease Step:', defval=0.005, minval=0.0, maxval = 5, step=0.005)

tp = input.float(title="Take Profit:", defval=1.5, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss:  ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01

longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")

//---------- backtest range setup ------------
fromDay   = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear  = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay     = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth   = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear    = input.int(defval = 2022, title = "To Year", minval = 2010)


//------------ time interval setup -----------
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish    = timestamp(toYear, toMonth, toDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

//------- define the global variables ------
enterLongComment = "ENTER LONG"
exitLongComment = "EXIT LONG"

enterShortComment = "ENTER SHORT"
exitShortComment = "EXIT SHORT"

longTPSL = "Long TP/SL"
longTP = "Long TP"
longSL = "Long SL"
shortTPSL = "Short TP/SL"
shortTP = "Short TP"
shortSL = "Short SL"

var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
var float kf = 0.0
var float velo = 0.0

//------ kalman filter calculation --------
dk = src - nz(kf[1], src)
smooth = nz(kf[1], src) + dk * math.sqrt(gain / 10000 * 2)
velo := nz(velo[1], 0) + gain / 10000 * dk
kf := smooth + velo

//--------- calculate the loft stopLoss line ---------
var stopPercent = stopPercentMax
var stopLoss = kf - kf * (stopPercent /100)

if long == true
    stopLoss := kf - (kf * (stopPercent / 100))
    
    if long[1] == true and stopLoss <= stopLoss[1]
        stopLoss := stopLoss[1]
    else if (long[1] == true)
        stopPercent := stopPercent - downStep
        if(stopPercent < stopPercentMin)
            stopPercent := stopPercentMin
    
    if(kf < stopLoss)
        long := false
        stopPercent := stopPercentMax
        stopLoss := kf + (kf * (stopPercent / 100))
        
else
    stopLoss := kf + (kf * (stopPercent / 100))
    
    if long[1] == false and stopLoss >= stopLoss[1]
        stopLoss := stopLoss[1]
    else if(long[1] == false)
        stopPercent := stopPercent - downStep
        if(stopPercent < stopPercentMin)
            stopPercent := stopPercentMin
            
    if(kf > stopLoss)
        long := true
        stopPercent := stopPercentMax
        stopLoss := kf - (kf * (stopPercent / 100))
        
//--------- calculate the input/output points -----------
longProfitPrice  = strategy.position_avg_price * (1 + tp)     // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl)        // sl -> stop loss percentage

shortProfitPrice  = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)

//------------------- determine buy and sell points ---------------------
buySignall = window() and long  and (not stoppedOutLong)
sellSignall = window() and (not long)  and (not stoppedOutShort)

//---------- execute the strategy -----------------
if(longEntry and shortEntry)
    if long 
        strategy.entry("LONG", strategy.long, when = buySignall, comment = enterLongComment)
        stoppedOutLong := true
        stoppedOutShort := false
    else 
        strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
        stoppedOutLong  := false
        stoppedOutShort := true

else if(longEntry)
    strategy.entry("LONG", strategy.long,  when = buySignall, comment = enterLongComment)
    strategy.close("LONG", when = sellSignall, comment = exitLongComment)
    if long 
        stoppedOutLong := true
    else
        stoppedOutLong  := false

else if(shortEntry)
    strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
    strategy.close("SHORT", when = buySignall, comment = exitShortComment)
    if not long
        stoppedOutShort := true
    else
        stoppedOutShort := false
    

//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment = longTPSL)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment = shortTPSL)

else if(tp>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG", limit=longProfitPrice, comment = longTP)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT", limit=shortProfitPrice, comment = shortTP)
        
else if(sl>0.0)
    if ( strategy.position_size > 0 )
        strategy.exit(id="LONG",  stop=longStopPrice, comment = longSL)

    else if ( strategy.position_size < 0 )
        strategy.exit(id="SHORT",  stop=shortStopPrice, comment = shortSL)
        
//------------- plot charts ---------------------
lineColor1 = long ? color.green : color.red
lineColor2 = long ? color.aqua : color.fuchsia

kalmanLine = plot(kf, color=lineColor1, linewidth=3, title = "Kalman Filter")
stopLine = plot(stopLoss, color=lineColor2, linewidth=2, title = "Stop Loss Line")






مزید