ট্রেন্ড ব্লক কৌশল


সৃষ্টির তারিখ: 2023-11-06 09:20:34 অবশেষে সংশোধন করুন: 2023-11-06 09:20:34
অনুলিপি: 1 ক্লিকের সংখ্যা: 612
1
ফোকাস
1617
অনুসারী

ট্রেন্ড ব্লক কৌশল

ওভারভিউ

ট্রেন্ড ব্লক কৌশল হল একটি ট্রেডিং কৌশল যা মূল্যের পরিবর্তনের শতাংশ বা বাউন্স পয়েন্টের উপর ভিত্তি করে কানগুলার সারিবদ্ধকরণ পরিচালনা করে। এটি চার্টে স্থানীয় প্রবণতা এবং বিপরীত পয়েন্টগুলি পরিষ্কারভাবে প্রদর্শন করতে পারে। এটি মূল্যের দিকনির্দেশনা ট্র্যাক করার জন্য একটি খুব দরকারী সরঞ্জাম।

মূলনীতি

এই কৌশলটির হিসাব মূল্য পরিবর্তনের শতকরা হার বা পাল্টা পয়েন্টের বিচ্যুতির উপর ভিত্তি করে করা হয় (অনুসারে, প্রান্তিক বিচ্যুতি প্রান্তিক প্যারামিটারে প্রকাশ করা হয়) এবং চার্টে একটি বিপরীত কোণীয় রেখা হিসাবে প্রদর্শিত হয়।

প্রতিটি সারি বেঞ্চমার্ক মিডল লাইন, উপরের সীমা লাইন এবং নিম্ন সীমা লাইন দ্বারা গঠিতঃ

  • বেঞ্চমার্ক রেখাটি পূর্ববর্তী বা পরবর্তী লাইনের উপরের বা নীচের সীমাবদ্ধতার সমতুল্য। (যদি দামগুলি এক সময়ের মধ্যে দ্রুত পরিবর্তিত হয় তবে বর্তমান লাইনের বেঞ্চমার্ক রেখাটি পূর্ববর্তী লাইনের উপরের সীমাবদ্ধতার চেয়ে বড় হবে বা পরবর্তী লাইনের নীচের সীমাবদ্ধতার চেয়ে কম হবে, দামের পরিবর্তনের দিকনির্দেশের উপর নির্ভর করে) । গণনা শুরু করার সময়, বেঞ্চমার্ক রেখাটি প্রথম লাইনের প্রাথমিক মানের সমান।

  • ক্যালকুলেটর ক্যালকুলেটর প্যারামিটারগুলি দামের পরিবর্তনের দিকের উপর নির্ভর করে উপরের সীমা বা নিম্ন সীমাটির বিচ্যুতি নির্ধারণ করে, ক্যালকুলেটর ডাইভারশন ক্যালকুলেটর প্যারামিটারগুলি দামের পরিবর্তনের দিকের পরিবর্তনের বিচ্যুতি নির্ধারণ করে।

নতুন লাইন তৈরির নিয়মঃ

  • যদি বন্ধের মূল্য ঊর্ধ্বসীমার চেয়ে বেশি হয় এবং বন্ধের মূল্য খোলার মূল্যের চেয়ে বেশি হয়, তাহলে ঊর্ধ্বসীমা ধীরে ধীরে উর্ধ্বমুখী হবে এবং নিম্নসীমাও উর্ধ্বমুখী হবে, কিন্তু তা কম হবে।

  • যদি সর্বনিম্ন মূল্য ≤ নিম্ন সীমা এবং বন্ধের মূল্য < খোলার মূল্য হয়, নিম্ন সীমাটি ধীরে ধীরে নিচে চলে যাবে, উপরের সীমাটিও নিচে চলে যাবে তবে এটি কম হবে।

স্থানীয় প্রবণতা এবং টার্ন পয়েন্টগুলি স্পষ্টভাবে চার্টে দেখা যায়। এটি মূল্যের গতিবিধি ট্র্যাক করার জন্য একটি খুব দরকারী সরঞ্জাম।

সামর্থ্য বিশ্লেষণ

  • মূল্য পরিবর্তনের প্রবণতা দৃশ্যমানভাবে প্রদর্শন করা, সমর্থন ও প্রতিরোধের স্পষ্টভাবে চিহ্নিত করা।

  • কোণরেখা স্পষ্টভাবে বিপর্যয়ের শক্তি এবং রিডাউন এর পরিধি প্রদর্শন করে।

  • বিভিন্ন প্রবণতা চিহ্নিত করতে বিভিন্ন প্রবণতা চিহ্নিত করতে প্রয়োজন হয়।

  • “আমি মনে করি, এই ধরনের একটি পরিস্থিতির জন্য, আমি একটি বড় সমর্থন বা প্রতিরোধ খুঁজে পেতে এবং এটি অতিক্রম করতে সক্ষম হবে।

  • আপনি যদি আপনার পজিশনে পরিবর্তন করতে চান, তাহলে আপনার পজিশনে পরিবর্তন করার জন্য মূল্যের গতি পরিবর্তন করা সহজ।

ঝুঁকি বিশ্লেষণ

  • এই রেখাটি পরবর্তী দামের গতিবিধি সম্পর্কে সঠিকভাবে ভবিষ্যদ্বাণী করতে পারে না।

  • ট্রেন্ডে বিপর্যয় দেখা দিতে পারে, যেখানে কোণার রেখার সাথে প্রকৃত মূল্যের পার্থক্য থাকতে পারে।

  • এটি এককভাবে ব্যবহার করা যাবে না, তবে অন্যান্য সূচকগুলির সাথে মিলিত হয়ে বড় প্রবণতা নির্ধারণ করা প্রয়োজন।

  • সতর্ক থাকুন যে ভুল প্যারামিটার সমন্বয় খুব ঘন ঘন লেনদেনের কারণ হতে পারে।

  • এটি একটি মেশিনের দ্বারা অন্ধভাবে অনুসরণ করা যাবে না।

আপনি আপনার পজিশনের আকার যথাযথভাবে ছোট করতে পারেন এবং অন্যান্য সূচকগুলিকে সহায়ক বিচার হিসাবে উল্লেখ করতে পারেন, বড় প্রবণতার অধীনে কাজ করার জন্য।

অপ্টিমাইজেশান দিক

  • পজিশন ম্যানেজমেন্ট মডিউল যোগ করা যায়, যা ট্রেন্ডের বিভিন্ন পর্যায়ে পজিশনকে গতিশীলভাবে সামঞ্জস্য করে।

  • যখন ওঠানামা বাড়বে তখন পজিশন কমানোর জন্য ওঠানামার হার সূচক ব্যবহার করা যেতে পারে।

  • একক ক্ষতির নিয়ন্ত্রণের জন্য, আপনি প্রত্যাহারের অনুপাতের উপর ভিত্তি করে একটি স্টপ লস সেট করতে পারেন।

  • আপনি একটি ফিল্টার যোগ করতে পারেন, যখন দামের একটি বিপর্যয় দেখা দেয় তখন ট্রেডিং স্থগিত করুন।

  • প্রবণতা পরিবর্তনের বিভিন্ন মাত্রা সনাক্ত করতে বহু-স্তরের কনট্রাঙ্গাল স্লাইডগুলিকে ভাগ করা যায়।

ডায়নামিকভাবে পজিশনের অবস্থান পরিবর্তন করে, স্টপ লস এবং ফিল্টার শর্তগুলি সেট করে, আপনি আরও স্থিতিশীলভাবে মূল্যের প্রবণতা অনুসরণ করতে পারেন।

সারসংক্ষেপ

প্রবণতা ব্লক কৌশলটি বিপরীতমুখী লাইন ব্যবহার করে মূল্যের প্রবণতার পরিবর্তনগুলি স্পষ্টভাবে সনাক্ত করতে পারে। তবে বিপরীতমুখী লাইনের স্বাধীন বিচারের উপর নির্ভর করতে পারে না, অন্যান্য সূচকগুলির সাথে সমন্বিত বিশ্লেষণের প্রয়োজন, এবং ঝুঁকি নিয়ন্ত্রণের প্রয়োজন। এটি একটি খুব মূল্যবান সহায়ক সরঞ্জাম যা ব্যবসায়ীদের বাজার গতির আরও ভাল ধারণা পেতে সহায়তা করতে পারে। অপ্টিমাইজেশনের মাধ্যমে কৌশলটি আরও স্থিতিশীল এবং কার্যকর করা যেতে পারে, যার প্রচুর ব্যবহারের সম্ভাবনা রয়েছে।

কৌশল সোর্স কোড
/*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! ;>
// *********************