Quant Bitcoin Trading Strategy Combinando MACD, RSI e FIB

Autora:ChaoZhang, Data: 2023-12-26 17:08:03
Tags:

img

Resumo

A estratégia é chamada de Golden Cross Fibonacci Strategy. Ela combina o indicador técnico MACD, o índice de força relativa RSI e a teoria de retração / extensão de fibonacci baseada na proporção dourada, realizando negociação quantitativa para bitcoin e outras criptomoedas.

Princípio da estratégia

  1. Indicador MACD para sinais de negociação
  • Defina os períodos de EMA da linha rápida e da linha lenta do MACD para 15 e 30
  • Cruzar para cima como sinal de compra e cruzar para baixo como sinal de venda
  1. RSI Filtração de Sinais Falsos
  • Configurar o parâmetro RSI em período 50
  • O RSI ajuda a filtrar alguns sinais falsos que o MACD dá
  1. Teoria de Fibonacci para suporte/resistência
  • Combine o preço mais alto/mais baixo recente em 38 velas
  • Calcular o nível de retração/extensão de 0,5 fibonacci
  • Pode ser usado como suporte e resistência
  1. MA e RSI Julgando sobrevendidos/supercomprados
  • Estatuto de supervenda/supercompra dos juízes da MA de 50 períodos
  • O RSI também ajuda a julgar
  1. Mecanismo de abertura inversa
  • Fornecer opção para que os utilizadores abram uma encomenda reversa
  • Ajuste flexível da lógica longa/curta de acordo com a escolha dos utilizadores

Análise das vantagens

A maior vantagem é operar 24x7 sem intervenção manual. Além disso, a combinação de múltiplos indicadores aumenta a taxa de vitória, especialmente o desempenho excepcional no mercado de touros. As principais vantagens incluem:

  1. Negociação quantitativa totalmente automatizada 24 horas por dia, 7 dias por semana, sem intervenção manual
  2. Sinais de negociação precisos do MACD
  3. O RSI filtra alguns sinais falsos
  4. A teoria de Fibonacci acrescenta mais referência
  5. Julgamento do estado de sobrevenda/supercompra
  6. Ajustar com flexibilidade as estratégias através da abertura inversa

Análise de riscos

Há também alguns riscos, principalmente da enorme reversão do preço que é difícil para a perda de parada de tomar efeito.

  1. Stop loss muito apertado para proteger de um enorme reverso
  2. Risco sistemático decorrente de um período de detenção prolongado

As soluções são as seguintes:

  1. Configurar a distância de perda de parada mais larga
  2. Otimizar o período de detenção contra riscos excessivos

Orientações de otimização

Principais aspectos da otimização:

  1. Otimizar os parâmetros MACD para maior precisão
  2. Otimizar o parâmetro RSI para melhor utilidade
  3. Teste mais períodos da teoria de Fibonacci
  4. Adicionar mais indicadores de filtro para diminuir ainda mais os falsos sinais
  5. Combinar indicadores de períodos mais longos para a tendência do mercado

Resumo

A estratégia combina múltiplos indicadores quant para sinais comerciais e realiza negociação de criptomoedas totalmente automática. Melhorando ainda mais o lucro ao otimizar parâmetros e adicionar mais indicadores auxiliares. Reduz significativamente os custos de operação manual para os usuários. Vale a pena pesquisa profunda e aplicação para comerciantes quant.


/*backtest
start: 2023-12-18 00:00:00
end: 2023-12-25 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/
// © onurenginogutcu

//@version=4
strategy("STRATEGY R18-F-BTC", overlay=true, margin_long=100, margin_short=100)

///////////default girişler 1 saatlik btc grafiği için geçerli olmak üzere - stop loss'lar %2.5 - long'da %7.6 , short'ta %8.1

sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT") /////////btc'yi indikatör olarak alıyoruz

lsl = input(title="Long Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5) * 0.01
     
ssl = input(title="Short Stop Loss (%)",
     minval=0.0, step=0.1, defval=2.5) * 0.01
     
longtp = input(title="Long Take Profit (%)",
     minval=0.0, step=0.1, defval=7.6) * 0.01
     
shorttp = input(title="Short Take Profit (%)",
     minval=0.0, step=0.1, defval=7.5) * 0.01
     
capperc = input(title="Capital Percentage to Invest (%)",
     minval=0.0, maxval=100, step=0.1, defval=90) * 0.01
     
choice = input(title="Reverse ?", type=input.bool, defval=false)

symClose = security(sym, "", close)
symHigh = security(sym, "", high)
symLow = security(sym, "", low)

i = ema (symClose , 15) - ema (symClose , 30) ///////// ema close 15 ve 30 inanılmaz iyi sonuç verdi (macd standartı 12 26)
r = ema (i , 9)

sapust = highest (i , 100) * 0.729 //////////0.729 altın oran oldu 09.01.2022
sapalt = lowest (i , 100) * 0.729  //////////0.729 altın oran oldu 09.01.2022

///////////highx = highest (close , 365) * 0.72 fibo belki dahiledilebilir
///////////lowx = lowest (close , 365) * 1.272 fibo belki dahil edilebilir
simRSI = rsi (symClose , 50 ) /////// RSI DAHİL EDİLDİ "50 MUMLUK RSI EN İYİ SONUCU VERİYOR"


//////////////fibonacci seviyesi eklenmesi amacı ile koyuldu fakat en iyi sonuç %50 seviyesinin altı ve üstü (low ve high 38 barlık) en iyi sonuç verdi
fibvar = 38
fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)
fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50)

///////////////////////////////////////////////////////////// INDICATOR CONDITIONS

longCondition = crossover(i, r) and i < sapalt and symClose < sma (symClose , 50) and simRSI < sma (simRSI , 50) and symClose < fibbottom
shortCondition = crossunder(i, r) and i > sapust and symClose > sma (symClose , 50) and simRSI > sma (simRSI , 50)  and symClose > fibtop

////////////////////////////////////////////////////////////////

///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES /////stratejilerde kalan capital için strategy.equity kullan (bunun üzerinden işlem yap)


if (choice == false and longCondition)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ,   when = strategy.position_size == 0)
   

if (choice == false and shortCondition)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ,  when = strategy.position_size == 0)

if (choice == true and longCondition)
    strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ,  when = strategy.position_size == 0)

if (choice == true and shortCondition)
    strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ,   when = strategy.position_size == 0)
    

if (strategy.position_size > 0)
    strategy.exit("Exit Long", "Long", stop=strategy.position_avg_price*(1 - lsl) , limit=strategy.position_avg_price*(1 + longtp))

if (strategy.position_size < 0)
    strategy.exit("Exit Short", "Short", stop=strategy.position_avg_price*(1 + ssl) , limit=strategy.position_avg_price*(1 - shorttp))


////////////////////////vertical colouring signals
bgcolor(color=longCondition ? color.new (color.green , 70) : na)
bgcolor(color=shortCondition ? color.new (color.red , 70) : na)




Mais.