दोहरी मूविंग एवरेज रिवर्स रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-24 10:56:08
टैगः

img

अवलोकन

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

रणनीति तर्क

यह रणनीति पहले दो चलती औसत निर्धारित करती है, एक अल्पकालिक 20-दिवसीय एमए और एक दीर्घकालिक 60-दिवसीय एमए। फिर यह प्रवेश निर्धारित करने के लिए दोनों एमए के बीच क्रॉसिंग स्थितियों का आकलन करती है।

विशेष रूप से, जब अल्पकालिक एमए दीर्घकालिक एमए के ऊपर पार करता है, तो यह एक अपट्रेंड का संकेत देता है, इसलिए लंबे समय तक जाएं। जब अल्पकालिक एमए दीर्घकालिक एमए के नीचे पार करता है, तो यह एक डाउनट्रेंड का संकेत देता है, इसलिए शॉर्ट जाएं।

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

कोड का मुख्य तर्क हैः

  1. 20-दिवसीय ईएमए और 60-दिवसीय ईएमए की गणना करें
  2. यदि 20-दिवसीय ईएमए 60-दिवसीय ईएमए से अधिक पार करता है तो न्याय करें, यदि हां तो लंबे समय तक जाएं
  3. यदि 20-दिवसीय ईएमए 60-दिवसीय ईएमए से नीचे जाता है तो न्याय करें, यदि हां तो शॉर्ट जाएं
  4. लंबे समय तक जाने के बाद, उच्चतम मूल्य से 3% नीचे स्टॉप लॉस सेट करें
  5. शॉर्ट होने के बाद, सबसे कम कीमत से 3% ऊपर स्टॉप लॉस सेट करें
  6. पदों में होने पर स्टॉप लॉस को समायोजित करते रहें

लाभ विश्लेषण

इस रणनीति के लाभ इस प्रकार हैंः

  1. सरल तर्क को लागू करना आसान है।
  2. दोहरी एमए गलत ब्रेक को प्रभावी ढंग से फ़िल्टर कर सकती है।
  3. अधिकतम लाभ के लिए ट्रेलिंग स्टॉप लॉक।
  4. जब रुझान बदलता है तो समय पर संकेत प्राप्त कर सकता है।
  5. उचित ड्रॉडाउन नियंत्रण, अपेक्षाकृत स्थिर।

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

कुछ जोखिम भी हैं:

  1. जब रुझान अस्पष्ट होता है, तो एमए के बीच लगातार क्रॉसिंग होती है, जिससे ओवरट्रेडिंग नुकसान होता है।
  2. गलत स्टॉप लॉस सेटिंग बहुत ढीली या बहुत आक्रामक हो सकती है।
  3. गलत पैरामीटर सेटिंग्स जैसे कि अवधि की लंबाई महत्वपूर्ण संकेतों को मिस कर सकती है।
  4. उच्च व्यापार लागत लाभ मार्जिन को कम करती है।

जोखिमों से निपटने के लिए:

  1. अंधेरे व्यापार से बचने के लिए जब रुझान स्पष्ट न हो तो फ़िल्टर अपनाएं।
  2. परीक्षण और उचित सेटिंग के लिए स्टॉप हानि सीमा का अनुकूलन।
  3. बैकटेस्ट और ट्यूनिंग के माध्यम से इष्टतम मापदंडों का पता लगाएं।
  4. व्यापार लागत को कम करने के लिए स्थिति का आकार कम करें।

अनुकूलन विचार

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

  1. बहु-स्थिति प्रविष्टि के लिए आरएसआई जैसे अन्य फ़िल्टर जोड़ें, झूठे ब्रेक से बचें।

  2. सबसे अच्छा पैरामीटर मिश्रण खोजने के लिए एमए अवधि का अनुकूलन करें। वृद्धिशील आगे चलकर विभिन्न अवधि का परीक्षण कर सकते हैं।

  3. इष्टतम रेंज खोजने के लिए बैकटेस्ट गणना के माध्यम से स्टॉप लॉस रेंज का अनुकूलन करें। गतिशील स्टॉप लॉस का भी उपयोग कर सकते हैं।

  4. व्यापार आवृत्ति को कम करने के लिए स्टॉप लॉस से बाहर निकलने के बाद री-एंट्री लॉजिक सेट करें।

  5. जब प्रवृत्ति स्पष्ट न हो तब ट्रेडिंग को रोकने के लिए प्रवृत्ति संकेतक के साथ संयोजन करें।

  6. बाजार की स्थितियों के आधार पर स्थिति आकार और गतिशील स्टॉप लॉस जोड़ें।

सारांश

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


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

अधिक