Estratégia de swing trading quantitativa baseada em múltiplos prazos


Data de criação: 2023-12-01 13:50:02 última modificação: 2023-12-01 13:50:02
cópia: 0 Cliques: 767
1
focar em
1619
Seguidores

Estratégia de swing trading quantitativa baseada em múltiplos prazos

Visão geral

Esta estratégia permite a identificação de bandas de preços de Bitcoin através da combinação de indicadores quantitativos em diferentes quadros de tempo, permitindo o rastreamento de transações. A estratégia usa um período de 5 minutos para obter ganhos de longo prazo.

Princípio da estratégia

  1. O indicador RSI baseado no fuso horário da linha do sol, com a quantidade de transação para a computação ponderada, filtrando a falsa ruptura.
  2. O indicador de RSI da linha do sol é processado de forma suave por EMA para construir um indicador de banda quantitativa.
  3. O timeframe de 5 minutos utiliza um indicador de regressão linear e um indicador HMA para construir um sinal de negociação.
  4. A estratégia permite a correlação entre os diferentes prazos de tempo através da combinação de indicadores e sinais de negociação de bandas de frequência quantitativas, identificando bandas de frequência médias e longas de preços.

Análise de vantagens

  1. O indicador RSI, que usa o volume de transações ponderado, é eficaz na identificação de bandas reais e filtração de brechas falsas.
  2. Os indicadores HMA são mais sensíveis às mudanças de preços e conseguem capturar as reversões em tempo hábil.
  3. A combinação de vários quadros de tempo permite uma identificação mais precisa das faixas de ondas médias e longas.
  4. A taxa de transação é de 5 minutos e a frequência de operação é maior.
  5. A estratégia de rastreamento de faixas de onda, sem precisão de seleção, dura mais tempo.

Análise de Riscos

  1. Os indicadores quantitativos podem emitir sinais errados e é recomendável combiná-los com a análise fundamental.
  2. A banda pode reverter no meio do caminho e deve ser configurado um mecanismo de saída de stop loss.
  3. O sinal de negociação foi atrasado e pode ter perdido o melhor ponto de entrada.
  4. O segmento de lucro requer um longo período de posse e pressão financeira.

Direção de otimização

  1. Teste a eficácia do indicador RSI em diferentes parâmetros.
  2. Tente introduzir outros indicadores auxiliares.
  3. Optimizar os parâmetros de comprimento do indicador HMA.
  4. Adição de estratégias de stop loss e stop loss.
  5. Ajustar o ciclo de posse das transações de banda.

Resumir

Esta estratégia permite a captura efetiva de tendências de longo prazo em Bitcoin através de combinação de vários quadros temporais e rastreamento de bandas. Em comparação com a negociação de curto prazo, a retracção de transações de longo prazo é menor e a margem de lucro é maior. Em seguida, através do ajuste de parâmetros e da adição de estratégias de gerenciamento de risco, é esperado que a taxa de retorno e a estabilidade da estratégia sejam ainda maiores.

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