एमएसीडी पर आधारित क्रिप्टो ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांक: 2023-09-19 11:21:42
टैगः

अवलोकन

यह रणनीति क्रिप्टोकरेंसी के लिए ट्रेडिंग सिग्नल की पहचान करने के लिए मूविंग एवरेज कन्वर्जेंस डिवर्जेंस (MACD) और रिलेटिव स्ट्रेंथ इंडेक्स (RSI) संकेतकों का उपयोग करती है। यह ट्रेडिंग निर्णय लेने के लिए बाजार के रुझानों और ओवरबॉट / ओवरसोल्ड स्तरों का न्याय करने के लिए RSI के साथ अल्पकालिक और दीर्घकालिक मूविंग एवरेज के बीच अंतर की गणना करती है।

रणनीति तर्क

  1. 12-दिवसीय ईएमए और 26-दिवसीय ईएमए की गणना अल्पकालिक और दीर्घकालिक चलती औसत के रूप में की जाती है।

  2. एमएसीडी हिस्टोग्राम के रूप में लघु और दीर्घ ईएमए के बीच अंतर की गणना करें।

  3. सिग्नल लाइन के रूप में एमएसीडी के 9 दिन के ईएमए की गणना करें.

  4. ओवरबॉट/ओवरसोल्ड स्तरों का न्याय करने के लिए 14 दिन के आरएसआई की गणना करें।

  5. खरीद संकेत प्रदर्शित करता है जब एमएसीडी सिग्नल लाइन के ऊपर पार करता है और आरएसआई 81 से अधिक होता है।

  6. विक्रय संकेत प्रदर्शित करता है जब एमएसीडी सिग्नल रेखा के नीचे पार करता है और आरएसआई 27 से कम होता है।

  7. प्रवेश और निकास के लिए अंतर्निहित रणनीति मॉड्यूल का प्रयोग करें।

लाभ विश्लेषण

  1. एमएसीडी रुझानों और परिवर्तनों की पहचान कर सकता है, आरएसआई ओवरबॉट/ओवरसोल्ड स्तर दिखाता है। दोनों को मिलाकर संकेत की सटीकता में सुधार होता है।

  2. शून्य रेखा के ऊपर/नीचे MACD अल्पकालिक बनाम दीर्घकालिक प्रवृत्ति की दिशा/शक्ति दर्शाता है।

  3. उच्च/निम्न स्तर पर आरएसआई संभावित ओवरहीटिंग/ओवरसोल्ड का संकेत देता है। ट्रेडिंग संकेत खोजने में मदद करता है।

  4. स्पष्ट और सरल ट्रेडिंग सिग्नल, व्यापार को व्यवस्थित रूप से निष्पादित करना आसान है।

  5. अनुकूलन योग्य पैरामीटर अनुकूलन और विभिन्न बाजार स्थितियों के अनुकूलन के लिए।

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

  1. मैकडी और आरएसआई डेटा झूठे ब्रेकआउट और विसंगतियों के लिए प्रवण हैं, जो गलत संकेत उत्पन्न कर सकते हैं।

  2. निश्चित मापदंड बदलते बाजारों के अनुकूल नहीं हो सकते हैं, अनुकूलन की आवश्यकता है।

  3. संकेतों में देरी हो सकती है, मोड़ के बिंदुओं पर व्यापार करने में असमर्थ।

  4. केवल लंबी/छोटी, विभिन्न बाजारों से लाभ नहीं कर सकते।

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

  1. इष्टतम सेटिंग्स खोजने के लिए विभिन्न पैरामीटर संयोजनों का परीक्षण करें।

  2. झूठे ब्रेकआउट ट्रेडों से बचने के लिए फ़िल्टर जोड़ें।

  3. एकतरफा बाजारों में घाटे को सीमित करने के लिए स्टॉप लॉस जोड़ें।

  4. पदों के आकार, रुझानों में वृद्धि और सीमाओं में कमी का प्रबंधन करें।

  5. अधिक सटीक संकेतों के लिए अन्य संकेतकों के साथ संयोजन करें।

  6. विभिन्न उपकरणों और समय सीमाओं पर परीक्षण।

सारांश

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


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

//@version=3
// Revision:        5
// Author:          @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Daily_Crypto_Moriceau_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)



tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === Plot Setting ===

//plot(fastMA,color=red)
//plot(slowMA,color=blue)
//barcolor(color=iff(fastMA > slowMA, yellow, na))
//barcolor(color=iff(fastMA < slowMA, black, na))
barcolor(color=iff(macd > 0.12*close , fuchsia, na))
barcolor(color=iff(macd < -0.1*close , lime, na))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1  and rsi<27 and fastMA< slowMA


plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)


// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay   = input(defval = 01, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 2, title = "To Month", minval = 1)
ToDay     = input(defval = 10, title = "To Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2018)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

अधिक