A estratégia é chamada de
Estratégia geral: A estratégia constrói três grupos de linhas de indicadores MA com parâmetros diferentes, representando as tendências rápidas, médias e lentas do mercado. Enquanto isso, os indicadores de filtro são usados para filtrar sinais falsos e formar a base para julgamentos longos e curtos. A estratégia tem diversos métodos de otimização e filtragem lógica, usando indicadores técnicos como cruzamento de média móvel, RSI sobrecomprado e sobrevendido e breakouts de Bollinger Bands para julgamento composto. Pode determinar efetivamente os pontos de compra e venda de extremos de preço e capturar tendências oscilantes, reduzindo os riscos do mercado. A estratégia tem vantagens significativas.
Princípios de estratégia:
Vantagens da Estratégia:
Riscos e prevenção:
Optimização da estratégia:
Conclusão:
No mercado de criptomoedas em constante flutuação, esta estratégia aproveita a oportunidade para fazer negociações frequentes durante os altos e baixos das ondas de mercado. Ao definir os indicadores de MA e julgamentos de filtragem auxiliares para alternar entre posições longas e curtas, ele capta o momento chave de reversão do mercado. Também pode ser otimizado adicionando módulos de stop loss para reduzir perdas individuais e obter retornos positivos de longo prazo através da automação da estratégia.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // // Bannos // #NotTradingAdvice #DYOR // Disclaimer. // I AM NOT A FINANCIAL ADVISOR. // THESE IDEAS ARE NOT ADVICE AND ARE FOR EDUCATION PURPOSES ONLY. // ALWAYS DO YOUR OWN RESEARCH // // Author: Adaptation from JustUncleL Big Snapper by Bannos // Date: May-2022 // Version: R1.0 //Description of this addon - Script using several new conditions to give Long/short and SL levels which was not proposed in the Big Snapper strategy "Big Snapper Alerts R3.0" //" //This strategy is based on the use of the Big Snapper outputs from the JustUncleL script and the addition of several conditions to define filtered conditions selecting signal synchrones with a trend and a rise of the volatility. //Also the strategy proposes to define proportional stop losses and dynamic Take profit using an RSI strategy. // After delivering the temporary ong/short signal and ploting a green or purple signal, several conditions are defined to consider a Signal is Long or short. //Let s take the long signal as example(this is the same process with the opposite values for a short). //step 1 - Long Definition: // Snapper long signal stored in the buffer variable Longbuffer to say that in a close future, we could have all conditions for a long // Now we need some conditions to combine with it: //the second one is to be over the Ma_medium(55) //and because this is not selective enough, the third one is a Volatility indicator "Chaikin Volatility" indicator giving an indication about the volatility of the price compared to the 10 last values // -> Using the volatility indicator gives the possibility to increase the potential rise if the volatility is higher compared to the last periods. //With these 3 signals, we get a robust indication about a potential long signal which is then stored in the variable "Longe" //Now we have a long signal and can give a long signal with its Stop Loss // The Long Signal is automatically given as the 3 conditions above are satisfied. // The Stop loss is a function of the last Candle sizes giving a stop below the 70% of the overall candle which can be assimilated to a Fibonacci level. Below this level it makes sense to stop the trade as the chance to recover the complete Candle is more than 60% //Now we are in an open Long and can use all the mentioned Stop loss condition but still need a Take Profit condition //The take profit condition is based on a RSI strategy consisting in taking profit as soon as the RSI come back from the overbought area (which is here defined as a rsi over 70) and reaching the 63.5 level to trigger the Take Profit //This TP condition is only active when Long is active and when an entry value as been defined. //Entry and SL level appreas as soon as a Long or short arrow signal does appears. The Take profit will be conidtioned to the RSI. //The final step in the cycle is a reinitialization of all the values giving the possibility to detect and treat any long new signal coming from the Big Snapper signal. //------------------------------------------------------------------------------------------------------- strategy(title='Big Snapper Alerts R3.0 + Chaiking Volatility condition + TP RSI', shorttitle='SNAPPER Bannos', overlay=true) // === INPUTS === // Coloured MA - type, length, source typeColoured = input.string(defval='HullMA', title='Coloured MA Type: ', options=['SMA', 'EMA', 'WMA', 'VWMA', 'SMMA', 'DEMA', 'TEMA', 'HullMA', 'ZEMA', 'TMA', 'SSMA']) lenColoured = input.int(defval=18, title='Coloured MA - Length', minval=1) srcColoured = input(close, title='Coloured MA - Source') // Fast MA - type, length typeFast = input.string(defval='EMA', title='Fast MA Type: ', options=['SMA', 'EMA', 'WMA', 'VWMA', 'SMMA', 'DEMA', 'TEMA', 'HullMA', 'ZEMA', 'TMA', 'SSMA']) lenFast = input.int(defval=21, title='Fast MA - Length', minval=1) // Medium MA - type, length typeMedium = input.string(defval='EMA', title='Medium MA Type: ', options=['SMA', 'EMA', 'WMA', 'VWMA', 'SMMA', 'DEMA', 'TEMA', 'HullMA', 'ZEMA', 'TMA', 'SSMA']) lenMedium = input.int(defval=55, title='Medium MA - Length', minval=1) // Slow MA - type, length typeSlow = input.string(defval='EMA', title='Slow MA Type: ', options=['SMA', 'EMA', 'WMA', 'VWMA', 'SMMA', 'DEMA', 'TEMA', 'HullMA', 'ZEMA', 'TMA', 'SSMA']) lenSlow = input.int(defval=89, title='Slow MA Length', minval=1) // 3xMA source ma_src = input(close, title='3xMA and Bollinger Source') // filterOption = input.string('SuperTrend', title='Signal Filter Option : ', options=['3xMATrend', 'SuperTrend', 'SuperTrend+3xMA', 'ColouredMA', 'No Alerts', 'MACross', 'MACross+ST', 'MACross+3xMA', 'OutsideIn:MACross', 'OutsideIn:MACross+ST', 'OutsideIn:MACross+3xMA']) // hideMALines = input(false) hideSuperTrend = input(true) hideBollingerBands = input(true) hideTrendDirection = input(true) // disableFastMAFilter = input(false) disableMediumMAFilter = input(false) disableSlowMAFilter = input(false) // uKC = false // input(false,title="Use Keltner Channel (KC) instead of Bollinger") bbLength = input.int(20, minval=2, step=1, title='Bollinge Bands Length') bbStddev = input.float(2.0, minval=0.5, step=0.1, title='Bollinger Bands StdDevs') oiLength = input(8, title='Bollinger Outside In LookBack') // SFactor = input.float(3.618, minval=1.0, title='SuperTrend Factor') SPd = input.int(5, minval=1, title='SuperTrend Length') // buyColour_ = input.string('Green', title='BUY Marker Colour: ', options=['Green', 'Lime', 'Aqua', 'DodgerBlue', 'Gray', 'Yellow']) sellColour_ = input.string('Maroon', title='SELL Marker Colour: ', options=['Maroon', 'Red', 'Fuchsia', 'Blue', 'Black', 'Orange']) // --- Allocate Correct Filtering Choice // Can only be one choice uSuperTrendFilter = filterOption == 'SuperTrend' ? true : false u3xMATrendFilter = filterOption == '3xMATrend' ? true : false uBothTrendFilters = filterOption == 'SuperTrend+3xMA' ? true : false //uOIFilter = filterOption == "OutsideIn:ClrMA" ? true : false uOIMACrossFilter = filterOption == 'OutsideIn:MACross' ? true : false uOI3xMAFilter = filterOption == 'OutsideIn:MACross+3xMA' ? true : false uOISTFilter = filterOption == 'OutsideIn:MACross+ST' ? true : false uMACrossFilter = filterOption == 'MACross' ? true : false uMACrossSTFilter = filterOption == 'MACross+ST' ? true : false uMACross3xMAFilter = filterOption == 'MACross+3xMA' ? true : false // unless all 3 MAs disabled. disable3xMAFilter = disableFastMAFilter and disableMediumMAFilter and disableSlowMAFilter u3xMATrendFilter := disable3xMAFilter ? false : u3xMATrendFilter // if no filters selected then must be "No Filters" option disableAllFilters = u3xMATrendFilter or uSuperTrendFilter or uBothTrendFilters or uOI3xMAFilter or uOISTFilter or uOIMACrossFilter or uMACrossFilter or uMACrossSTFilter or uMACross3xMAFilter ? false : true // if "No Alerts" option selected, then disable all selections disableAllFilters := filterOption == 'No Alerts' ? false : disableAllFilters uSuperTrendFilter := filterOption == 'No Alerts' ? false : uSuperTrendFilter u3xMATrendFilter := filterOption == 'No Alerts' ? false : u3xMATrendFilter uBothTrendFilters := filterOption == 'No Alerts' ? false : uBothTrendFilters //uOIFilter := filterOption == "No Alerts"? false : uOIFilter uOIMACrossFilter := filterOption == 'No Alerts' ? false : uOIMACrossFilter uOI3xMAFilter := filterOption == 'No Alerts' ? false : uOI3xMAFilter uOISTFilter := filterOption == 'No Alerts' ? false : uOISTFilter uMACrossFilter := filterOption == 'No Alerts' ? false : uMACrossFilter uMACrossSTFilter := filterOption == 'No Alerts' ? false : uMACrossSTFilter uMACross3xMAFilter := filterOption == 'No Alerts' ? false : uMACross3xMAFilter // --- CONSTANTS --- dodgerblue = #1E90FF lightcoral = #F08080 buyColour = color.green // for big Arrows, must be a constant. sellColour = color.maroon // for big Arrows // Colour Selectable for Big Fat Bars. buyclr = buyColour_ == 'Lime' ? color.lime : buyColour_ == 'Aqua' ? color.aqua : buyColour_ == 'DodgerBlue' ? dodgerblue : buyColour_ == 'Gray' ? color.gray : buyColour_ == 'Yellow' ? color.yellow : color.green sellclr = sellColour_ == 'Red' ? color.red : sellColour_ == 'Fuchsia' ? color.fuchsia : sellColour_ == 'Blue' ? color.blue : sellColour_ == 'Black' ? color.black : sellColour_ == 'Orange' ? color.orange : color.maroon // === /INPUTS === // === FUNCTIONS === // Returns MA input selection variant, default to SMA if blank or typo. variant(type, src, len) => v1 = ta.sma(src, len) // Simple v2 = ta.ema(src, len) // Exponential v3 = ta.wma(src, len) // Weighted v4 = ta.vwma(src, len) // Volume Weighted v5 = 0.0 sma_1 = ta.sma(src, len) // Smoothed v5 := na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len v6 = 2 * v2 - ta.ema(v2, len) // Double Exponential v7 = 3 * (v2 - ta.ema(v2, len)) + ta.ema(ta.ema(v2, len), len) // Triple Exponential v8 = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) // Hull WMA = (2*WMA (n/2) − WMA (n)), sqrt (n)) v11 = ta.sma(ta.sma(src, len), len) // Triangular // SuperSmoother filter // © 2013 John F. Ehlers a1 = math.exp(-1.414 * 3.14159 / len) b1 = 2 * a1 * math.cos(1.414 * 3.14159 / len) c2 = b1 c3 = -a1 * a1 c1 = 1 - c2 - c3 v9 = 0.0 v9 := c1 * (src + nz(src[1])) / 2 + c2 * nz(v9[1]) + c3 * nz(v9[2]) // Zero Lag Exponential e = ta.ema(v1, len) v10 = v1 + v1 - e // return variant, defaults to SMA if input invalid. type == 'EMA' ? v2 : type == 'WMA' ? v3 : type == 'VWMA' ? v4 : type == 'SMMA' ? v5 : type == 'DEMA' ? v6 : type == 'TEMA' ? v7 : type == 'HullMA' ? v8 : type == 'SSMA' ? v9 : type == 'ZEMA' ? v10 : type == 'TMA' ? v11 : v1 // === /FUNCTIONS === // === SERIES VARIABLES === // MA's ma_fast = variant(typeFast, ma_src, lenFast) ma_medium = variant(typeMedium, ma_src, lenMedium) ma_slow = variant(typeSlow, ma_src, lenSlow) ma_coloured = variant(typeColoured, srcColoured, lenColoured) // Get Direction of Coloured Moving Average clrdirection = 1 falling_1 = ta.falling(ma_coloured, 2) clrdirection := ta.rising(ma_coloured, 2) ? 1 : falling_1 ? -1 : nz(clrdirection[1], 1) // get 3xMA trend direction based on selections. madirection = ma_fast > ma_medium and ma_medium > ma_slow ? 1 : ma_fast < ma_medium and ma_medium < ma_slow ? -1 : 0 madirection := disableSlowMAFilter ? ma_fast > ma_medium ? 1 : ma_fast < ma_medium ? -1 : 0 : madirection madirection := disableMediumMAFilter ? ma_fast > ma_slow ? 1 : ma_fast < ma_slow ? -1 : 0 : madirection madirection := disableFastMAFilter ? ma_medium > ma_slow ? 1 : ma_medium < ma_slow ? -1 : 0 : madirection madirection := disableFastMAFilter and disableMediumMAFilter ? ma_coloured > ma_slow ? 1 : -1 : madirection madirection := disableFastMAFilter and disableSlowMAFilter ? ma_coloured > ma_medium ? 1 : -1 : madirection madirection := disableSlowMAFilter and disableMediumMAFilter ? ma_coloured > ma_fast ? 1 : -1 : madirection // // Supertrend Calculations SUp = hl2 - SFactor * ta.atr(SPd) SDn = hl2 + SFactor * ta.atr(SPd) STrendUp = 0.0 STrendDown = 0.0 STrendUp := close[1] > STrendUp[1] ? math.max(SUp, STrendUp[1]) : SUp STrendDown := close[1] < STrendDown[1] ? math.min(SDn, STrendDown[1]) : SDn STrend = 0 STrend := close > STrendDown[1] ? 1 : close < STrendUp[1] ? -1 : nz(STrend[1], 1) Tsl = STrend == 1 ? STrendUp : STrendDown // Standard Bollinger or KC Bands basis = ta.sma(ma_src, bbLength) rangema = ta.sma(ta.tr, bbLength) stdev_1 = ta.stdev(ma_src, bbLength) dev = uKC ? bbStddev * rangema : bbStddev * stdev_1 // Calculate Bollinger or KC Channel upper = basis + dev lower = basis - dev // Lookback for previous highest bar index noiupper = math.abs(ta.highestbars(oiLength)) noilower = math.abs(ta.lowestbars(oiLength)) // ColouredMA OutsideIn //oiupper = clrdirection<0 and noiupper>0 and highest(oiLength)>upper[noiupper]? 1 : 0 //oilower = clrdirection>0 and noilower>0 and lowest(oiLength)<lower[noilower]? 1 : 0 // MACross OutsideIN oiMACrossupper = ta.crossunder(ma_fast, ma_coloured) and noiupper > 0 and ta.highest(oiLength) > upper[noiupper] ? 1 : 0 oiMACrosslower = ta.crossover(ma_fast, ma_coloured) and noilower > 0 and ta.lowest(oiLength) < lower[noilower] ? 1 : 0 // === /SERIES VARIABLES === // === PLOTTING === // All the MA's plot(ma_coloured, title='Coloured MA', color=clrdirection < 0 ? lightcoral : color.blue, linewidth=3, transp=20) plot(hideMALines ? na : ma_fast, title='Fast MA', color=color.new(color.lime, 20), linewidth=2) plot(hideMALines ? na : ma_medium, title='Medium MA', color=color.new(color.red, 10), linewidth=2) plot(hideMALines ? na : ma_slow, title='Slow MA', color=color.new(color.gray, 10), linewidth=2) // show 3xMA Trend Direction State. dcolour = madirection == 1 ? color.green : madirection == -1 ? color.red : color.yellow plotshape(hideTrendDirection ? na : madirection, title='3xMA Trend Direction', location=location.bottom, style=shape.square, color=dcolour, transp=10) // SuperTrend plot(hideSuperTrend ? na : Tsl, color=STrend == 1 ? color.green : color.maroon, style=plot.style_line, linewidth=2, title='SuperTrend') // Bollinger Bands p1 = plot(hideBollingerBands ? na : upper, title='BB upper', color=color.new(dodgerblue, 20), linewidth=1) p2 = plot(hideBollingerBands ? na : lower, title='BB lower', color=color.new(dodgerblue, 20), linewidth=1) fill(p1, p2, color=color.new(dodgerblue, 96), title='BB fill') // === /PLOTTING === // === ALERTING === // 3xMA Filtering _3xmabuy = 0 _3xmasell = 0 _3xmabuy := clrdirection == 1 and close > ma_fast and madirection == 1 ? nz(_3xmabuy[1]) + 1 : clrdirection == 1 and madirection == 1 ? nz(_3xmabuy[1]) > 0 ? nz(_3xmabuy[1]) + 1 : 0 : 0 _3xmasell := clrdirection == -1 and close < ma_fast and madirection == -1 ? nz(_3xmasell[1]) + 1 : clrdirection == -1 and madirection == -1 ? nz(_3xmasell[1]) > 0 ? nz(_3xmasell[1]) + 1 : 0 : 0 // // SuperTrend Filtering stbuy = 0 stsell = 0 stbuy := clrdirection == 1 and STrend == 1 ? nz(stbuy[1]) + 1 : 0 stsell := clrdirection == -1 and STrend == -1 ? nz(stsell[1]) + 1 : 0 // // 3xMA & SuperTrend Filtering // st3xmabuy = 0 st3xmasell = 0 st3xmabuy := (disable3xMAFilter or _3xmabuy > 0) and stbuy > 0 ? nz(st3xmabuy[1]) + 1 : 0 st3xmasell := (disable3xMAFilter or _3xmasell > 0) and stsell > 0 ? nz(st3xmasell[1]) + 1 : 0 // Bollinger Outside In using ColuredMA direction Filter. //oibuy = 0 //oisell = 0 //oibuy := clrdirection == 1 and oilower==1? nz(oibuy[1])+1 : 0 //oisell := clrdirection ==-1 and oiupper==1? nz(oisell[1])+1 : 0 // Bollinger Outside In using MACross signal Filter oiMACrossbuy = 0 oiMACrosssell = 0 oiMACrossbuy := oiMACrosslower == 1 ? nz(oiMACrossbuy[1]) + 1 : 0 oiMACrosssell := oiMACrossupper == 1 ? nz(oiMACrosssell[1]) + 1 : 0 // Bollinger Outside In + 3xMA Filter oi3xmabuy = 0 oi3xmasell = 0 oi3xmabuy := oiMACrossbuy > 0 and (disable3xMAFilter or madirection == 1) ? nz(oi3xmabuy[1]) + 1 : 0 oi3xmasell := oiMACrosssell > 0 and (disable3xMAFilter or madirection == -1) ? nz(oi3xmasell[1]) + 1 : 0 // Bollinger Outside In + SuperTrend Filter oistbuy = 0 oistsell = 0 oistbuy := oiMACrossbuy > 0 and STrend == 1 ? nz(oistbuy[1]) + 1 : 0 oistsell := oiMACrosssell > 0 and STrend == -1 ? nz(oistsell[1]) + 1 : 0 // FastMA crossover HullMA and SuperTrend macrossSTbuy = 0 macrossSTsell = 0 macrossSTbuy := ta.crossover(ma_fast, ma_coloured) and STrend == 1 ? nz(macrossSTbuy[1]) + 1 : 0 macrossSTsell := ta.crossunder(ma_fast, ma_coloured) and STrend == -1 ? nz(macrossSTsell[1]) + 1 : 0 // FastMA crossover HullMA and 3xMA macross3xMAbuy = 0 macross3xMAsell = 0 macross3xMAbuy := ta.crossover(ma_fast, ma_coloured) and (disable3xMAFilter or madirection == 1) ? nz(macross3xMAbuy[1]) + 1 : 0 macross3xMAsell := ta.crossunder(ma_fast, ma_coloured) and (disable3xMAFilter or madirection == -1) ? nz(macross3xMAsell[1]) + 1 : 0 // // Check any Alerts set long = u3xMATrendFilter and _3xmabuy == 1 or uSuperTrendFilter and stbuy == 1 or uBothTrendFilters and st3xmabuy == 1 or uOI3xMAFilter and oi3xmabuy == 1 or uOISTFilter and oistbuy == 1 or uOIMACrossFilter and oiMACrossbuy == 1 or uMACrossSTFilter and macrossSTbuy == 1 or uMACross3xMAFilter and macross3xMAbuy == 1 short = u3xMATrendFilter and _3xmasell == 1 or uSuperTrendFilter and stsell == 1 or uBothTrendFilters and st3xmasell == 1 or uOI3xMAFilter and oi3xmasell == 1 or uOISTFilter and oistsell == 1 or uOIMACrossFilter and oiMACrosssell == 1 or uMACrossSTFilter and macrossSTsell == 1 or uMACross3xMAFilter and macross3xMAsell == 1 // // If Alert Detected, then Draw Big fat liner plotshape(long ? long : na, title='Long Line Marker', location=location.belowbar, style=shape.arrowup, color=buyclr, size=size.auto, text='████████████████', textcolor=buyclr, transp=20) plotshape(short ? short : na, title='Short Line Marker', location=location.abovebar, style=shape.arrowdown, color=sellclr, size=size.auto, text='████████████████', textcolor=sellclr, transp=20) // --- Arrow style signals // No Filters only Hull Signals hbuy = 0 hsell = 0 hbuy := clrdirection == 1 ? nz(hbuy[1]) + 1 : 0 hsell := clrdirection == -1 ? nz(hsell[1]) + 1 : 0 // FastMA crossover HullMA macrossbuy = 0 macrosssell = 0 macrossbuy := ta.crossover(ma_fast, ma_coloured) ? nz(macrossbuy[1]) + 1 : 0 macrosssell := ta.crossunder(ma_fast, ma_coloured) ? nz(macrosssell[1]) + 1 : 0 // along = disableAllFilters and hbuy == 1 or uMACrossFilter and macrossbuy == 1 ashort = disableAllFilters and hsell == 1 or uMACrossFilter and macrosssell == 1 // // If ColouredMA or MACross then draw big arrows plotarrow(along ? 1 : ashort ? -1 : na, title='ColouredMA or MACross Arrow', colorup=color.new(buyColour, 20), colordown=color.new(sellColour, 20), maxheight=100, minheight=50) //----------Input Bannos----------------------------------------------------------------------------------------------------------// var triggerlong = 0 var triggershort = 0 var up = 0 var down = 0 var bool longe = 0 var bool shorte = 0 var SL = 0 var entryvalueup = 0.00 var entryvaluedown = 0.00 var SLfactor = 0.5/100 var SLup = 0.00 var SLdown = 0.00 var longbuffer = 0 var shortbuffer = 0 //RSI parameters overbought = input(70, title="overbought value") oversold = input(30, title="oversold value") sellRsi = ta.rsi(close, 11) > overbought buyRsi = ta.rsi(close, 11) < oversold var tampon_overbought = 0 var tampon_oversold = 0 //condition to use RSI if sellRsi tampon_overbought := 1 if buyRsi tampon_oversold := 1 //close condition SL if entryvalueup > 0 and low < SLup SL := 1 //Chaikin Volatility Strategy indicator if Volatility > 0 then Long or short, otherweise no Length = input.int(10, '', minval=1) ROCLength = input.int(12, '',minval=1) Trigger = input.int(0, '',minval=0) hline(0) hline(Trigger) xPrice1 = high xPrice2 = low xPrice = xPrice1 - xPrice2 xROC_EMA = ta.roc(ta.ema(xPrice, Length), ROCLength) var pos = 0 if xROC_EMA < Trigger pos := 1 nz(pos[1], 0) if xROC_EMA > Trigger pos := -1 nz(pos[1], 0) //----------------------------------------------------------------------------- // plot(xROC_EMA, title="Chaikin Volatility Strategy") // plot(longe ? 1 : 0, 'longe') // plot(shorte ? 1 : 0, 'shorte') plot(entryvalueup, 'entree Long') plot(SLup, 'SL Long') plot(entryvaluedown, 'entree Short') plot(SLdown, 'SL Short') // plot(entryvalueup, 'entrryvalueup') // plot(entryvaluedown, 'entrryvaluedown') // plot(up, 'up') //plot(down, 'down') // plot(ta.rsi(close, 11), 'RSI') // plot(tampon_overbought, 'tampon Overbought') // plot(tampon_oversold, 'tampon Oversold') // plot( triggerlong, ' triggerlong') //plot( triggershort, ' triggershort') // plot(sellRsi ? 1 : 0, 'sellRsi') //close condition TP closelong = (tampon_overbought == 1 and ta.rsi(close, 11) < 63.8 or shorte or SL == 1) closeshort = (tampon_oversold == 1 and ta.rsi(close, 11) > 36.2 or longe or SL == 1) //reinit after long Close if closelong up := 0 longe := 0 tampon_overbought := 0 triggerlong := 0 SL := 0 entryvalueup := 0 SLup := 0 //reinit after short Close if closeshort down := 0 shorte := 0 tampon_oversold := 0 triggershort := 0 SL := 0 entryvaluedown := 0 SLdown := 0 //condition sous sur MA SLOW to start if close < ma_medium triggerlong := 0 triggershort := 1 if close > ma_medium triggershort := 0 triggerlong := 1 // Update alarm conditions if long or along longbuffer := 1 if short or ashort shortbuffer := 1 longe := longbuffer and triggerlong and xROC_EMA > 3.5 shorte := shortbuffer and triggershort and xROC_EMA > 3.5 // // var longe = long ? 1 : 0 // // var shorte = short ? 1 : 0 if longe == 1 and close > open up := 1 down := 0 entryvalueup :=close SLup := close - 0.7*(high - low) SLdown := 0 longbuffer := 0 if shorte == 1 and close < open down := 1 up := 0 entryvaluedown := close SLdown := close + 0.7*(high - low) SLup := 0 shortbuffer := 0 strategy.entry('longe', strategy.long, 1, when = up) strategy.entry('shorte', strategy.short, 1, when = down) strategy.close('longe', when= closelong) strategy.close('shorte', when= closeshort) // === /ALERTING === // === ALARMS === // alertcondition(up or down or closelong or closeshort, title='Signal Alert', message='SIGNAL') alertcondition(up, title='Long Alert', message='LONG') alertcondition(down, title='Short Alert', message='SHORT') alertcondition(closelong, title='close Long Alert', message='Close LONG') alertcondition(closeshort, title='close Short Alert', message='Close SHORT') // === /ALARMS === //EOF