وسائل لوڈ ہو رہے ہیں... لوڈنگ...

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

مصنف:چاؤ ژانگ، تاریخ: 2024-02-01 10:52:33
ٹیگز:

img

جائزہ

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

حکمت عملی کا اصول

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

تجارتی منطق مندرجہ ذیل ہے:

لانگ انٹری سگنل: جب قیمت چینل کی اوپری حد h سے زیادہ ہو اور چینل میں واپس گر جائے تو لانگ کھولیں

لانگ ایگزٹ سگنل: جب قیمت چینل کے وسط لائن سینٹر سے کم ہو (اسٹاپ نقصان) یا منافع لینے کی قیمت سے زیادہ ہو (منافع لیں) تو طویل بند کریں

مختصر انٹری سگنل: جب قیمت چینل کی نیچے کی حد l سے کم ہو اور چینل میں واپس آجائے تو مختصر کھولیں

شارٹ آؤٹ سگنل: شارٹ بند کریں جب قیمت چینل کے وسط لائن سینٹر سے زیادہ ہو (اسٹاپ نقصان) یا منافع لینے کی قیمت سے کم ہو (منافع لیں)

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

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

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

خطرے کا تجزیہ

اس حکمت عملی میں کچھ خطرات بھی ہیں:

  1. قیمت چینل کی ناقص پیرامیٹرز کی ترتیبات بہت زیادہ تجارتی تعدد یا کھوئے ہوئے تجارتی مواقع کا باعث بن سکتی ہیں
  2. سٹاپ نقصان کی قیمت بہت وسیع مقرر خطرے کی نمائش میں اضافہ ہو سکتا ہے
  3. اعلی اتار چڑھاؤ کے ادوار میں ٹریکنگ لے منافع جلدی شروع ہو سکتا ہے

ان خطرات کو پیرامیٹرز کو ایڈجسٹ کرنے اور دستی نگرانی کے ذریعے کم اور کنٹرول کیا جاسکتا ہے۔

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

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

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

نتیجہ

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


/*backtest
start: 2023-01-31 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's RiskDonchian Strategy", shorttitle = "RiskDonchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 20.0, minval = 1, title = "Take-profit, %")
tptype = input(defval = "2. Fix", options = ["1. None", "2. Fix", "3. Trailing"], title = "Take-profit type")
sltype = input(defval = "2. Center", options = ["1. None", "2. Center"], title = "Take-profit type")
risklong  = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for long, %")
riskshort = input(5.0, minval = 0.0, maxval = 99.9, title = "Risk size for short, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
showlabel = input(true, defval = true, title = "Show label")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2

//Take-profit
tpl = 0.0
tpl := tptype == "2. Fix" and strategy.position_size > 0 ? tpl[1] : h * (100 + tp) / 100

//Stop-loss
tps = 0.0
tps := tptype == "2. Fix" and strategy.position_size < 0 ? tps[1] : l * (100 - tp) / 100

//Lines
tplcol = showll and needlong and tptype != "1. None" ? color.lime : na
pclcol = showll and needlong ? color.blue : na
sllcol = showll and needlong and sltype != "1. None" ? color.red : na
tpscol = showll and needshort and tptype != "1. None" ? color.lime : na
pcscol = showll and needshort ? color.blue : na
slscol = showll and needshort and sltype != "1. None" ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tplcol, title = "TP Long")
plot(h, offset = offset, color = pclcol, title = "Channel High")
plot(center, offset = offset, color = sllcol, title = "SL Long")
plot(center, offset = offset, color = slscol, title = "SL Short")
plot(l, offset = offset, color = pcscol, title = "Channel Low")
plot(tps, offset = offset, color = tpscol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Lot size
risksizelong = -1 * risklong
risklonga = ((center / h) - 1) * 100
coeflong = abs(risksizelong / risklonga)
lotlong = (strategy.equity / close) * coeflong
risksizeshort = -1 * riskshort
riskshorta = ((center / l) - 1) * 100
coefshort = abs(risksizeshort / riskshorta)
lotshort = (strategy.equity / close) * coefshort

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center[1] and low <= center[1] ? 1 : mo[1]

if h > 0
    longlimit = tptype == "1. None" ? na : tpl
    longstop = sltype == "1. None" ? na : center
    strategy.entry("Long", strategy.long, lotlong, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = longlimit, stop = longstop)
    shortlimit = tptype == "1. None" ? na : tps
    shortstop = sltype == "1. None" ? na : center
    strategy.entry("Short", strategy.short, lotshort, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("Exit Short", "Short", limit = shortlimit, stop = shortstop)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showlabel

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)

مزید