Esta estratégia utiliza o canal ATR e a teoria do breakout para seguir as tendências entrando quando o canal é quebrado.
Esta estratégia constrói bandas superiores e inferiores com preços altos, baixos, fechados e indicador ATR para formar um canal ATR. A largura do canal é determinada pelo tamanho do parâmetro ATR. Quando o preço atravessa o canal, ele é julgado como o início de uma tendência, em que os pontos de posições longas ou curtas são inseridas. A estratégia tem duas camadas de sinais de negociação. Quando o preço atravessa uma largura ATR, ele é considerado uma tendência emergente, desencadeando a primeira camada de pontos de compra/venda. Quando o preço atravessa duas larguras ATR, ele é considerado uma tendência acelerada, desencadeando a segunda camada de pontos de compra/venda.
As principais vantagens desta estratégia são:
Os principais riscos desta estratégia são:
As direcções de otimização desta estratégia incluem:
O quadro geral desta estratégia é claro e utilizável como prova de conceito. Mas existem lacunas no comércio ao vivo que permitem otimizações substanciais. Se os controles de risco e as frequências de negociação puderem ser melhorados, as perspectivas de aplicação seriam boas.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Myhaj_Lito //@version=5 strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true) TF = input.timeframe(title='TimeFrame', defval="60") ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000) HIGH = request.security(syminfo.tickerid, TF, high) LOW = request.security(syminfo.tickerid, TF, low) CLOSE = request.security(syminfo.tickerid, TF, close) ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength)) RENKOUP = float(na) RENKODN = float(na) H = float(na) COLOR = color(na) BUY = int(na) SELL = int(na) UP = bool(na) DN = bool(na) CHANGE = bool(na) RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1] RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1] H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1] COLOR := na(COLOR[1]) ? color.white : COLOR[1] BUY := na(BUY[1]) ? 0 : BUY[1] SELL := na(SELL[1]) ? 0 : SELL[1] UP := false DN := false CHANGE := false // calculating if not CHANGE and close >= RENKOUP[1] + H * 2 CHANGE := true UP := true RENKOUP := RENKOUP[1] + ATR * 2 RENKODN := RENKOUP[1] + ATR COLOR := color.rgb(0, 255, 170,60) SELL := 0 BUY += 2 BUY if not CHANGE and close >= RENKOUP[1] + H CHANGE := true UP := true RENKOUP := RENKOUP[1] + ATR RENKODN := RENKOUP[1] COLOR := color.rgb(0, 230, 38,60) SELL := 0 BUY += 1 BUY if not CHANGE and close <= RENKODN[1] - H * 2 CHANGE := true DN := true RENKODN := RENKODN[1] - ATR * 2 RENKOUP := RENKODN[1] - ATR COLOR := color.rgb(255, 92, 43,60) BUY := 0 SELL += 2 SELL if not CHANGE and close <= RENKODN[1] - H CHANGE := true DN := true RENKODN := RENKODN[1] - ATR RENKOUP := RENKODN[1] COLOR := color.rgb(245, 69, 69,60) BUY := 0 SELL += 1 SELL //// STRATEGY if(UP) strategy.entry("Long",strategy.long) if(DN) strategy.entry("Short",strategy.short) // ploting bgcolor(COLOR)