سلائیڈنگ اسٹاپ کی حکمت عملی


تخلیق کی تاریخ: 2023-10-07 16:11:45 آخر میں ترمیم کریں: 2023-10-07 16:11:45
کاپی: 0 کلکس کی تعداد: 701
1
پر توجہ دیں
1617
پیروکار

جائزہ

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

اصول

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

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

smooth = kf[1] + dk * sqrt(gain / 10000 * 2)

تازہ ترین مساوات:

kf = smooth + velo

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

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

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

اس کے علاوہ،

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

فوائد

  1. کرمان فلٹرز کے ذریعے قیمتوں کا حقیقی وقت میں تعاقب کریں اور فوری طور پر جواب دیں۔

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

  3. آپ کو زیادہ سے زیادہ یا صرف زیادہ سے زیادہ / زیادہ سے زیادہ کرنے کے لئے لچکدار انتخاب ہے.

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

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

خطرات

  1. کرمان فلٹر پیرامیٹرز کی غلط ترتیب سے ٹریکنگ میں عدم استحکام پیدا ہوسکتا ہے۔

  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")