A estratégia é uma estratégia de negociação integrada para o Bitcoin e outras criptomoedas em um período de 15 minutos. Ela integra vários indicadores para gerar sinais de compra e venda, incluindo a média móvel triplo-índice, a amplitude real média e o gráfico de linha de equilíbrio, além de ter mecanismos de gerenciamento de risco, como o stop loss.
A estratégia utiliza vários indicadores:
Média móvel tripla ((TEMA): é calculada com base em três TEMA de diferentes comprimentos e origens, com base nos preços de alta, baixa e encerramento.
A média real de flutuação (ATR): A taxa de flutuação do mercado é calculada usando o ATR personalizado do EMA.
Indicador de tendência: determina a direção da tendência com base no ATR e no múltiplo.
Média móvel simples ((SMA): calcula a SMA de um TEMA de curto período com um valor de smoothing.
Preço de fechamento da linha de equilíbrio: usado para confirmação adicional da tendência.
Um sinal de compra é gerado quando o TEMA de curto prazo é superior a dois TEMA de longo prazo, o indicador de tendência ultrapassada é otimista, o TEMA de curto prazo é superior ao seu SMA e o preço de fechamento da linha de equilíbrio é superior ao do dia anterior.
Um sinal de venda é gerado quando o TEMA de curto prazo é inferior a dois TEMA de longo prazo, o indicador de tendência ultrapassa a baixa, o TEMA de curto prazo é inferior ao seu SMA e o preço de fechamento da linha de equilíbrio é inferior ao do dia anterior.
O Stop Loss é definido como 1% e 3% do preço de entrada, respectivamente.
A combinação de vários fatores, como tendências, oscilações e formas, pode aumentar a precisão do julgamento e evitar falsos sinais.
Uma boa configuração de stop loss pode bloquear o lucro e limitar efetivamente as perdas individuais.
Os parâmetros do indicador podem ser ajustados de forma flexível, adaptando-se às mudanças do mercado, procurando a melhor combinação.
A adição de um fator de taxa de transação pode tornar os resultados mais próximos do desempenho real das transações.
O excesso de combinações de indicadores também pode levar a erros de avaliação e a necessidade de avaliar cuidadosamente a eficácia dos indicadores.
A operação de 15 minutos é mais suscetível a eventos inesperados do que a de um ciclo longo, com maior risco de ocorrência.
A estratégia ainda precisa ser testada em ciclos mais longos e em vários mercados para garantir a estabilidade.
A combinação de múltiplos indicadores traz uma grande quantidade de parâmetros e otimizar todas as combinações de parâmetros leva mais tempo.
A reação de teste de cada indicador de real aumento do efeito, evitar o uso de indicadores redundantes.
Testar resultados de otimização de parâmetros em mais mercados, garantindo estabilidade e confiabilidade.
Controlar os riscos ainda mais, por exemplo, com o uso de stop-loss móvel ou pendurado.
Os custos de deslizamento, por exemplo, tornam a retomada mais realista.
A estratégia integra vários indicadores e mecanismos de controle de risco e foi projetada para o ciclo de 15 minutos de negociação do Bitcoin. Há muito espaço para otimização, e é necessário um profundo feedback para avaliar o efeito dos indicadores, testes de estabilidade de mercado extensivos e adicionar mais considerações de mercado real para encontrar o melhor conjunto de parâmetros em uma estratégia multifatorial. Se otimizado e verificado continuamente, a estratégia pode se tornar uma ferramenta eficaz para a negociação de alta frequência da criptomoeda.
/*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 ')