यह रणनीति विभिन्न तकनीकी संकेतकों और रणनीतियों को जोड़ती है, मुख्य रूप से सूचकांक प्रवेश और निकास बिंदुओं को निर्धारित करने के लिए।
मुख्य तर्क यह है:
खुली, बंद, उच्च और निम्न सहित चलती औसत मोमबत्तियों की गणना
एमए मोमबत्ती और मोमबत्ती रैखिक प्रतिगमन की गति की गणना
एमए मोमबत्तियों की रैखिक प्रतिगमन की गणना स्वयं
समग्र दिशा निर्धारित करने के लिए सुपरट्रेंड का प्रयोग करें
जब गति प्रतिगमन नकारात्मक से सकारात्मक या बहुत सकारात्मक हो जाता है, यह प्रवेश का संकेत देता है
जब गति सकारात्मक से नकारात्मक हो जाती है, या कमजोर हो जाती है, यह बाहर निकलने का संकेत देता है
यह रणनीति सूचकांक व्यापार के समय को निर्धारित करने के लिए अल्पकालिक और दीर्घकालिक बाजार आंदोलनों और लय का आकलन करने के लिए विभिन्न संकेतकों को संश्लेषित करती है।
एमए मोमबत्तियां मध्यम से दीर्घकालिक रुझानों को दर्शाती हैं
प्रतिगमन विश्लेषण प्रवृत्ति परिवर्तनों की पहचान करता है
सुपरट्रेंड समग्र दिशा में सहायता करता है
कई संकेतक सटीकता में सुधार करते हैं
जटिल पैरामीटर अनुकूलन
कई संकेतकों का संतुलन बनाना मुश्किल
दुर्लभ संकेतों का अर्थ है कम व्यापार आवृत्ति
इस रणनीति का उद्देश्य अल्पकालिक और दीर्घकालिक पैटर्न का विश्लेषण करके बाजार समय संकेतों का पता लगाना है। लेकिन पैरामीटर ट्यूनिंग और मॉडल अनुकूलन में सुधार की आवश्यकता है।
/*backtest start: 2023-09-06 00:00:00 end: 2023-09-13 00:00:00 period: 15m basePeriod: 5m 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("MACandles-LinearRegression-Strategy", shorttitle="MALinReg - Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01) resolution = "" MAType = input(title="Moving Average Type (MA Candles)", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) LoopbackBars = input(60, title="Length (MA Candles)", step=10) MMAType = input(title="Moving Average Type (Momentum)", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) MLength = input(20, title="MA Length (Momentum)", step=10) lb = input(40 , title="Look Back Period Percentile High/Low", step=10, minval=10, maxval=100) ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%") pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%") mult = input(3.0 , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up") aggressiveLong = input(true) longTrades = input(true) useVixFix = input(false) i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time) i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time) inDateRange = true f_getMovingAverage(source, MAType, length)=> ma = sma(source, length) if(MAType == "ema") ma := ema(source,length) if(MAType == "hma") ma := hma(source,length) if(MAType == "rma") ma := rma(source,length) if(MAType == "vwma") ma := vwma(source,length) if(MAType == "wma") ma := wma(source,length) ma f_getMACandles(resolution, MAType, LoopbackBars)=> oOpen = f_getMovingAverage(open, MAType, LoopbackBars) oClose = f_getMovingAverage(close, MAType, LoopbackBars) oHigh = f_getMovingAverage(high, MAType, LoopbackBars) oLow = f_getMovingAverage(low, MAType, LoopbackBars) [oOpen, oClose, oHigh, oLow] f_getVixFixLinReg(oClose, oLow, MLength)=> wvf = ((highest(oClose, MLength)-oLow)/(highest(oClose, MLength)))*100 sDev = mult * stdev(wvf, MLength) midLine = sma(wvf, MLength) lowerBand = midLine - sDev upperBand = midLine + sDev rangeHigh = (highest(wvf, lb)) * ph rangeLow = (lowest(wvf, lb)) * pl col = wvf >= upperBand or wvf >= rangeHigh ? color.lime : color.gray val = linreg(wvf, MLength, 0) absVal = abs(val) linRegColor = val>val[1]? (val > 0 ? color.green : color.orange): (val > 0 ? color.lime : color.red) vixFixState = (col == color.lime) ? 1: 0 vixFixState := strategy.position_size == 0? max(vixFixState, nz(vixFixState[1],0)) : vixFixState [val, absVal, wvf, col, linRegColor, vixFixState] f_getMACandlesLinReg(oClose, MMAType, MLength, mult, lb, ph, pl)=> ma = f_getMovingAverage(oClose, MMAType, MLength) maDiff = oClose - ma val = linreg(maDiff, MLength,0) absVal = abs(val) linRegColor = iff( val > 0, iff( val > nz(val[1]), color.green, color.lime), iff( val < nz(val[1]), color.red, color.orange)) sDev = mult * stdev(maDiff, MLength) midLine = sma(maDiff, MLength) lowerBand = midLine - sDev upperBand = midLine + sDev rangeHigh = (highest(maDiff, lb)) * ph rangeLow = (lowest(maDiff, lb)) * pl col = maDiff >= upperBand or maDiff >= rangeHigh ? color.lime : maDiff <= lowerBand or maDiff <= rangeLow ? color.orange : color.silver absMaDiff = abs(maDiff) [val, absVal, maDiff, absMaDiff, col, linRegColor] f_getSupertrend(resolution, oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, AtrMult, wicks)=> truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1]) averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength) atr = averagetruerange * AtrMult longWicks = wicks shortWicks = wicks longStop = oClose - atr longStopPrev = nz(longStop[1], longStop) longStop := (longWicks ? oLow[1] : oClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = oClose + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := (shortWicks ? oHigh[1] : oClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and (longWicks ? oHigh : oClose) > shortStopPrev ? 1 : dir == 1 and (shortWicks[1]? oLow : oClose) < longStopPrev ? -1 : dir [dir, longStop, shortStop] f_getMACandlesAndSupertrend(MAType, LoopbackBars, AtrMult, wicks)=> oOpen = f_getMovingAverage(open, MAType, LoopbackBars) oClose = f_getMovingAverage(close, MAType, LoopbackBars) oHigh = f_getMovingAverage(high, MAType, LoopbackBars) oLow = f_getMovingAverage(low, MAType, LoopbackBars) [dir, longStop, shortStop] = f_getSupertrend(resolution, oOpen, oClose, oHigh, oLow, MAType, LoopbackBars, AtrMult, wicks) dir [oOpen, oClose, oHigh, oLow] = f_getMACandles(resolution, MAType, LoopbackBars) dir = f_getMACandlesAndSupertrend("sma", 200, 1, false) colorByPreviousClose = false candleColor = colorByPreviousClose ? (oClose[1] < oClose ? color.green : oClose[1] > oClose ? color.red : color.silver) : (oOpen < oClose ? color.green : oOpen > oClose ? color.red : color.silver) [vval, vabsVal, wvf, vcol, vlinRegColor, vixFixState] = f_getVixFixLinReg(oClose, oLow, MLength) [val, absVal, maDiff, absMaDiff, col, linRegColor] = f_getMACandlesLinReg(oClose, MMAType, MLength, mult, lb, ph, pl) plot(useVixFix?na:absMaDiff, title="Momentum", style=plot.style_histogram, linewidth = 4, color=col) plot(useVixFix?wvf:na, title="VIX Fix", style=plot.style_histogram, linewidth = 4, color=vcol) plot(useVixFix?na:-absVal, title="Linear Regression (Momentum)", style=plot.style_histogram, linewidth=4, color=linRegColor) plot(useVixFix?-vabsVal:na, title="Linear Regression (VIX Fix)", style=plot.style_histogram, linewidth=4, color=vlinRegColor) exitColor = longTrades? color.orange : color.silver exitPreviousColor = longTrades? color.silver : color.lime longCondition = (useVixFix? (vixFixState == 1 and vlinRegColor == color.lime) : ((linRegColor == color.orange and linRegColor[1] == color.red) or (linRegColor == color.green and linRegColor[1] != color.green and aggressiveLong))) and inDateRange and dir>0 exitLongCondition = (col == exitColor and col[1] == exitColor and col[2] == exitPreviousColor and (linRegColor != color.green or not aggressiveLong)) strategy.entry("Long", strategy.long, when=longCondition, oca_name="oca_buy") strategy.close("Long", when=exitLongCondition)