Estratégia de negociação multifatorial de Bitcoin


Data de criação: 2023-09-25 18:24:02 última modificação: 2023-09-25 18:24:02
cópia: 9 Cliques: 837
1
focar em
1617
Seguidores

Visão geral

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.

Princípio da estratégia

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.

Análise de vantagens

  • Avaliação com base em múltiplos fatores para melhorar a precisão

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.

  • Mecanismos de suspensão de perdas para controlar o risco razoavelmente

Uma boa configuração de stop loss pode bloquear o lucro e limitar efetivamente as perdas individuais.

  • Parâmetros de otimização de espaço grande

Os parâmetros do indicador podem ser ajustados de forma flexível, adaptando-se às mudanças do mercado, procurando a melhor combinação.

  • Considerando os fatores de comissões mais perto do disco

A adição de um fator de taxa de transação pode tornar os resultados mais próximos do desempenho real das transações.

Análise de Riscos

  • Combinação de múltiplos fatores de risco de erro de avaliação

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.

  • Risco maior em operações de ciclo curto

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.

  • Estabilidade da estratégia a ser testada

A estratégia ainda precisa ser testada em ciclos mais longos e em vários mercados para garantir a estabilidade.

  • Optimização de parâmetros demora mais

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.

Direção de otimização

  • Avaliação do impacto real dos indicadores

A reação de teste de cada indicador de real aumento do efeito, evitar o uso de indicadores redundantes.

  • Parâmetros de otimização, teste de estabilidade

Testar resultados de otimização de parâmetros em mais mercados, garantindo estabilidade e confiabilidade.

  • Acompanhar a estratégia de stop loss

Controlar os riscos ainda mais, por exemplo, com o uso de stop-loss móvel ou pendurado.

  • Considere mais fatores de custo

Os custos de deslizamento, por exemplo, tornam a retomada mais realista.

Resumir

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.

Código-fonte da estratégia
/*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 ')