O recurso está a ser carregado... Carregamento...

Estratégia de negociação de bandas quantitativas de Bitcoin baseada em vários prazos

Autora:ChaoZhang, Data: 23 de dezembro de 2023
Tags:

img

Resumo

Esta estratégia identifica as faixas de preço do Bitcoin combinando indicadores quantitativos em diferentes prazos e conduz negociações de rastreamento de tendências.

Estratégia lógica

  1. O indicador RSI calculado com base no prazo diário pesa com base no volume de negociação para filtrar falsos breakouts.
  2. O indicador RSI diário é suavizado por uma EMA para construir um indicador de faixa quantitativa.
  3. O prazo de 5 minutos utiliza uma combinação de indicadores de regressão linear e HMA para gerar sinais comerciais.
  4. Ao combinar o indicador de faixa quantitativa e os sinais de negociação em diferentes prazos, a estratégia identifica as faixas de preços de médio a longo prazo.

Análise das vantagens

  1. O indicador RSI ponderado pelo volume pode identificar efetivamente as bandas verdadeiras e filtrar as falhas.
  2. O indicador HMA é mais sensível às alterações de preços e pode capturar as voltas em tempo útil.
  3. A combinação de vários prazos permite uma identificação mais precisa das faixas de médio a longo prazo.
  4. A negociação no prazo de 5 minutos permite uma maior frequência de operações.
  5. Como uma estratégia de rastreamento de banda, não requer uma escolha precisa de pontos e pode durar por períodos mais longos.

Análise de riscos

  1. Os indicadores quantitativos podem gerar falsos sinais, sendo recomendada uma análise fundamental.
  2. As bandas podem ver reversões no meio do caminho, mecanismos de stop-loss devem estar em vigor.
  3. Os atrasos no sinal podem levar à ausência dos melhores pontos de entrada.
  4. As bandas rentáveis necessitam de períodos de detenção mais longos, exigindo tolerância à pressão de capital.

Orientações de otimização

  1. Eficiência do ensaio de indicadores RSI com diferentes parâmetros.
  2. Tente introduzir outros indicadores de banda auxiliares.
  3. Otimizar os parâmetros de comprimento do indicador HMA.
  4. Adicione estratégias de stop loss e take profit.
  5. Ajustar o ciclo de retenção para trocas de bandas.

Conclusão

Esta estratégia captura efetivamente as tendências de médio a longo prazo do Bitcoin através do acoplamento de prazos e rastreamento de banda. Em comparação com a negociação de curto prazo, a negociação de banda de médio a longo prazo vê reduções menores e maior potencial de lucro.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    



Mais.