Esta é uma estratégia de negociação abrangente projetada para negociação de tempo de 15 minutos de Bitcoin e outras criptomoedas. Combina vários indicadores para gerar sinais de compra e venda, incluindo a média móvel exponencial tripla (TEMA), a faixa média verdadeira (ATR) e velas Heikin-Ashi, juntamente com recursos de gerenciamento de risco como take profit e stop loss.
A estratégia utiliza os seguintes indicadores:
Média Móvel Tripla Exponencial (TEMA): Três linhas TEMA de diferentes comprimentos e fontes, baseadas em preços altos, baixos e próximos, respectivamente.
O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.
Supertendência: Calculada utilizando o ATR e um multiplicador para determinar a direção da tendência.
Média Móvel Simples (SMA): Aplicada na linha TEMA curta para suavizar seus valores.
Heikin-Ashi Close: Usado para confirmação de tendência adicional.
O sinal de entrada longa é acionado quando o TEMA curto está acima de ambas as linhas TEMA longas, a Supertrend é alta, o TEMA curto está acima de sua SMA e o fechamento de Heikin-Ashi é maior do que o fechamento anterior.
O sinal de entrada curta é acionado quando as condições opostas são cumpridas.
Os lucros obtidos e as perdas de parada são fixados em 1% e 3% do preço de entrada.
Vários fatores melhoram a precisão A combinação de indicadores de tendência, volatilidade e padrão pode melhorar a precisão e evitar falsos sinais.
Risco razoável dos controlos de stop loss/take profit Os níveis de stop loss e take profit bem definidos bloqueiam os lucros e limitam as perdas.
Espaço de otimização de parâmetros grande Os parâmetros dos indicadores podem ser ajustados de forma flexível para se adaptarem aos mercados em evolução.
Mais realista com a comissão A Comissão considera que os resultados dos backtests se aproximam da performance ao vivo.
Risco de erros de apreciação decorrentes de uma otimização excessiva Os indicadores combinados em excesso podem também conduzir a avaliações errôneas.
Risco mais elevado com negociação a curto prazo Em comparação com períodos de tempo mais longos, 15 minutos são mais suscetíveis a eventos e riscos repentinos.
A estabilidade da estratégia necessita de mais validação São necessários testes mais extensos em toda a história e mercados para garantir a fiabilidade.
Optimização longa com vários parâmetros Muitos parâmetros introduzidos levam a um longo processo de otimização de todas as combinações de parâmetros.
Avaliação do efeito real de cada indicador Backtest para verificar o benefício incremental real de cada indicador, evitar redundâncias.
Otimizar e testar a estabilidade Resultados de otimização de testes em mais mercados para garantir a robustez.
Incorporar estratégias de stop loss Tal como trailing stop, bracket order stop para controlar ainda mais o risco.
Considere outros fatores de custo Como deslizamento para fazer o backtest mais próximo da performance ao vivo.
Esta estratégia combina múltiplos indicadores e técnicas de gerenciamento de risco adaptadas para a negociação de Bitcoin de 15 minutos. Resta um grande espaço para otimizar parâmetros, avaliar a eficácia do indicador, testar a estabilidade do mercado em geral e introduzir mais fatores do mundo real para encontrar a combinação ideal dentro da abordagem de múltiplos fatores. Com otimização e verificação persistentes, pode se tornar uma ferramenta eficaz para a negociação de alta frequência de criptomoedas.
/*backtest start: 2023-08-25 00:00:00 end: 2023-09-09 00:00:00 period: 10m basePeriod: 1m 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/ // © deperp //@version=5 strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0) short = input.int(50, minval=1) srcShort = input(high, title='TEMA short') long = input.int(100, minval=1) srcLong = input(low, title='TEMA long 2') long2 = input.int(350, minval=1) srcLong2 = input(close, title='TEMA long 3') atrLength = input.int(550, title='ATR Length', minval=1) mult = input.float(3, title="Multiplier", minval=0.5, step=1) smaPeriod = input.int(100, title="SMA Period", minval=1) takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100 stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100 tema(src, length) => ema1 = ta.ema(src, length) ema2 = ta.ema(ema1, length) ema3 = ta.ema(ema2, length) 3 * (ema1 - ema2) + ema3 tema1 = tema(srcShort, short) plot(tema1, color=color.new(color.red, 0), linewidth=2) tema2 = tema(srcLong, long) plot(tema2, color=color.new(color.blue, 0), linewidth=2) tema3 = tema(srcLong2, long2) plot(tema3, color=color.new(color.green, 0), linewidth=2) // Custom ATR calculation with EMA smoothing atr_ema(src, length) => trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1])) emaTrueRange = ta.ema(trueRange, length) emaTrueRange // Calculate ATR with EMA smoothing atr = atr_ema(close, atrLength) // Calculate Supertrend var float up = na var float dn = na var bool uptrend = na up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr) dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1]) uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1] // Calculate SMA sma = ta.sma(tema1, smaPeriod) // Heikin-Ashi Close haTicker = ticker.heikinashi(syminfo.tickerid) haClose = request.security(haTicker, timeframe.period, close) // Trend determination using Heikin-Ashi Close longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1] shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1] alertlong = longC and not longC[1] alertshort = shortC and not shortC[1] useDateFilter = input.bool(true, title="Begin Backtest at Start Date", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2023"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true stopLossLevelLong = close - atr * mult stopLossLevelShort = close + atr * mult longTakeProfitLevel = close * (1 + takeProfitPercent) longStopLossLevel = close * (1 - stopLossPercent) shortTakeProfitLevel = close * (1 - takeProfitPercent) shortStopLossLevel = close * (1 + stopLossPercent) if inTradeWindow and longC strategy.entry('Long', strategy.long, comment='Long') strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long") if inTradeWindow and shortC strategy.entry('Short', strategy.short, comment='Short') strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short") // Alerts alertcondition(longC, title='Long', message=' Buy Signal ') alertcondition(shortC, title='Short', message=' Sell Signal ')