गति सूचक निर्णय व्यापार रणनीति


निर्माण तिथि: 2023-12-15 15:31:52 अंत में संशोधित करें: 2023-12-15 15:31:52
कॉपी: 0 क्लिक्स: 596
1
ध्यान केंद्रित करना
1621
समर्थक

गति सूचक निर्णय व्यापार रणनीति

अवलोकन

गतिशीलता संकेतक निर्णय ट्रेडिंग रणनीति एक प्रवृत्ति का पालन करने की रणनीति है। यह द्वि-सूचक चलती औसत का उपयोग करके गतिशीलता संकेतक का निर्माण करता है, और फिर मूल्य परिवर्तन दर संकेतक के साथ मिलकर एक व्यापार संकेत उत्पन्न करता है। जब गतिशीलता संकेतक बढ़ता है, तो एक मल्टी सिग्नल उत्पन्न होता है; जब गतिशीलता संकेतक गिरता है, तो एक शून्य सिग्नल उत्पन्न होता है। यह रणनीति उन व्यापारियों के लिए उपयुक्त है जो बाजार के मध्य-अवधि के रुझानों का पालन करते हैं।

रणनीति सिद्धांत

यह रणनीति गतिशीलता को मापने के लिए द्वि-दिशात्मक चलती औसत निर्णय बिंदु ऑस्सिलेटर का उपयोग करती है। कीमतों में दैनिक परिवर्तन की दर की गणना करना शुरू करें, फिर 31 दिन और 20 दिनों की लंबाई वाले द्वि-दिशात्मक चलती औसत का उपयोग करके मूल्य परिवर्तन की दर को समतल करें, और अंत में 9 दिनों की चिकनी चलती औसत के साथ व्यापार संकेत दें। जब तेज़ लाइन धीमी रेखा से अधिक होती है तो यह एक बहुमुखी बाजार होता है, और जब तेज़ लाइन धीमी रेखा से कम होती है तो यह एक खाली बाजार होता है।

इस रणनीति में एक मूल्य परिवर्तन दर संकेतक भी शामिल किया गया है, ताकि बाजार में गलत संकेतों को समाप्त करने से बचा जा सके। विशेष रूप से, यह लगभग 30 दिनों की कीमतों में प्रतिशत परिवर्तन की गणना करने के लिए है, यह निर्धारित करने के लिए कि क्या बाजार सक्रिय है या नहीं, इसकी चलती औसत के माध्यम से। केवल जब बाजार सक्रिय होता है, तो व्यापार संकेत जारी किया जाता है।

श्रेष्ठता विश्लेषण

गतिशीलता सूचक और मूल्य परिवर्तन दर सूचक के संयोजन के साथ, यह रणनीति मध्यम अवधि के रुझानों को प्रभावी ढंग से पहचानती है और अस्थिरता के दौरान बार-बार व्यापार करने से बचती है। सरल ट्रेंडिंग रणनीति जैसे कि चलती औसत की तुलना में, यह गलत व्यापार की संभावना को काफी कम कर सकता है। इसके अलावा, जोखिम नियंत्रण के लिए एक स्टॉप लॉस सेट किया गया है, जो समय पर स्टॉप लॉस को प्रभावी ढंग से नियंत्रित कर सकता है।

जोखिम विश्लेषण

यह रणनीति मुख्य रूप से मध्य-लंबी रेखा प्रवृत्ति पर व्यापार करती है और अल्पकालिक मूल्य उतार-चढ़ाव को पकड़ने में असमर्थ है। जब चरम स्थिति होती है, तो स्टॉप लॉस को तोड़ दिया जा सकता है, जिससे भारी नुकसान होता है। इसके अलावा, पैरामीटर की गलत सेटिंग भी रणनीति को प्रभावित कर सकती है। उदाहरण के लिए, द्विआधारी संकेतक चलती औसत पैरामीटर को बहुत कम सेट करना, गलत व्यापार की संभावना को बढ़ाता है।

जोखिम की रोकथाम के लिए, स्टॉप लॉस को उचित रूप से समायोजित किया जा सकता है, स्टॉप लॉस की सीमा को बढ़ाया जा सकता है। जब चरम स्थिति आती है, तो रणनीति को अस्थायी रूप से बंद कर दिया जा सकता है, ताकि स्टॉप लॉस के टूटने की संभावना से बचा जा सके। पैरामीटर को समायोजित करने के लिए, सबसे अच्छा पैरामीटर चुनने के लिए विस्तृत फीडबैक किया जाना चाहिए।

अनुकूलन दिशा

इस रणनीति को निम्नलिखित दिशाओं में अनुकूलित किया जा सकता हैः

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

  2. मशीन लर्निंग मॉडल को जोड़ना, जो रुझान की दिशा और ताकत का आकलन करने में मदद करता है, सिग्नल की सटीकता में सुधार कर सकता है।

  3. विभिन्न गतिशीलता संकेतकों का प्रयोग करें, जैसे कि सापेक्ष कमजोर संकेतकों, स्टोचैस्टिक ऑस्सिलेटर आदि, ताकि खरीद और बिक्री के समय को अनुकूलित किया जा सके।

  4. रीयल-टाइम ऑपरेशन के दौरान, हाल की स्थिति की विशेषताओं, गतिशील समायोजन मापदंडों के साथ, सर्वोत्तम मापदंडों के संयोजन की तलाश करें।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2022-12-08 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Decision 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.075)

/////////////// 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

/////////////// Decision ///////////////
src = input(ohlc4, title="Source")
length1 = input(31, title="First Smoothing")
length2 = input(20, title="Second Smoothing")
siglength = input(9, title="Signal Smoothing")
fr = input(true, title="Fill Region")

calc_csf(src, length) => 
	sm = 2.0 / length
	csf = 0.0
	csf := (src - nz(csf[1])) * sm + nz(csf[1])
	csf
i = (src / nz(src[1], src)) * 100
pmol2 = calc_csf(i - 100, length1)
pmol = calc_csf(10 * pmol2, length2)
pmols = ema(pmol, siglength)
d = pmol - pmols
duml = plot(fr ? (d > 0 ? pmol : pmols) : na, style=plot.style_circles, color=color.yellow, linewidth=0, title="DummyL")

hc = d > 0 ? d > d[1] ? color.lime : color.green : d < d[1] ? color.red : color.orange

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7, 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 = d > 0 and isMoving() 
short = d < 0 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(5000.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("L Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("S Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
sigl = plot(false ? na : pmols, title="PMO Signal", color=color.gray, linewidth=2, title="Signal")
mdl = plot(false ? na : pmol, title="PMO", color=color.black, linewidth=2, title="PMO")
fill(duml, sigl, color.green, transp=20, title="PosFill")
fill(duml, mdl, color.red, transp=20, title="NegFill")
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)