मल्टी एमए लिमिट ऑर्डर ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-09-22 14:16:20
टैगः

अवलोकन

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

रणनीति तर्क

रणनीति प्रवृत्ति की दिशा निर्धारित करने के लिए चलती औसत का उपयोग करती है। विशेष रूप से, यह निर्धारित करती है कि क्या कीमत 3 ऊपर की एमए लाइनों के माध्यम से टूटती है। और यह निर्धारित करती है कि क्या कीमत 3 नीचे की एमए लाइनों के माध्यम से टूटती है।

इस प्रकार, प्रवृत्ति जितनी मजबूत होगी, उतने ही समान दिशा के सीमा आदेश निर्धारित किए जाएंगे। जब कीमत उलट संकेत दिखाती है, तो रिवर्स पद खोले जाएंगे। मध्य एमए का उपयोग मौजूदा पदों की सफलता का न्याय करने और बंद संकेत उत्पन्न करने के लिए किया जाता है।

पूरी रणनीति व्यापारिक तर्क बनाने के लिए पिरामिड-शैली के उद्घाटन और सफलता-शैली के समापन को जोड़ती है। इसका उद्देश्य लागत को कम करने के लिए बेहतर औसत कीमतों पर पद खोलना है, और जोखिमों को नियंत्रित करने के लिए स्टॉप लॉस के लिए मध्य एमए का उपयोग करता है।

लाभ विश्लेषण

इस रणनीति के लाभों में निम्नलिखित शामिल हैंः

  1. रुझानों को निर्धारित करने के लिए एमए का उपयोग करना, सरल और सहज संचालन।

  2. पिरामिड स्टाइल में खुलने से रुझानों के शुरुआती चरण में बेहतर औसत कीमतें मिल सकती हैं।

  3. मध्य एमए स्टॉप लॉस समय पर नुकसान को रोक सकता है और जोखिमों को नियंत्रित कर सकता है।

  4. सीमा आदेशों से बचें।

  5. अनुकूलन योग्य मापदंड विभिन्न उत्पादों के अनुकूल होते हैं।

  6. स्पष्ट संरचना, समझने और विस्तार करने में आसान।

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

इस रणनीति के जोखिमों में निम्नलिखित शामिल हैंः

  1. एमए में देरी से गलतफहमी पैदा हो सकती है।

  2. असफल सीमा आदेश प्रवेश के अवसरों को खो सकते हैं।

  3. मध्य एमए स्टॉप लॉस सफलताओं का न्याय करने के लिए बहुत कच्चा हो सकता है।

  4. अनुचित पैरामीटर सेटिंग्स के परिणामस्वरूप बहुत बड़ी स्थिति हो सकती है।

  5. अपर्याप्त बैकटेस्ट अवधि ओवरफिटिंग का कारण बन सकती है।

  6. लेन-देन की लागत पर विचार नहीं किया गया।

समाधान इस प्रकार हैं:

  1. पुष्टि के लिए अन्य संकेतक जोड़ें, मापदंडों का अनुकूलन करें।

  2. समाप्ति समय निर्धारित करें, सीमा मूल्य समायोजित करें।

  3. मध्य एमए स्टॉप लॉस पर लाभ लेने या तर्क जोड़ें।

  4. मापदंडों को अनुकूलित करें, जोखिम-लाभ अनुपात का मूल्यांकन करें।

  5. बैकटेस्ट अवधि का विस्तार करें, मल्टी-मार्केट बैकटेस्ट करें।

  6. लेन-देन लागत और फिसलने का तर्क जोड़ें।

अनुकूलन दिशाएँ

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

  1. मशीन लर्निंग विधियों का उपयोग करके अधिक उत्पादों के लिए मापदंडों का अनुकूलन करें।

  2. पुष्टि के लिए अन्य संकेतक जोड़ें, जैसे कि एमएसीडी, केडीजे आदि।

  3. मध्य एमए लाइन पर लाभ लेने का तर्क जोड़ें.

  4. गतिशील रूप से स्थिति के आकार और स्टॉप लॉस स्तरों को समायोजित करें।

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

  6. अत्यधिक प्रवृत्तियों को रोकने के लिए लागतों का प्रबंधन करें।

  7. पैरामीटर पूल बनाने के लिए विभिन्न उत्पादों पर मापदंडों का परीक्षण करें।

निष्कर्ष

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


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

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

अधिक