यह बिटकॉइन और एथेरियम के लिए उपयुक्त एक सरल चलती औसत प्रवृत्ति के बाद की रणनीति है। यह प्रवृत्ति की दिशा की पहचान करने के लिए चलती औसत, एमएसीडी और आरएसआई जैसे कई संकेतकों को जोड़ती है, और दीर्घकालिक प्रवृत्ति ट्रैकिंग के लिए निश्चित स्थिति आकार को अपनाती है।
रणनीति का मुख्य तर्क यह है कि जब 20-दिवसीय ईएमए 100-दिवसीय एसएमए के ऊपर और 100-दिवसीय एसएमए 200-दिवसीय एसएमए के ऊपर पार करता है, तो लंबे समय तक जाना है; जब 20-दिवसीय ईएमए 100-दिवसीय एसएमए के नीचे पार करता है, तो बंद स्थिति। यानी, प्रवृत्ति की दिशा निर्धारित करने के लिए विभिन्न अवधियों के तीन चलती औसत का उपयोग करें।
विशेष रूप से, रणनीति 20-दिवसीय ईएमए, 100-दिवसीय एसएमए और 200-दिवसीय एसएमए के मूल्यों की गणना करती है, और प्रवृत्ति का न्याय करने के लिए उनके परिमाण संबंध की तुलना करती है। जब 20-दिवसीय ईएमए 100-दिवसीय एसएमए से ऊपर जाता है, तो इसका मतलब है कि कीमतें बढ़ने लगी हैं। इस बिंदु पर, यदि 100-दिवसीय एसएमए भी 200-दिवसीय एसएमए से अधिक है, तो यह इंगित करता है कि मध्यम और दीर्घकालिक रुझान भी बढ़ रहे हैं। यह एक मजबूत लंबा संकेत है।
एक लंबी स्थिति में प्रवेश करने के बाद, रणनीति प्रवृत्ति का पालन करने के लिए स्थिति को बनाए रखना जारी रखेगी। जब 20-दिवसीय ईएमए 100 दिन के एसएमए से नीचे फिर से पार करता है, तो यह इंगित करता है कि एक अल्पकालिक प्रवृत्ति उलट संकेत हुआ है। इस बिंदु पर, रणनीति नुकसान को रोकने के लिए पदों को बंद करना चुनती है।
इसके अतिरिक्त, रणनीति में प्रवृत्ति की पुष्टि करने के लिए एमएसीडी और आरएसआई जैसे संकेतक भी शामिल हैं। केवल जब एमएसीडी की डीआईएफ लाइन, डीईएमए लाइन और एचआईएसटी बार लाइन सभी बढ़ रही हैं, और आरएसआई संकेतक 50 से ऊपर है, तो यह लंबी स्थिति खोलने का विकल्प चुनता है।
इस रणनीति का सबसे बड़ा लाभ यह है कि इसमें स्पष्ट ट्रेंड ट्रेडिंग नियम तैयार किए गए हैं जो मध्यम और दीर्घकालिक रुझानों को प्रभावी ढंग से ट्रैक कर सकते हैं।
प्रवृत्ति का आकलन करने के लिए कई चलती औसत का प्रयोग करें, जो अपेक्षाकृत विश्वसनीय है।
अल्पकालिक बाजार में उतार-चढ़ाव के बिना रुझान के आंदोलनों को ट्रैक करने के लिए दीर्घकालिक होल्डिंग पोजीशन अपनाएं।
रणनीति संकेत की पुष्टि के लिए एमएसीडी और आरएसआई जैसे संकेतकों का संयोजन झूठे ब्रेकआउट को फ़िल्टर कर सकता है।
प्रवेश और निकास बिंदुओं को निर्धारित करने के लिए ईएमए और एसएमए लाइनों के स्वर्ण क्रॉस और मृत्यु क्रॉस का उपयोग करना, नियम सरल और स्पष्ट हैं।
स्टॉप लॉस के माध्यम से घाटे को सीमित करके जोखिमों को प्रभावी ढंग से नियंत्रित कर सकता है।
इस रणनीति के कुछ जोखिम भी हैं। मुख्य समस्या यह है कि यह समय में नुकसान को रोक नहीं सकती है जब प्रवृत्ति उलट जाती है। विशिष्ट जोखिम और समाधान निम्नलिखित हैंः
समय में रुझान उलटने के बिंदुओं को ट्रैक करने में असमर्थताः चलती औसत चक्रों को छोटा करें, या व्यापक निर्णय के लिए अधिक संकेतक जोड़ें।
लंबे समय तक पकड़ने से आसानी से अधिक नुकसान हो सकता हैः समय पर स्टॉप लॉस के लिए एग्जिट लाइनों को ठीक से छोटा करें।
चलती औसत संकेतक में देरी होती हैः सक्रिय स्टॉप लॉस के लिए स्टॉप लॉस लाइनों का एक निश्चित प्रतिशत जोड़ें।
इस रणनीति को निम्नलिखित पहलुओं में भी अनुकूलित किया जा सकता हैः
इष्टतम मापदंडों को खोजने के लिए चलती औसत चक्रों के अधिक संयोजनों का परीक्षण करें।
रुझानों और प्रवेश समय का न्याय करने के लिए अन्य संकेतकों या मॉडलों का प्रयास करें। जैसे बोलिंगर बैंड, केडी संकेतक, आदि।
गतिशील रूप से मापदंडों को अनुकूलित करने के लिए मशीन लर्निंग और अन्य तरीकों का उपयोग करें। उदाहरण के लिए, स्टॉप लॉस आयाम को समायोजित करने के लिए सुदृढीकरण सीखने का उपयोग करें।
झूठे ब्रेकआउट से बचने के लिए ट्रेडिंग वॉल्यूम संकेतक शामिल करें। उदाहरण के लिए, बैलेंस वॉल्यूम पर, लेनदेन वॉल्यूम आदि।
स्वचालित स्टॉप लॉस और ट्रैकिंग स्टॉप लॉस सिस्टम विकसित करें जो बाजार की स्थितियों के आधार पर स्टॉप लॉस पदों को समायोजित कर सकें।
संक्षेप में, यह रणनीति एक सरल और सीधी प्रवृत्ति के बाद की रणनीति है। यह प्रवृत्ति की दिशा निर्धारित करने के लिए चलती औसत, एमएसीडी और आरएसआई का उपयोग संकेतों को फ़िल्टर करने के लिए करता है। प्रवृत्ति के आंदोलनों को ट्रैक करने के लिए अपेक्षाकृत लंबी होल्डिंग अवधि को अपनाएं। यह प्रभावी रूप से मध्यम और दीर्घकालिक प्रवृत्ति के अवसरों को पकड़ सकता है। साथ ही, प्रवृत्ति उलटों की पहचान करने में पिछड़ने का जोखिम भी है। भविष्य में सुधार और उन्नयन पैरामीटर अनुकूलन, संकेतक जोड़ने आदि के माध्यम से किया जा सकता है।
/*backtest start: 2024-01-16 00:00:00 end: 2024-01-17 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="BTC_Long_Only_TV01_200507", overlay=true) //////////// !!!!!!!!!!!!!!!! WORK BEST IN 2 HOURS for BTC, ETH and ETHXBT !!!!!!!!!!!!!!!!!!! ///////////////////// //280820 - After long esting this is the best script for ETHUSD in 4 hours. From 01/01/2020 til 28/08/2020 [macdLine, macdSignalLine, macdHist] = macd(close, 12, 26, 7) //_rsi_len = input(14, title="RSI length") _rsi_len = 14 NewValue = 0 PreviousValue = 0 leverage = 1 smaPercentageIncrease = 0.0 SMA_PERCENT_INCREASE = 0.0 float atrValue = 0 bool bPositionOpened = false float stockPositionSize = 0 float volatilityPercentage = 0.0 bool bDisplayArrow = false bool bEMAIsRising = false bool bSMAIsRising = false bool bSMASlowIsRising = false bool bMACDIsRising = false bool bMACDHistIsRising = false bool bMACDSignalIsRising = false float stopLoss = input (5, "StopLoss in %", type=input.float) //StopLoss associated with the order //Best for alt versus BTC float stopLoss = input (3, "StopLoss in %", type=input.float) //StopLoss associated with the order float positionSize = 1000 float currentPrice = close float stopLossPrice = 0 float entryPrice = 0 //----------------------------------------------------------- // === INPUT BACKTEST RANGE ONE YEAR //FromDay = input(defval = 01, title = "From Day", minval = 1, maxval = 31) //FromMonth = input(defval = 01, title = "From Month", minval = 1, maxval = 12) //FromYear = input(defval = 2020, title = "From Year", minval = 2017) FromDay = 01 FromMonth = 01 FromYear = 2020 //ToDay = input(defval = 01, title = "To Day", minval = 1, maxval = 31) //ToMonth = input(defval = 01, title = "To Month", minval = 1, maxval = 12) //ToYear = input(defval = 2023, title = "To Year", minval = 2017) ToDay = 14 ToMonth = 05 ToYear = 2029 // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" //FUNCTION DEFINITIONS //---------------------- IsRising(data, loopBack) => bIsRising = true for n = 1 to loopBack if data[n] > data[n-1] bIsRising := false continue bIsRising IsFalling(data, loopBack) => bIsFalling = true for n = 1 to loopBack if data[n] < data[n-1] bIsFalling := false continue bIsFalling // END OF FUNCTION DEFINITIONS // emaLength = 20 smaLength = 100 smaSlowLength = 200 ema = ema(close, emaLength) sma = sma(close, smaLength) smaSlow = sma(close, smaSlowLength) plot(sma, color=color.green) plot(smaSlow, color=color.orange) plot(ema, color=color.yellow) //reload previous values stopLossPrice := na(stopLossPrice[1]) ? 0.0 : stopLossPrice[1] entryPrice := na(entryPrice[1]) ? 0.0 : entryPrice[1] bPositionOpened := na(bPositionOpened[1]) ? false : bPositionOpened[1] positionSize := na(positionSize[1]) ? 1000 : positionSize[1] stockPositionSize := na(stockPositionSize[1]) ? 0 : stockPositionSize[1] //leverage := na(leverage[1]) ? 1 : leverage[1] bEMAIsRising := IsRising(ema, 2) bSMAIsRising := IsRising(sma, 3) bMACDIsRising := IsRising(macdLine, 3) bMACDHistIsRising := IsRising(macdHist, 1) bSMASlowIsRising := IsRising(smaSlow, 10) bMACDSignalIsRising := IsRising(macdSignalLine, 3) atrValue := atr(14) volatilityPercentage := (atrValue/currentPrice)*100 //calcute the volatility. Percentage of the actual price if (window()) //Check if we can open a LONG if (bPositionOpened == false and bSMASlowIsRising == true and bMACDIsRising == true and bEMAIsRising == true and bSMAIsRising == true and ema[0] > sma[0] and sma[0] < currentPrice) //Enter in short position stockPositionSize := (positionSize*leverage)/currentPrice //Calculate the position size based on the actual price and the position Size (in $) configured. //calculate exit values stopLossPrice := currentPrice*(1-stopLoss/100) strategy.entry("myPosition", strategy.long, qty=stockPositionSize, comment="BUY at " + tostring(currentPrice)) entryPrice := currentPrice //store the entry price bPositionOpened := true bDisplayArrow := true if (bPositionOpened == true and (currentPrice <= stopLossPrice or crossunder(ema[1], sma[1]))) strategy.close("myPosition", comment="" + tostring(currentPrice) ) //Stop //uncomment the below line to make the bot investing the full portfolio amount to test compounding effect. //positionSize := positionSize + ((stockPositionSize * currentPrice) - (positionSize*leverage)) //reset some flags bPositionOpened := false bDisplayArrow := true entryPrice := 0.0