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

سائز بلاک حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-06 09:20:34
ٹیگز:

img

جائزہ

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

اصول

حساب کتاب قیمت کی نقل و حرکت کی فیصد یا ٹِک انحراف پر مبنی ہے (جو پیرامیٹر Deviation میں اشارہ کیا گیا ہے) ، جو چارٹ پر صفوں کی شکل میں دکھایا گیا ہے۔

یہ صف بنیادی وسط لائن، اوپری اور نچلی حدود پر مشتمل ہے:

  • بیس مڈل لائن پچھلی صف کی اوپری یا نیچے کی حدود کے برابر ہے (اگر قیمت ایک وقت کے وقفے میں تیزی سے بدلتی ہے تو ، موجودہ صف کی بیس مڈل لائن پچھلی صف کی اوپری حد سے زیادہ یا پچھلی صف کی نیچے کی حد سے برابر تعداد میں انحراف پر منحصر ہے) ۔ حساب کتاب کے آغاز میں ، بیس مڈل لائن پہلی صف کی ابتدائی قیمت کے برابر ہے۔

  • مقدار پیرامیٹر قیمت کی نقل و حرکت کی سمت کے لحاظ سے اوپری یا نچلی حدود کے لئے انحراف کا تعین کرتا ہے ، اور یو ٹرن پیرامیٹر قیمت کی نقل و حرکت کی سمت کو تبدیل کرنے کے لئے انحراف کا تعین کرتا ہے۔

نئی صف بنانے کا اصول:

  • اگر بند ≥ اوپری حد اور بند > کھولیں، اوپری حد آہستہ آہستہ اوپر منتقل ہو جائے گا، اور نچلی حد بھی اوپر منتقل ہو جائے گا لیکن کم.

  • اگر نچلی حد ≤ نچلی حد اور بند < کھلی ہے تو ، نچلی حد آہستہ آہستہ نیچے کی طرف منتقل ہوگی ، اور اوپری حد بھی نیچے کی طرف منتقل ہوگی لیکن کم۔

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

فوائد

  • قیمتوں میں تبدیلی کے رجحانات کو تصور کریں اور حمایت اور مزاحمت کی واضح طور پر شناخت کریں.

  • قطری لائنیں واضح طور پر بھاگنے کی طاقت اور واپس لینے کی حد کو ظاہر کرتی ہیں۔

  • مختلف طاقت کے رجحانات کی نشاندہی کرنے کے لئے ڈایگونال لائنوں کی ڈھلوان کو ضرورت کے مطابق ایڈجسٹ کیا جاسکتا ہے۔

  • بھاگنے کے لئے نسبتا بڑی حمایت اور مزاحمت تلاش کر سکتے ہیں.

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

خطرات

  • کراس لائنیں قیمتوں کی اگلی حرکتوں کی مکمل طور پر درست پیش گوئی نہیں کرسکتی ہیں۔

  • رجحانات میں اختلافات کی نگرانی کرنے کی ضرورت ہے جہاں قطری لائنیں اصل قیمتوں سے مختلف ہوسکتی ہیں.

  • الگ تھلگ حکمت عملی کے طور پر استعمال نہیں کیا جا سکتا، اہم رجحان کا تعین کرنے کے لئے دیگر اشارے کو شامل کرنے کی ضرورت ہے.

  • پیرامیٹرز کی غلط ایڈجسٹمنٹ سے زیادہ کثرت سے تجارت ہوسکتی ہے۔

  • رجحانات کے پیچھے اندھے پن کے بجائے رجحانات کے دوران ممکنہ تبدیلیوں سے خبردار رہنے کی ضرورت ہے۔

پوزیشن سائزنگ کو اعتدال پسندی سے کم کر سکتے ہیں اور اہم رجحانات کے اندر دیگر اشارے کو معاون فیصلے کے طور پر حوالہ دیتے ہیں.

اصلاح

  • پوزیشن مینجمنٹ ماڈیولز کو مختلف رجحانات کے مراحل میں پوزیشنوں کو متحرک طور پر ایڈجسٹ کرنے کے لئے شامل کر سکتے ہیں.

  • جب اتار چڑھاؤ بڑھتا ہے تو پوزیشنوں کو کم کرنے کے لئے اتار چڑھاؤ کے اشارے شامل کرسکتے ہیں۔

  • ایک ہی نقصان کو کنٹرول کرنے کے لئے ڈراؤنڈ فیصد کی بنیاد پر سٹاپ نقصان مقرر کر سکتے ہیں.

  • جب قیمتوں میں اختلافات ہوتے ہیں تو ٹریڈنگ کو روکنے کے لئے فلٹرز شامل کرسکتے ہیں۔

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

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

خلاصہ

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


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

//@version=5
// **********************************************************************************
// This code is invented and written by @StCogitans.
// The idea presented in this code and the rights to this code belong to @StCogitans.
// © https://www.tradingview.com/u/StCogitans
//
// Description.
// Sizeblock - a price change strategy in the form of diagonal rows.
// **********************************************************************************

// STRATEGY
string NAME        = 'Sizeblock'
string ACRONYM     = 'SB'
bool OVERLAY       = true
int PYRAMIDING     = 0
string QTY_TYPE    = strategy.percent_of_equity
float QTY_VALUE    = 100
float CAPITAL      = 100
string COM_TYPE    = strategy.commission.percent
float COM_VALUE    = 0.1
bool ON_CLOSE      = false
bool BAR_MAGNIFIER = false
bool OHLC          = true
strategy(NAME, ACRONYM, OVERLAY, pyramiding=PYRAMIDING, default_qty_type=QTY_TYPE, default_qty_value=QTY_VALUE, initial_capital=CAPITAL, commission_type=COM_TYPE, commission_value=COM_VALUE, process_orders_on_close=ON_CLOSE, use_bar_magnifier=BAR_MAGNIFIER, fill_orders_on_standard_ohlc=OHLC)

// ARGUMENTS
// Datetime
DTstart  = input(timestamp("01 Jan 2000 00:00 +0000"), 'Start time', group='Datetime')
DTfinish = input(timestamp("01 Jan 2080 23:59 +0000"), 'Finish time', group='Datetime')
DTperiod = true

// Main
dev_source = input.string('Close', title='Source', options=["Close", "HighLow"], tooltip='Price data for settlement.', group='Main')
dev_type   = input.string('Percentage', title='Deviation', options=['Percentage', 'Ticks'], tooltip='The type of deviation to calculate.', group='Main')
dev_value  = input.float(1, title='Quantity', minval=0.001, step=0.01, tooltip='Quantity to be calculated.', group='Main')
dev_back   = input.float(2, title='U-turn', minval=0.001, step=0.01, tooltip='Quantity for reversal.', group='Main')
mode       = input.string('Limit', title='Positions', options=['Limit', 'Market'], tooltip='Limit or market orders.', group='Main')
direct     = input.string('All', title='Direction', options=['All', 'Buy', 'Sell'], tooltip='The type of positions to be opened.', group='Main')
swapping   = input.bool(false, title='Swapping', tooltip='Swap points to open a new position.', group='Main')

// CALCULATION SYSTEM
Assembling(s, t, v, vb) =>

    float a = open
    float b = close
    float c = s == "HighLow" ? math.round_to_mintick(high) : math.round_to_mintick(b)
    float d = s == "HighLow" ? math.round_to_mintick(low) : math.round_to_mintick(b)

    float x = math.round_to_mintick(a)
    x := nz(x[1], x)

    float _v = t == "Ticks" ? syminfo.mintick * v : v
    float _vb = t == "Ticks" ? syminfo.mintick * vb : vb

    float h = t == "Ticks" ? math.round_to_mintick(x + _v) : math.round_to_mintick(x * (1 + _v / 100))
    float l = t == "Ticks" ? math.round_to_mintick(x - _v) : math.round_to_mintick(x * (1 - _v / 100))
    h := nz(h[1], h)
    l := nz(l[1], l)

    if t == "Ticks"
    
        if c >= h and b > a
            while c >= h
            
                x := h
                h := math.round_to_mintick(h + _v)
                l := math.round_to_mintick(x - _vb)
        
        if d <= l and b < a
            while d <= l
            
                x := l
                l := math.round_to_mintick(l - _v)
                h := math.round_to_mintick(x + _vb)

    else if t == "Percentage"
    
        if c >= h and b > a
            while c >= h
        
                x := h
                h := math.round_to_mintick(h * (1 + _v / 100))
                l := math.round_to_mintick(x * (1 - _vb / 100))

        if d <= l and b < a
            while d <= l
        
                x := l
                l := math.round_to_mintick(l * (1 - _v / 100))
                h := math.round_to_mintick(x * (1 + _vb / 100))

    [x, h, l]

[lx, lh, ll] = Assembling(dev_source, dev_type, dev_value, dev_back)

// PLOT
// Lines
plot_up   = plot(lh, color=color.new(color.green, 50), style=plot.style_line, linewidth=1)
plot_main = plot(lx, color=color.new(color.silver, 50), style=plot.style_line, linewidth=1)
plot_down = plot(ll, color=color.new(color.red, 50), style=plot.style_line, linewidth=1)

// Areas
fill(plot_up, plot_main, lh, lx, color.new(color.teal, 80), color.new(color.teal, 80))
fill(plot_main, plot_down, lx, ll, color.new(color.maroon, 80), color.new(color.maroon, 80))

// TRADING
// Alert variables
int Action = -1
int PosType = -1
int OrderType = -1
float Price = -1.0

// Direction variables
bool ifBuy = direct == "All" or direct == "Buy" ? true : false
bool ifSell = direct == "All" or direct == "Sell" ? true : false

// Market entries
if (strategy.closedtrades + strategy.opentrades == 0 or mode == "Market") and DTperiod
    if ((swapping and lx < nz(lx[1], lx)) or (not swapping and lx > nz(lx[1], lx))) and ifBuy
        Action := 1
        PosType := 1
        OrderType := 1
        Price := math.round_to_mintick(close)
        strategy.entry('Long', strategy.long)
    if ((swapping and lx > nz(lx[1], lx)) or (not swapping and lx < nz(lx[1], lx))) and ifSell
        Action := 2
        PosType := 2
        OrderType := 1
        Price := math.round_to_mintick(close)
        strategy.entry('Short', strategy.short)

// Closing positions by market
if DTperiod and mode == "Market"
    if direct == "Buy" and strategy.position_size > 0
        if swapping and lx > nz(lx[1], lx)
            Action := 2
            PosType := 3
            OrderType := 1
            Price := math.round_to_mintick(close)
            strategy.close('Long', comment='Close')
        if not swapping and lx < nz(lx[1], lx)
            Action := 2
            PosType := 3
            OrderType := 1
            Price := math.round_to_mintick(close)
            strategy.close('Long', comment='Close')
    if direct == "Sell" and strategy.position_size < 0
        if swapping and lx < nz(lx[1], lx)
            Action := 1
            PosType := 3
            OrderType := 1
            Price := math.round_to_mintick(close)
            strategy.close('Short', comment='Close')
        if not swapping and lx > nz(lx[1], lx)
            Action := 1
            PosType := 3
            OrderType := 1
            Price := math.round_to_mintick(close)
            strategy.close('Short', comment='Close')

// Limit entries and exits
if swapping and DTperiod and mode == "Limit"
    if strategy.position_size < 0
        Action := 1
        PosType := 1
        OrderType := 2
        Price := ll
        if ifBuy
            strategy.entry('Long', strategy.long, limit=ll)
        else
            PosType := 3
            strategy.exit('Exit', limit=ll)
    if strategy.position_size > 0
        Action := 2
        PosType := 2
        OrderType := 2
        Price := lh
        if ifSell
            strategy.entry('Short', strategy.short, limit=lh)
        else
            PosType := 3
            strategy.exit('Exit', limit=lh)
    if strategy.closedtrades + strategy.opentrades > 0 and strategy.position_size == 0
        if ifBuy
            Action := 1
            PosType := 1
            OrderType := 2
            Price := ll
            strategy.entry('Long', strategy.long, limit=ll)
        if ifSell
            Action := 2
            PosType := 2
            OrderType := 2
            Price := lh
            strategy.entry('Short', strategy.short, limit=lh)
if not swapping and DTperiod and mode == "Limit"
    if strategy.position_size < 0
        Action := 1
        PosType := 1
        OrderType := 2
        Price := lh
        if ifBuy
            strategy.entry('Long', strategy.long, stop=lh)
        else
            PosType := 3
            strategy.exit('Exit', stop=lh)
    if strategy.position_size > 0
        Action := 2
        PosType := 2
        OrderType := 2
        Price := ll
        if ifSell
            strategy.entry('Short', strategy.short, stop=ll)
        else
            PosType := 3
            strategy.exit('Exit', stop=ll)
    if strategy.closedtrades + strategy.opentrades > 0 and strategy.position_size == 0
        if ifBuy
            Action := 1
            PosType := 1
            OrderType := 2
            Price := lh
            strategy.entry('Long', strategy.long, stop=lh)
        if ifSell
            Action := 2
            PosType := 2
            OrderType := 2
            Price := ll
            strategy.entry('Short', strategy.short, stop=ll)

// Everything is closed and canceled
if not DTperiod
    strategy.cancel_all()
    strategy.close_all(comment='Close')

// Alerts
// Convert to string variables
string Action_Txt = Action == 1 ? "Buy" : Action == 2 ? "Sell" : na
string PosType_Txt = PosType == 1 ? "Long" : PosType == 2 ? "Short" : PosType == 3 ? "Flat" : na
string OrderType_Txt = OrderType == 1 ? "Market" : OrderType == 2 ? "Limit" : na
string Price_Txt = Price > 0 ? str.tostring(Price) : na

// Output
if not (Action == nz(Action[1], Action) and Price == nz(Price[1], Price) and OrderType == nz(OrderType[1], OrderType)) and DTperiod
    alert('{"pair": "' + syminfo.ticker + '", "direction": "' + Action_Txt + '", "entertype": "' + OrderType_Txt + '", "position": "' + PosType_Txt + '", "price": "' + Price_Txt + '"}')

// *********************
// Good job, Soldier! ;>
// *********************

مزید