लॉन्ग-शॉर्ट रैखिक प्रतिगमन क्रॉसओवर रणनीति एक तकनीकी विश्लेषण रणनीति है जो एक स्टॉक के भविष्य के मूल्य आंदोलनों की भविष्यवाणी करने के लिए रैखिक प्रतिगमन मॉडल का उपयोग करती है। रणनीति का मूल सिद्धांत यह हैः स्टॉक मूल्य आंदोलन अक्सर एक निश्चित रैखिक प्रवृत्ति का पालन करते हैं, और कीमत के रैखिक प्रतिगमन की गणना करके, भविष्य की कीमत की भविष्यवाणी की जा सकती है। रणनीति तब लंबी जाती है जब भविष्यवाणी की गई कीमत वर्तमान मूल्य से ऊपर पार करती है, और स्थिति से बाहर निकलती है जब यह नीचे पार करती है।
रणनीति पहले एक निश्चित अवधि में स्टॉक मूल्य के रैखिक प्रतिगमन की गणना करती है। रैखिक प्रतिगमन सबसे कम वर्ग विधि का उपयोग करके एक सीधी रेखा फिट बैठता है, जो समय के साथ मूल्य परिवर्तन की प्रवृत्ति का प्रतिनिधित्व करता है। फिर रणनीति भविष्यवाणी की गई मूल्य रेखा और चार्ट पर वर्तमान मूल्य को प्लॉट करती है।
रणनीति दो संकेतों को परिभाषित करती हैः
जब लॉन्ग सिग्नल दिखाई देता है, तो रणनीति एक लंबी स्थिति खोलती है; जब शॉर्ट सिग्नल दिखाई देता है, तो यह स्थिति को बंद कर देती है।
इस रणनीति के मुख्य चरण इस प्रकार हैंः
लंबी-छोटी रैखिक प्रतिगमन क्रॉसओवर रणनीति के निम्नलिखित फायदे हैंः
अपने अनेक लाभों के बावजूद, लंबी-छोटी रैखिक प्रतिगमन क्रॉसओवर रणनीति में कुछ जोखिम भी हैं:
Long-Short Linear Regression Crossover Strategy Linear Regression और वर्तमान मूल्य की तुलना के आधार पर ट्रेडिंग सिग्नल उत्पन्न करता है। रणनीति का तर्क सरल और स्पष्ट है, और यह मूल्य की रैखिक प्रवृत्ति को पकड़ सकता है और विभिन्न बाजार स्थितियों पर लागू हो सकता है। साथ ही, रणनीति को लागू करना और अनुकूलित करना आसान है, और मापदंडों को लचीले ढंग से समायोजित किया जा सकता है, अन्य संकेतकों के साथ संयुक्त किया जा सकता है, जोखिम नियंत्रण मॉड्यूल जोड़े जा सकते हैं, आदि, रणनीति के प्रदर्शन में लगातार सुधार करने के लिए। हालांकि, रणनीति में गलत प्रवृत्ति पहचान, अनुचित पैरामीटर सेटिंग्स और ऐतिहासिक डेटा के अतिपूर्ति जैसे जोखिम भी हैं, इसलिए व्यावहारिक अनुप्रयोग में सावधानी बरतने की आवश्यकता है। कुल मिलाकर, Long-Short Linear Regression Crossover Strategy एक सरल और प्रभावी मात्रात्मक ट्रेडिंग रणनीति है जिसे आगे की खोज और अनुकूलन के लायक है।
/*backtest start: 2024-02-25 00:00:00 end: 2024-03-26 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © stocktechbot //@version=5 strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0) //Linear Regression vol = volume // Function to calculate linear regression linregs(y, x, len) => ybar = math.sum(y, len)/len xbar = math.sum(x, len)/len b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len) a = ybar - b*xbar [a, b] // Historical stock price data price = close // Length of linear regression len = input(defval = 21, title = 'Strategy Length') linearlen=input(defval = 9, title = 'Linear Lookback') [a, b] = linregs(price, vol, len) // Calculate linear regression for stock price based on volume //eps = request.earnings(syminfo.ticker, earnings.actual) //MA For double confirmation out = ta.sma(close, 200) outf = ta.sma(close, 50) outn = ta.sma(close, 90) outt = ta.sma(close, 21) outthree = ta.sma(close, 9) // Predicted stock price based on volume predicted_price = a + b*vol // Check if predicted price is between open and close is_between = open < predicted_price and predicted_price < close //MACD //[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // Plot predicted stock price plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price") plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price") //offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) plot(out, color=color.blue, title="MA200") [macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9) //BUY Signal longCondition=false mafentry =ta.sma(close, 50) > ta.sma(close, 90) //matentry = ta.sma(close, 21) > ta.sma(close, 50) matwohun = close > ta.sma(close, 200) twohunraise = ta.rising(out, 2) twentyrise = ta.rising(outt, 2) macdrise = ta.rising(macdLine,2) macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen)) and (signalLine < macdLine) if macdlong and macdrise longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) daysSinceEntry = len daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000)) percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100 //trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100 //label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange))) shortCondition=false mafexit =ta.sma(close, 50) < ta.sma(close, 90) matexit = ta.sma(close, 21) < ta.sma(close, 50) matwohund = close < ta.sma(close, 200) twohunfall = ta.falling(out, 3) twentyfall = ta.falling(outt, 2) shortmafall = ta.falling(outthree, 1) macdfall = ta.falling(macdLine,1) macdsell = macdLine < signalLine if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)