सर्पिल अपवर्ड ब्रेकथ्रू मूविंग एवरेज रणनीति


निर्माण तिथि: 2024-01-15 11:45:23 अंत में संशोधित करें: 2024-01-15 11:45:23
कॉपी: 0 क्लिक्स: 540
1
ध्यान केंद्रित करना
1617
समर्थक

सर्पिल अपवर्ड ब्रेकथ्रू मूविंग एवरेज रणनीति

अवलोकन

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

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

यह रणनीति मुख्य रूप से दो सूचकांकों पर आधारित हैः

  1. स्पाइरल चैनलः कीमतों के रुझान की दिशा का पता लगाने के लिए नीचे की ओर की रेखा की गणना करें। जब कीमतें ऊपर की ओर जाती हैं, तो यह बढ़ जाती है, और जब यह नीचे की ओर होती है, तो यह गिर जाती है।

  2. अंतर दर संकेतक (ROC): यह पता लगाने के लिए कि क्या कीमतें तेजी से बढ़ रही हैं, कीमतों की गतिशीलता का आकलन करने के लिए। जब ROC किसी सकारात्मक मूल्य से अधिक होता है, तो कीमतें तेजी से बढ़ जाती हैं, और जब यह किसी नकारात्मक मूल्य से कम होती है, तो कीमतें तेजी से गिरती हैं।

जब सर्पिल चैनल और अंतर दर संकेतक एक साथ एक बहु-हेड संकेत देते हैं, तो एक खरीद संकेत उत्पन्न होता है। यानी, कीमतों को एक ही समय में ट्रैक तोड़ना चाहिए और ऊपर की ओर त्वरण के संकेत दिखाने चाहिए। बिक्री संकेत उत्पन्न करने के लिए तर्क भी समान है।

इस तरह के संयोजन से संकेतों की विश्वसनीयता बढ़ जाती है और स्पष्ट रुझानों के बिना अंधाधुंध व्यापार से बचा जाता है।

रणनीतिक लाभ

  1. मूल्य प्रवृत्ति और गतिशीलता को मिलाकर, सिग्नल अधिक विश्वसनीय है और जीत की दर अधिक है।

  2. पैरामीटर अनुकूलन के माध्यम से, रणनीति की व्यापार आवृत्ति को समायोजित किया जा सकता है। जैसे कि अंतर दर संकेतक के पैरामीटर को समायोजित करना, ताकि स्थिति खोलने की संवेदनशीलता को नियंत्रित किया जा सके।

  3. स्टॉप लॉस का उपयोग करके एकल नुकसान को नियंत्रित करें। पैरामीटर को अनुकूलित किया जा सकता है।

  4. फिर से शुरू करने की प्रक्रिया से लाभप्रदता में वृद्धि होगी।

रणनीतिक जोखिम

  1. इस प्रकार, व्यापार के कुछ अवसरों से वंचित रह सकते हैं, जिससे लाभप्रदता में कुछ सीमाएं हो सकती हैं।

  2. जब कीमतें उलट जाती हैं, तो यह बड़ी हानि का कारण बन सकता है।

  3. अनुचित पैरामीटर सेटिंग के कारण ट्रेडिंग सिग्नल बहुत बार या दुर्लभ हो सकते हैं।

  4. एक निश्चित प्रतिशत की रोक-टोक पूरी तरह से बड़े एकल घाटे की घटना को रोक नहीं सकती है।

रणनीति अनुकूलन दिशा

  1. सबसे अच्छा पैरामीटर संयोजन खोजने के लिए विसंगति दर सूचक के मापदंडों का परीक्षण करें।

  2. विभिन्न स्टॉप लॉस स्तरों का परीक्षण करें, जीत-हार अनुपात और जीत की दर को संतुलित करें।

  3. सिग्नल की गुणवत्ता को बेहतर बनाने के लिए अन्य संकेतकों जैसे कि क्वांटिटी इंडिकेटर, कंपन इंडिकेटर आदि को फ़िल्टर करें।

  4. विभिन्न बाजारों का परीक्षण करें और रणनीति के लिए सबसे उपयुक्त किस्मों की तलाश करें।

  5. विभिन्न बाजार स्थितियों के लिए विभिन्न पदों का उपयोग करने के लिए रणनीतिक रूप से अनुकूलित स्थिति प्रबंधन।

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SSL Chaikin BF 🚀", overlay=true, precision=2, 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 ///////////////
_0 = input(false,  "════════ Test Period ═══════")
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

/////////////// Chaikin MF /////////////// 
_1 = input(false,  "═══════ Chaikin MF ═══════")
length = input(20, minval=1, title = "Chaikin SMA Length")
upperThreshold = input(0.04, step=0.01, title="Upper Threshold")
lowerThreshold = input(0.02, step=0.01, title="Lower Threshold")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, length) / sum(volume, length)

/////////////// SSL Channels /////////////// 
_2 = input(false,  "═════════ SSL ══════════")
len1=input(title="SMA Length 1", defval=12)
len2=input(title="SMA Length 2", defval=13)

smaHigh = sma(high, len1)
smaLow = sma(low, len2)

Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(13, "ROC Length",  minval=1)
pcntChange = input(4, "ROC % Change", 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 = sslUp > sslDown and isMoving() or crossover(mf, upperThreshold)
short = sslUp < sslDown and isMoving() or crossunder(mf, lowerThreshold)

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])

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

//////////////// Stop loss /////////////// 
_4 = input(false,  "════════ Stop Loss ═══════")
sl_inp = input(2.0, title='Stop Loss %') / 100

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("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
p1 = plot(sslDown, linewidth = 1, color=color.red)
p2 = plot(sslUp, linewidth = 1, color=color.lime)
fill(p1, p2,  color = sslDown < sslUp ? color.lime : color.red, transp=80)
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)
bgcolor(crossover(mf, upperThreshold) ? color.blue : crossunder(mf, lowerThreshold) ? color.orange : na, transp=30)