वॉल्यूम अनुपात के आधार पर रणनीति का अनुसरण करने वाला रुझान

लेखक:चाओझांग, दिनांक: 2023-09-14 19:53:55
टैगः

यह लेख वॉल्यूम अनुपात विश्लेषण के आधार पर एक मात्रात्मक प्रवृत्ति के बाद की रणनीति का विस्तार से वर्णन करता है। यह तेजी और मंदी वॉल्यूम के चलती औसत की गणना करके खरीद और बिक्री संकेत उत्पन्न करता है।

I. रणनीतिक तर्क

इस रणनीति का मुख्य संकेतक तेजी और गिरावट की मात्रा है। विशिष्ट गणना चरण हैंः

  1. दैनिक कुल मात्रा की गणना करें।

  2. दैनिक बार बंद होने पर वॉल्यूम को बैल वॉल्यूम और बंद होने पर बियर वॉल्यूम के रूप में लेबल करें।

  3. बुल और बियर वॉल्यूम के लिए अलग से चलती औसत की गणना करें।

  4. खरीद संकेत तब उत्पन्न होता है जब बैल वॉल्यूम एमए मंदी वॉल्यूम एमए से ऊपर जाता है और इसके विपरीत।

  5. मूल्य परिवर्तन दर सूचक का उपयोग फ़िल्टर के रूप में भी किया जाता है, केवल तभी ट्रेडों को लिया जाता है जब एक स्पष्ट प्रवृत्ति मौजूद होती है।

  6. लाभ में लॉक करने के संकेतों के आधार पर स्टॉप लॉस और ले लाभ सेट करें।

वॉल्यूम अनुपात के माध्यम से प्रवृत्ति की दिशा का न्याय करके, और मूल्य परिवर्तन की दर के साथ फ़िल्टरिंग करके, संकेत की गुणवत्ता में सुधार किया जा सकता है। स्टॉप लॉस और लाभ लेने से प्रति व्यापार नियंत्रित लाभ और हानि भी सुनिश्चित होती है।

II. रणनीति के फायदे

इस रणनीति का सबसे बड़ा लाभ यह है कि यह प्रवृत्ति की दिशा निर्धारित करने के लिए मात्रा का उपयोग करता है, जो सबसे बुनियादी प्रवृत्ति निम्नलिखित तरीकों में से एक है। मात्रा बाजार प्रतिभागी के व्यवहार को दर्शाती है।

इसके अलावा, वॉल्यूम संकेतक ब्रेकआउट संकेतों को जल्दी प्रतिबिंबित कर सकते हैं, अपेक्षाकृत संवेदनशील होते हैं। केवल मूल्य संकेतक का उपयोग करने की तुलना में, यह प्रवृत्ति उलट को पहले पकड़ सकता है।

अंत में, मूल्य परिवर्तन दर के साथ फ़िल्टरिंग से सिग्नल की गुणवत्ता में भी सुधार होता है।

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)

अधिक