Esta estratégia identifica as tendências do mercado de bitcoin através do cálculo do True Strength Index (TSI) e entra em posições longas / curtas filtradas pelo indicador RSI para implementar a negociação algorítmica de bitcoin.
O núcleo desta estratégia é o Índice de Verdadeira Força (TSI). O TSI mede a magnitude absoluta e a direção das mudanças de preço, suavizando duas vezes a mudança percentual de preço, identificando assim a força absoluta dos movimentos de preços para cima e para baixo.
Quando a TSI cruza sua linha de sinal tsi2, um sinal longo é gerado. Quando a TSI cruza abaixo de tsi2, um sinal curto é gerado. Além disso, a estratégia filtra os sinais TSI com RSI - tomando apenas sinais longos quando o RSI é superior a 50 e sinais curtos quando o RSI é inferior a 50, para evitar alguns sinais falsos.
As vantagens desta estratégia incluem:
Os riscos desta estratégia incluem:
A emissão atrasada e o efeito de filtro podem ser reduzidos relaxando as regras de filtragem do RSI e reduzindo os períodos de EMA.
A estratégia pode ser otimizada nos seguintes aspectos:
Optimizar os parâmetros TSI e RSI para encontrar a melhor combinação.
Introduzir mais indicadores técnicos para construir um modelo multifatorial. MA, KD etc. podem ser adicionados para tirar partido de cada indicador.
Otimizar as regras de entrada para evitar longos em tendência de queda e curtos em tendência de alta.
Otimizar as estratégias de stop loss como stop loss de trailing, stop loss baseado no tempo, stop loss de breakout, etc.
Os indicadores de volatilidade podem ajudar a determinar pontos de saída adequados.
Otimizar produtos de negociação, sessões de negociação para se concentrar nos mais eficazes.
Esta estratégia identifica as tendências de curto prazo do bitcoin com o True Strength Index e filtra os sinais com o RSI para negociação de bitcoin algorítmica.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // strategy("True Strength Indicator BTCUSD 15p", shorttitle="TSI BTCUSD 15p",initial_capital=1000, commission_value=0.15, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity) //BASED ON True Strength Indicator MTF resCustom = input(title="Timeframe", defval="15" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ta.ema(src, long) ta.ema(fist_smooth, short) pc = ta.change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ta.ema(tsi_value, signal) plot(tsi_value, color=color.lime,linewidth=2) plot(tsi2, color=color.red,linewidth=2) rsiserie = ta.rsi(price,7) cciserie = ta.cci(price,14) stochserie = ta.stoch(price,14,3,3) plot(rsiserie,color=color.purple) hline(30, title="Zero") hline(50, title="Zero",linestyle=hline.style_solid, linewidth=2) hline(70, title="Zero") buy = ta.crossover(tsi_value, tsi2) //and rsiserie[1]<25 //and cciserie<-100 and stochserie<20 sell = ta.crossunder(tsi_value, tsi2) //and rsiserie[1]>85 //and cciserie>100 and stochserie>80 alertcondition(buy, title='TSI system', message='Buy signal at!' ) alertcondition(sell, title='TSI system', message='Sell signal at!' ) strategy.entry("BUY", strategy.long, 1, when = buy) strategy.entry("SELL", strategy.short, 1, when = sell ) greentsi =tsi_value redtsi = tsi2 bgcolor( greentsi>redtsi and rsiserie > 50 ? color.lime : na, transp=90) bgcolor( greentsi<redtsi and rsiserie < 50 ? color.red : na, transp=90) yellow1= redtsi > greentsi and rsiserie > 50 yellow2 = redtsi < greentsi and rsiserie < 50 bgcolor( yellow1 ? yellow : na, transp=80) bgcolor( yellow2 ? yellow : na, transp=50) bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70) bgcolor( yellow2 and yellow2[2] ? yellow : na, transp=70) bgcolor( rsiserie > 70 ? color.lime : na, transp=60) bgcolor( rsiserie < 30 ? color.red : na, transp=60)