اس حکمت عملی میں کرمان فلٹر کا استعمال کیا جاتا ہے جس میں قیمتوں کا سراغ لگایا جاتا ہے اور اسٹاپ لائن کا استعمال کرتے ہوئے اسٹاپ پوائنٹس کو متحرک طور پر ایڈجسٹ کیا جاتا ہے ، جس سے سلائڈنگ اسٹاپ ہوتا ہے۔
یہ حکمت عملی کرمن فلٹر کا استعمال کرتی ہے جو قیمتوں کو حقیقی وقت میں ٹریک کرتی ہے۔ کرمن فلٹر میں دو مساوات شامل ہیں:
پیشن گوئی مساوات:
smooth = kf[1] + dk * sqrt(gain / 10000 * 2)
تازہ ترین مساوات:
kf = smooth + velo
ان میں سے ، ڈی کے کی پیشن گوئی کی غلطی ہے ، گین کیرمین کا فائدہ ہے ، اور حساسیت کو ٹریک کرنے کا فیصلہ ہے۔
اس کے علاوہ، حکمت عملی منافع کو لاک کرنے کے لئے سلائڈنگ سٹاپ لائن کا استعمال کرتی ہے۔ ابتدائی سٹاپ فاصلہ سٹاپ نقصان فی صد سیٹ کی قیمت ہے، جیسے 2٪۔
اگر قیمت میں اضافہ ہوتا ہے تو ، اسٹاپ لائن بھی آہستہ آہستہ اوپر کی طرف بڑھتی ہے اور کارمین لائن کے قریب پہنچ جاتی ہے ، قدم کی لمبائی نیچے کی طرف ہوتی ہے ، جیسے 0.5٪ اگر قیمت میں کمی ہوتی ہے تو ، اسٹاپ کو دوبارہ کھولیں اور ابتدائی اسٹاپ کا فاصلہ طے کریں۔
اس کے علاوہ،
اس طرح ، حکمت عملی کو بہتر خطرے کے انتظام کے ساتھ ، رجحانات کے مطابق منافع کو آہستہ آہستہ لاک کیا جاسکتا ہے۔
کرمان فلٹرز کے ذریعے قیمتوں کا حقیقی وقت میں تعاقب کریں اور فوری طور پر جواب دیں۔
سلائیڈنگ سٹاپ نقصان لائن کا استعمال کرتے ہوئے منافع کو لاک کرنا ، خطرے کا انتظام کرنا اچھا ہے۔ سٹاپ نقصان کی فاصلہ اپنی مرضی کے مطابق ہے۔
آپ کو زیادہ سے زیادہ یا صرف زیادہ سے زیادہ / زیادہ سے زیادہ کرنے کے لئے لچکدار انتخاب ہے.
رجحان کے مطابق فعال یا محافظ اسٹاپ نقصان ہوسکتا ہے۔
سٹاپ نقصان کی ضرورت کے مطابق لچکدار سیٹ اپ
کرمان فلٹر پیرامیٹرز کی غلط ترتیب سے ٹریکنگ میں عدم استحکام پیدا ہوسکتا ہے۔
سلائڈ پوائنٹس کی وجہ سے اسٹاپ نقصان کا نقطہ پہلے سے متحرک ہوسکتا ہے۔ اسٹاپ نقصان کی فاصلے کو مناسب طریقے سے نرمی دی جاسکتی ہے۔
مضبوط رجحانات کی مارکیٹ میں سلائڈنگ سٹاپ نقصان کی حکمت عملی کو اپنانے کے لئے مشورہ نہیں دیا جاتا ہے، رجحانات کی پیروی کی جانی چاہئے.
زلزلے کی مارکیٹ میں اسٹاپ نقصان کا نقطہ اکثر ٹرگر ہوسکتا ہے۔ اسٹاپ نقصان کی فاصلے کو مناسب طریقے سے نرمی دی جاسکتی ہے ، یا سلائڈنگ اسٹاپ کا استعمال نہیں کیا جاسکتا ہے۔
اس کے علاوہ، آپ کو زیادہ سے زیادہ اشارے متعارف کرانے کے لئے رجحانات کی سمت کا تعین کرنے کے لئے، پوزیشن کھولنے کے لئے وقت کو بہتر بنانے کے لئے.
اسٹاپ نقصان کی لائن کو مارکیٹ میں اتار چڑھاو کے مطابق ایڈجسٹ کیا جاسکتا ہے۔
مشین لرننگ ٹکنالوجی کی تربیت کے ساتھ مل کر زیادہ سے زیادہ نقصان کے پیرامیٹرز۔
مزید خطرے کے اشارے کے ساتھ ، پوزیشن مینجمنٹ کو متحرک طور پر ایڈجسٹ کیا جاسکتا ہے۔
سلائیڈنگ اسٹاپ حکمت عملی ایک قابل اعتماد اور آسانی سے بہتر بنانے والی حکمت عملی ہے ، جس میں کرمان فلٹر کا استعمال کیا جاتا ہے تاکہ قیمت میں ہونے والی تبدیلیوں کو ٹریک کیا جاسکے ، اور سلائیڈنگ اسٹاپ لائن کا استعمال منافع کو مقفل کرنے کے لئے کیا جاسکتا ہے ، جبکہ منافع کو یقینی بناتے ہوئے خطرے کو بھی کنٹرول کیا جاسکتا ہے۔ اس کو رجحانات کے فیصلے اور متحرک پوزیشن مینجمنٹ ٹکنالوجی کے ساتھ جوڑ کر ، اس سے بہتر حکمت عملی کا اثر حاصل کیا جاسکتا ہے۔
/*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")