سپر ٹرینڈ اشارے اور ایکویٹی وکر ٹریڈنگ پر مبنی مقداری ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-15 11:41:53
ٹیگز:

img

جائزہ

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

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

اس حکمت عملی میں بنیادی طور پر دو حصے ہیں:

  1. سپر ٹرینڈ اشارے
  2. ایکویٹی وکر ٹریڈنگ

سپر ٹرینڈ اشارے کا حساب کتاب کا فارمولا یہ ہے:

اوپری بینڈ = ماخذ قیمت - اے ٹی آر ضرب * اے ٹی آر کم بینڈ = ماخذ قیمت + ATR ضرب * ATR

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

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

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

فوائد

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

  1. یہ سپر ٹرینڈ اشارے کے خطرات کو مؤثر طریقے سے روک سکتا ہے۔ سپر ٹرینڈ اشارے خود کو نقصانات کو مؤثر طریقے سے روک نہیں سکتا ہے۔ ایکویٹی وکر ٹریڈنگ اس کمی کی تلافی کرتی ہے۔

  2. جب تجارت ناقص ہو جاتی ہے، تو وہ بہت زیادہ نقصانات سے بچنے کے لیے تجارت کو روک دیتا ہے۔ ہم مارکیٹ کی بحالی کے بعد تجارت دوبارہ شروع کر سکتے ہیں۔

  3. یہ دستی مداخلت کے بغیر پوزیشنوں کا خود بخود انتظام کرسکتا ہے۔ جب ایکویٹی وکر چلتی اوسط سے نیچے آجاتا ہے تو ٹریڈنگ خود بخود روک دی جاتی ہے ، اور جب ایکویٹی وکر اس سے اوپر لوٹ جاتا ہے تو دوبارہ شروع ہوجاتی ہے۔

خطرات

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

  1. پیرامیٹرز کی غلط ترتیبات ایکویٹی وکر ٹریڈنگ کو غیر موثر بنا سکتی ہیں۔ مناسب حرکت پذیر اوسط ادوار کو منتخب کرنے کی ضرورت ہے۔

  2. جب مارکیٹ کے رجحان میں تبدیلی آتی ہے تو یہ پوزیشنوں کو فوری طور پر ایڈجسٹ کرنے میں ناکام رہ سکتا ہے۔ اس سے کچھ نقصانات ہوسکتے ہیں۔

  3. اس کے لیے یہ ممکن ہے کہ وہ اچھے تجارتی مواقع سے محروم ہو جائے جب تک کہ اس کی ایکویٹی وکر کی واپسی کا انتظار نہ ہو۔

انسداد اقدامات:

  1. پیرامیٹرز کو بہتر بنائیں اور بہترین حرکت پذیر اوسط مدت کا انتخاب کریں۔

  2. رجحان کا اندازہ کرنے اور اس کے مطابق پوزیشنوں کو ایڈجسٹ کرنے کے لئے دیگر اشارے شامل کریں.

  3. تجارت معطل کرنے کی مدت کو کم کرنا تاکہ موقعوں کو ضائع کرنے کا امکان کم ہو۔

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

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

  1. بہترین ATR مدت اور ضارب تلاش کرنے کے لئے مختلف پیرامیٹر مجموعے کی جانچ کریں۔

  2. دوسرے قسم کے چلتے ہوئے اوسط کی کوشش کریں، جیسے ایکسپونینشل چلتے ہوئے اوسط، ہل چلتے ہوئے اوسط وغیرہ.

  3. مارکیٹ کے رجحان کا تعین کرنے کے لئے دیگر اشارے شامل کریں، اور رجحان کی تبدیلیوں پر پوزیشنوں کو ایڈجسٹ کریں.

  4. بہترین توازن تلاش کرنے کے لئے اوسط مدت کو بہتر بنائیں۔ بہت لمبی مدت مواقع سے محروم ہوسکتی ہے ، جبکہ بہت کم مدت میں بہت کثرت سے توقف ہوسکتا ہے۔

  5. تجارت کو روکنے کے لئے حالات کو بہتر بنائیں، جیسے معطلی سے پہلے سٹاپ نقصان کی حد مقرر کرنا۔

نتیجہ

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


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

//@version=5
strategy('Supertrend & Equity curve with EMA', overlay=false, format=format.price, precision=2, initial_capital=100000)

eqlen = input.int(25, "EQ EMA len", group = "New Equity Curve Settings")
shEQandMA = input.bool(true, "Show Original Equity Curve and MA")
shEQfilt = input.bool(true, "Show Filtered Equity Curve by MA")

Periods = input(title='ATR Period', defval=10, group = "SuperTrend Settings")
src = input(hl2, title='Source', group = "SuperTrend Settings")
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0, group = "SuperTrend Settings")
changeATR = input(title='Change ATR Calculation Method ?', defval=true, group = "SuperTrend Settings")

//SuperTrend Code
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Strategy main code
buySignal = trend == 1 and trend[1] == -1
sellSignal = trend == -1 and trend[1] == 1
if buySignal
    strategy.entry('Long', strategy.long)
if sellSignal
    strategy.entry('Short', strategy.short)



//Equity Curve calcs
eq = strategy.netprofit
ch = ta.change(eq)
neq = ch != 0 ? eq : na
mova = ta.ema(neq,eqlen)

// New Equity Curve
var float neweq = 0
var int ttrades = 0
var int wintrades = 0
var int losetrades = 0

switch
    strategy.netprofit == strategy.netprofit[1]  => na
    strategy.netprofit < mova and strategy.netprofit[1] > mova  => neweq := neweq + ch
    strategy.netprofit < mova and strategy.netprofit[1] < mova => na
    strategy.netprofit > mova and strategy.netprofit[1] > mova => neweq := neweq + ch

newch = ta.change(neweq)
switch
    newch == 0 => na
    newch > 0 => 
        wintrades := wintrades +1
        ttrades := ttrades +1
    newch < 0 =>
        losetrades := losetrades +1
        ttrades := ttrades +1

//plot(eq, linewidth = 2)
//plot(mova, color=color.red)
//plot(neweq, color= color.green, linewidth = 3)


//Table 
var testTable = table.new(position = position.top_right, columns = 5, rows = 10, bgcolor = color.green, border_width = 1)
table.cell(table_id = testTable, column = 0, row = 0, text = "Strategy: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 1, row = 0, text = "Original: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 2, row = 0, text = "Equity Curve EMA: ", bgcolor=color.white)     

table.cell(table_id = testTable, column = 0, row = 1, text = "Total Trades: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 0, row = 2, text = "Win Trades: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 0, row = 3, text = "Lose Trades: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 0, row = 4, text = "Win Rate: ", bgcolor=color.white)     
table.cell(table_id = testTable, column = 0, row = 5, text = "Net Profit: ", bgcolor=color.white)     

//Equity Curve EMA stat
table.cell(table_id = testTable, column = 2, row = 1, text = str.tostring(ttrades), bgcolor=color.white)     
table.cell(table_id = testTable, column = 2, row = 2, text = str.tostring(wintrades), bgcolor=color.white)
table.cell(table_id = testTable, column = 2, row = 3, text = str.tostring(losetrades), bgcolor=color.white)
table.cell(table_id = testTable, column = 2, row = 4, text = str.tostring(math.round(100*wintrades/ttrades,2)), bgcolor=color.white)
table.cell(table_id = testTable, column = 2, row = 5, text = str.tostring(math.round(neweq)), bgcolor=color.white)

//Original Strategy stat
// table.cell(table_id = testTable, column = 1, row = 1, text = str.tostring(strategy.closedtrades), bgcolor=color.white)     
// table.cell(table_id = testTable, column = 1, row = 2, text = str.tostring(strategy.wintrades), bgcolor=color.white)
// table.cell(table_id = testTable, column = 1, row = 3, text = str.tostring(strategy.losstrades), bgcolor=color.white)
// table.cell(table_id = testTable, column = 1, row = 4, text = str.tostring(math.round(100*strategy.wintrades/strategy.closedtrades,2)), bgcolor=color.white)
// table.cell(table_id = testTable, column = 1, row = 5, text = str.tostring(math.round(strategy.netprofit)), bgcolor=color.white)




//New Equity curve
var newcurve = array.new_float(0)
var int ida = 0
var bool printEQ = false
if newch !=0 
    array.push(newcurve, neweq)
if bar_index > last_bar_index - array.size(newcurve) - 1 - 20  and array.size(newcurve) > 20 
    printEQ := true
else
    printEQ := false

plot(printEQ and ida < strategy.closedtrades and shEQfilt ? array.get(newcurve, ida) : na, color=color.green, linewidth = 2)

if printEQ
    ida := ida + 1
if ida >= array.size(newcurve) and printEQ
    ida := array.size(newcurve) -1



//Original Equity curve
var newcurve2 = array.new_float(0)
var int ida2 = 0
var bool printEQ2 = false
if ch !=0 
    array.push(newcurve2, eq)
if bar_index > last_bar_index - array.size(newcurve2) - 1 - 20  and array.size(newcurve2) > 20 
    printEQ2 := true
else
    printEQ2 := false

plot(printEQ2 and ida2 < strategy.closedtrades and shEQandMA  ? array.get(newcurve2, ida2) : na, color=color.blue, linewidth = 2)

if printEQ2
    ida2 := ida2 + 1
if ida2 >= array.size(newcurve2) and printEQ2
    ida2 := array.size(newcurve2) -1



//Moving Average Array
var marray = array.new_float(0)
if ch
    array.push(marray, mova)

plot(printEQ2 and  array.size(marray) > 40 and shEQandMA ? array.get(marray, ida2-1) : na, color=color.red, linewidth = 1)

hline(0,"0 line", color=color.black, linestyle = hline.style_dotted)


if (last_bar_index-1) and array.size(newcurve2) > 20 and array.size(newcurve) > 20
    l = label.new(bar_index+2, array.get(newcurve2, array.size(newcurve2)-1), "Original Equity Curve", color=color.rgb(33, 149, 243, 85), textcolor = color.black, style = label.style_label_left)
    label.delete(l[1])
    f = label.new(bar_index+2, array.get(newcurve, array.size(newcurve)-1), "Filtered Equity Curve", color=color.rgb(69, 238, 97, 85), textcolor = color.black, style = label.style_label_left)
    label.delete(f[1])

مزید