বেবিশার্ক ভিডব্লিউএপি ট্রেডিং কৌশল ভিডব্লিউএপি এবং ওবিভি আরএসআই সূচকগুলির উপর ভিত্তি করে

লেখক:চাওঝাং, তারিখঃ 2024-03-08 16:39:28
ট্যাগঃ

img

কৌশল ওভারভিউ

বেবিশার্ক ভিডাব্লুএপি ট্রেডিং কৌশল হল ভলিউম ওয়েটেড মিডিয়ার প্রাইস (ভিডাব্লুএপি) এবং অন ব্যালেন্স ভলিউম রিলেটিভ স্ট্রেনথ ইন্ডেক্স (ওবিভি আরএসআই) এর উপর ভিত্তি করে একটি পরিমাণগত ট্রেডিং কৌশল। কৌশলটি নির্দিষ্ট প্রান্তিক স্তর অতিক্রম করে ভিডাব্লুএপি এবং ওবিভি আরএসআই থেকে বিচ্যুতির উপর ভিত্তি করে সম্ভাব্য ক্রয় এবং বিক্রয় সংকেত সনাক্ত করার লক্ষ্য।

কৌশল নীতি

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

বিশেষত, কৌশলটি ভিডাব্লুএপির জন্য গণনার সময়কাল হিসাবে 60 টি মোমবাতি ব্যবহার করে, ইনপুট ডেটা হিসাবে বন্ধের দাম। এটি তারপরে ভিডাব্লুএপির থেকে ধনাত্মক এবং নেতিবাচক 3 স্ট্যান্ডার্ড বিচ্যুতির মূল্য বিচ্যুতির উপর ভিত্তি করে অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় অঞ্চলগুলি তৈরি করে। ওবিভি আরএসআইয়ের জন্য, এটি গণনার সময়কাল হিসাবে 5 টি মোমবাতি ব্যবহার করে এবং অতিরিক্ত ক্রয় এবং অতিরিক্ত বিক্রয় শর্ত নির্ধারণের মানদণ্ড হিসাবে 70 এবং 30 এর থ্রেশহোল্ড সেট করে।

ট্রেডিং লজিকের দিক থেকে, যখন দাম ভিডাব্লুএপি এর নিম্ন ব্যান্ডের নীচে ওভারসোল্ড জোনে থাকে এবং ওবিভি আরএসআই 30 এর কম হয়, তখন কৌশলটি একটি দীর্ঘ সংকেত উত্পন্ন করে। বিপরীতে, যখন দাম ভিডাব্লুএপি এর উপরের ব্যান্ডের উপরে ওভারক্রয় জোনে থাকে এবং ওবিভি আরএসআই 70 এর বেশি হয়, তখন এটি একটি সংক্ষিপ্ত সংকেত উত্পন্ন করে। অতিরিক্তভাবে, কৌশলটি 0.6% এর মুনাফা এবং স্টপ লস অনুপাত নির্ধারণ করে এবং ঝুঁকি নিয়ন্ত্রণের জন্য পরপরের ক্ষতির পরে 10 মোমবাতি শীতল সময়কাল প্রবর্তন করে।

কৌশলগত সুবিধা

  1. বাজারের প্রবণতা এবং গতির ব্যাপকভাবে ক্যাপচার করার জন্য মূল্য এবং পরিমাণের মতো একাধিক বাজার কারণকে একত্রিত করে।
  2. বিভিন্ন বাজার চক্রের পরিবর্তনের সাথে মানিয়ে নিতে গতিশীল ভিডাব্লুএপি এবং ওবিভি আরএসআই সূচক গ্রহণ করে।
  3. সুযোগগুলো কাজে লাগানোর সময় ঝুঁকিগুলোকে কার্যকরভাবে নিয়ন্ত্রণ করার জন্য যুক্তিসঙ্গত লাভ এবং স্টপ লস রেসিও এবং কুল-অফ সময় নির্ধারণ করে।
  4. পরিষ্কার যুক্তি, সহজেই বোঝা যায় এবং বাস্তবায়িত হয়, একটি নির্দিষ্ট স্তরের ব্যাখ্যাযোগ্যতার সাথে।
  5. সামঞ্জস্যযোগ্য প্যারামিটার, বিভিন্ন স্টাইলের ব্যবসায়ীদের জন্য অনুকূল এবং উন্নত করার জন্য উপযুক্ত।

কৌশলগত ঝুঁকি

  1. ঘূর্ণনশীল বা পুনরাবৃত্তিমূলক বাজারের ক্ষেত্রে, ঘন ঘন ট্রেডিং সংকেতগুলি ওভারট্রেডিং এবং স্লিপিংয়ের ব্যয় বাড়িয়ে তুলতে পারে।
  2. ট্রেন্ডিং মার্কেটে, কেবলমাত্র ভিডাব্লুএপি-র উপর ভিত্তি করে লাভ নেওয়ার ফলে কৌশলটি খুব তাড়াতাড়ি বেরিয়ে আসতে পারে, পরবর্তী ট্রেন্ড মুনাফা মিস করে।
  3. নির্দিষ্ট প্যারামিটার সেটিংগুলি বাজারের অবস্থার পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে না, যা বিভিন্ন যন্ত্র এবং সময়সীমার জন্য অপ্টিমাইজেশান প্রয়োজন।
  4. OBV সূচকটি ভলিউম ডেটার উপর নির্ভর করে; যখন ভলিউম ডেটা ভুল বা ম্যানিপুলেটেড হয়, সূচক বিকৃতিগুলি ভুল বিচার করতে পারে।
  5. কৌশলটি ম্যাক্রো ইকোনমিক্স এবং সংবাদের মতো বাহ্যিক কারণগুলির বিবেচনায় নেই এবং চরম বাজারের পরিস্থিতিতে ব্যর্থ হতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

  1. ঘন ঘন ট্রেডিং হ্রাস করার জন্য প্রবণতা নিশ্চিতকরণ সূচক এবং অস্থিরতা সূচকগুলির মতো দোলনশীল বাজারের জন্য আরও ফিল্টারিং শর্ত প্রবর্তন করুন।
  2. ট্রেন্ডিং মার্কেটকে আরও ভালভাবে ক্যাপচার করার জন্য ট্রেলিং স্টপ ব্যবহার বা অন্যান্য ট্রেন্ড অনুসরণকারী সূচকগুলির সাথে একত্রিত করার মতো উত্তোলনের শর্তগুলি অনুকূল করুন।
  3. VWAP এবং OBV RSI পরামিতিগুলির অভিযোজিত অপ্টিমাইজেশন সম্পাদন করুন, গতিশীলভাবে গণনার সময়কাল এবং থ্রেশহোল্ড সেটিংগুলি সামঞ্জস্য করুন।
  4. OBV RSI সূচকের নির্ভরযোগ্যতা উন্নত করার জন্য ভলিউম সত্যতা যাচাইকরণ প্রক্রিয়া প্রবর্তন করা।
  5. কৌশলটির অভিযোজনযোগ্যতা ও দৃঢ়তা বাড়ানোর জন্য ম্যাক্রোইকনমিক ডেটা বিশ্লেষণ, আবেগ সূচক ইত্যাদি অন্তর্ভুক্ত করার বিষয়টি বিবেচনা করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GreatestUsername

//@version=5
strategy("BabyShark VWAP Strategy", overlay=true, margin_long=100, margin_short=100, calc_on_every_tick = true)


// VWAP
ls = input(false, title='Log-space', group = "Optional")
type = 'Average Deviation'
length = input(60, group="Strategy Modification")
source = input(close, group="Strategy Modification")
_low = ls == true ? math.log(low) : low
_high = ls == true ? math.log(high) : high
src = ls == true ? math.log(source) : source

//weighted mean
pine_vwmean(x, y) =>
    cw = 0.0
    cd = 0.0
    w_sum = 0.0
    d_sum = 0.0
    for i = 0 to y - 1 by 1
        cd := x[i]
        cw := volume[i]
        d_sum += cw * cd
        w_sum += cw
        w_sum
    d_sum / w_sum

//weighted standard deviation
pine_vwstdev(x, y, b) =>
    d_sum = 0.0
    w_sum = 0.0
    cd = 0.0
    for i = 0 to y - 1 by 1
        cd := x[i]
        cw = volume[i]
        d_sum += cw * math.pow(cd - b, 2)
        w_sum += cw
        w_sum
    math.sqrt(d_sum / w_sum)

//weighted average deviation
pine_vwavdev(x, y, b) =>
    d_sum = 0.0
    w_sum = 0.0
    cd = 0.0
    for i = 0 to y - 1 by 1
        cd := x[i]
        cw = volume[i]
        d_sum += cw * math.abs(cd - b)
        w_sum += cw
        w_sum
    d_sum / w_sum

vwmean = pine_vwmean(src, length)

//consider using Average Deviation instead of Standard Deviatio if there are values outside of 3rd upper & lower bands within a rolling window
dev = if type == 'Standard Deviation'
    dev = pine_vwstdev(src, length, vwmean)
    dev
else if type == 'Average Deviation'
    dev = pine_vwavdev(src, length, vwmean)
    dev

basis = ls == true ? math.exp(vwmean) : vwmean
plot(basis, color=color.new(#b7b7b7, 60), title='Basis')

upper_dev_2 = vwmean + dev * 2
upper_dev_3 = vwmean + dev * 3

lower_dev_2 = vwmean - dev * 2
lower_dev_3 = vwmean - dev * 3

fill(
     plot1=plot(ls == true ? math.exp(upper_dev_2) : upper_dev_2, color=color.new(#B20000, 0), title='Upper dev 2'), 
     plot2=plot(ls == true ? math.exp(upper_dev_3) : upper_dev_3, color=color.new(#FF6666, 0), title='Upper dev 3', display=display.none), 
     color=color.new(#FF4D4D, 80), title='Upper band'
     )
fill(
     plot1=plot(ls == true ? math.exp(lower_dev_3) : lower_dev_3, color=color.new(#00CC00, 0), title='Lower dev 3', display=display.none), 
     plot2=plot(ls == true ? math.exp(lower_dev_2) : lower_dev_2, color=color.new(#008000, 0), title='Lower dev 2'), 
     color=color.new(#006600, 80), title='Lower band'
     )


// Input to enable or disable the table visibility
table_visible = input(false, title="Show Table", group="Deviation Cross Monitor")
// Input for the number of candles to look back
table_length = input(300, title="Table Lookback Length", group="Deviation Cross Monitor")

// Custom count function
count_occurrences(cond, length) =>
    count = 0
    for i = 0 to length - 1
        if cond[i]
            count := count + 1
    count

// Count occurrences of prices above Upper dev 2 and below Lower dev 2

above_upper_dev_2 = count_occurrences(close > upper_dev_2, table_length)
below_lower_dev_2 = count_occurrences(close < lower_dev_2, table_length)

// Create table in the bottom right corner
var table tbl = table.new(position=position.bottom_right, rows=2, columns=2)

if table_visible
    if barstate.islast
        // Update the table headers
        table.cell(tbl, 0, 0, "Above Upper Dev 2", bgcolor=color.gray, text_color=color.white)
        table.cell(tbl, 0, 1, "Below Lower Dev 2", bgcolor=color.gray, text_color=color.white)
        
        // Update the table values
        table.cell(tbl, 1, 0, str.tostring(above_upper_dev_2), bgcolor=color.new(color.green, 90), text_color=color.green)
        table.cell(tbl, 1, 1, str.tostring(below_lower_dev_2), bgcolor=color.new(color.red, 90), text_color=color.red)
else
    table.delete(tbl)

// RSI
obvsrc = close
change_1 = ta.change(obvsrc)
obv = ta.cum(ta.change(obvsrc) > 0 ? volume : change_1 < 0 ? -volume : 0 * volume)

src2 = obv
len = input.int(5, minval=1, title="RSI Length", group="Strategy Modification")
up = ta.rma(math.max(ta.change(src2), 0), len)
down = ta.rma(-math.min(ta.change(src2), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
higherlvl = input(70, title="Higher Level", group="Strategy Modification")
lowerlvl = input(30, title="Lower Level", group="Strategy Modification")


plot_color = rsi >= higherlvl ? color.red : rsi <= lowerlvl ? color.green : color.new(#b7b7b7, 60)
// plot(rsi, color=plot_color)

//plot(rsi, color=color.white)



// Count occurrences of RSI crossing higher level and lower level
cross_above_higher = ta.crossover(rsi, higherlvl)
cross_below_lower = ta.crossunder(rsi, lowerlvl)
above_higher_count = count_occurrences(cross_above_higher, table_length)
below_lower_count = count_occurrences(cross_below_lower, table_length)

// Create table in the bottom right corner
if (table_visible)
    var table tbl2 = table.new(position=position.bottom_right, rows=2, columns=2)
    if (barstate.islast)
        // Update the table headers
        table.cell(tbl2, 0, 0, "Higher Level Cross", bgcolor=color.gray, text_color=color.white)
        table.cell(tbl2, 0, 1, "Lower Level Cross", bgcolor=color.gray, text_color=color.white)
        
        // Update the table values
        table.cell(tbl2, 1, 0, str.tostring(above_higher_count), bgcolor=color.new(color.red, 90), text_color=color.red)
        table.cell(tbl2, 1, 1, str.tostring(below_lower_count), bgcolor=color.new(color.green, 90), text_color=color.green)


// Entries

// Long Entry:
// Price is in the shaded GREEN area of [Hoss] VWAP Deviation
// and the [Hoss] OBV RSI is GREEN.
longCondition1 = close <= lower_dev_3
longConditions = plot_color == color.green and longCondition1 and strategy.position_size == 0

// Short Entry:
// Price is in the shaded RED area of [Hoss] VWAP Deviation
// and the [Hoss] OBV RSI is RED.
shortCondition1 = close >= upper_dev_3
shortConditions = plot_color == color.red and shortCondition1 and strategy.position_size == 0

var int lastEntryBar = 0


shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 21)
uptrend = shortEMA > longEMA

if longConditions and lastEntryBar < bar_index - 10 //and uptrend
    strategy.entry("Long", strategy.long, stop=close * 0.994)
    lastEntryBar := bar_index

if shortConditions and lastEntryBar < bar_index - 10 //and not uptrend
    strategy.entry("Short", strategy.short, stop=close * 1.006)
    lastEntryBar := bar_index


if strategy.position_size > 0 and (ta.crossover(close, basis) or strategy.opentrades.entry_price(strategy.opentrades - 1) * 0.994 > close)
    strategy.close("Long", immediately = true)
if strategy.position_size < 0 and (ta.crossunder(close, basis) or strategy.opentrades.entry_price(strategy.opentrades - 1) * 1.006 < close)
    strategy.close("Short", immediately = true)

// Stop Loss:
// 0.6%
// After 1 Loss => NO more Trades for 10 Candles (10 minutes) (usually a breakout will happen, and it takes average 10min till it ranges again. So basically wait for range to form again)

// Take Profit:
// Grey line on [Hoss] VWAP Deviation or 0.6%



আরো