ভলিউম অনুপাতের ভিত্তিতে কৌশল অনুসরণ করে প্রবণতা

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-১৪ ১৯ঃ৫৩ঃ৫৫
ট্যাগঃ

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

I. কৌশলগত যুক্তি

এই কৌশলটির মূল সূচক হ'ল উত্থান এবং হ্রাসের পরিমাণ। নির্দিষ্ট গণনার পদক্ষেপগুলি হ'লঃ

  1. দৈনিক মোট ভলিউম গণনা করুন।

  2. ডেইলি বার বন্ধ হলে ভলিউমকে বল ভলিউম হিসেবে চিহ্নিত করুন, এবং বন্ধ হলে হ্রাস ভলিউম হিসেবে চিহ্নিত করুন।

  3. গরুর এবং ভালুকের ভলিউমের জন্য পৃথকভাবে চলমান গড় গণনা করুন।

  4. যখন মন্দার ভলিউম এমএ হ্রাস পায় তখন একটি ক্রয় সংকেত উৎপন্ন হয়, এবং বিপরীতভাবে।

  5. দামের হার পরিবর্তনের সূচকটি ফিল্টার হিসাবেও ব্যবহৃত হয়, যখন একটি স্পষ্ট প্রবণতা বিদ্যমান থাকে তখনই ট্রেড নেওয়া হয়।

  6. স্টপ লস সেট করুন এবং মুনাফা নিন।

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

২. কৌশলটির সুবিধা

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

এছাড়াও, ভলিউম সূচকগুলি প্রারম্ভিকভাবে ব্রেকআউট সংকেতগুলি প্রতিফলিত করতে পারে, যা তুলনামূলকভাবে সংবেদনশীল। শুধুমাত্র মূল্য সূচকগুলি ব্যবহার করার তুলনায়, এটি প্রবণতা বিপরীতগুলি আরও আগে ধরতে পারে।

অবশেষে, দামের পরিবর্তনের হারের সাথে ফিল্টারিংও সংকেতের গুণমানকে উন্নত করে।

III. সম্ভাব্য ঝুঁকি

যদিও এই কৌশলটির সুবিধাগুলি রয়েছে, তবে লাইভ ট্রেডিংয়ের জন্য নিম্নলিখিত ঝুঁকিগুলি বিবেচনা করা উচিতঃ

প্রথমত, ভলিউম সূচকগুলির পরামিতিগুলি সতর্কতার সাথে সেট করা দরকার যাতে মিথ্যা সংকেতগুলি এড়ানো যায়।

দ্বিতীয়ত, শুধুমাত্র একটি সূচকের উপর নির্ভর করা এটিকে মূল্যের অবৈধতার জন্য সংবেদনশীল করে তোলে। যাচাইয়ের জন্য অন্যান্য সূচকগুলি একত্রিত করা উচিত।

অবশেষে, স্টপ লস সেট খুব কাছাকাছি ঝুঁকি অকাল বন্ধ করা হয়।

IV. সংক্ষিপ্ত বিবরণ

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


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Based on Volume Flow v3 indicator by oh92
strategy("Volume Flow BF", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
maType =    input(title="Moving Average Type", options=["Simple", "Exponential", "Double Exponential"], defval="Simple")
length =    input(6, title="MA Length")
x      =    input(3.1, title="Factor For Breakout Candle")

// Basic Volume Calcs //
vol  =  volume
bull =  close>open?vol:0 
bear =  open>close?vol:0

// Double EMA Function //
dema(src, len) => (2 * ema(src, len) - ema(ema(src, len), len))

// BULL Moving Average Calculation
bullma = maType == "Exponential" ?        ema(bull, length) :
         maType == "Double Exponential" ? dema(bull, length) :
         sma(bull, length)

// BEAR Moving Average Calculation //
bearma = maType == "Exponential" ?        ema(bear, length) :
         maType == "Double Exponential" ? dema(bear, length) :
         sma(bear, length)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(12, minval=1)
pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = bullma > bearma and isMoving()
short = bullma < bearma and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(900.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long",  strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)
    strategy.exit("Long Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30) 
plot(bullma, color=color.lime, linewidth=1, transp=0, title="Bull MA", transp=10)
plot(bearma, color=color.red, linewidth=1, transp=0, title="Bear MA", transp=10)

আরো