Esta estratégia combina o indicador Supertrend e Fisher Transform para procurar oportunidades curtas quando o mercado reverte. Pode ajustar os parâmetros do Supertrend e Fisher Transform para diferentes criptomoedas, ações e mercados. Quando um sinal de venda aparece, ele mostra o tamanho da posição, os níveis de stop loss e take profit. Você também pode alterar o valor do risco.
A estratégia primeiro calcula a Transformação de Fisher com um período de 10. Quando a linha de Fisher quebra 2,5 a partir de baixo, um sinal de venda é gerado. Ao mesmo tempo, calcula a faixa média verdadeira (ATR) de 10 períodos como o canal para a Supertrend. Quando o preço cruza abaixo do trilho superior, um sinal de venda é gerado.
Especificamente, quando o fechamento atual está abaixo do trilho superior anterior e o fechamento anterior está acima do trilho inferior do canal Supertrend, ele determina que o mercado se invertiu e gera um sinal de venda.
Assim, a estratégia requer tanto a identificação de inversão de Supertrend e Fisher Transform para gerar o sinal de venda final.
A estratégia combina o canal Supertrend e a Fisher Transform, que podem capturar com mais precisão os pontos de reversão do mercado.
Além disso, a estratégia fornece flexibilidade para ajustar os parâmetros de Supertrend e Fisher. Os usuários podem selecionar as melhores combinações de parâmetros para diferentes mercados e produtos para se adequar ao mercado propositadamente.
A estratégia também fornece gerenciamento do valor do risco. Os usuários podem ajustar convenientemente o capital de risco para cada ordem para atender às suas próprias necessidades de gerenciamento de risco. Ao mesmo tempo, ele calcula automaticamente os níveis de stop loss e take profit para alcançar uma boa relação risco-recompensa.
A estratégia depende principalmente do canal Supertrend para determinar a estrutura do mercado. Quando a tendência dura por um período prolongado, a Supertrend pode falhar. Neste caso, o período ou o multiplicador ATR do canal deve ser aumentado adequadamente.
Além disso, a Fisher Transform tende a gerar sinais falsos ou sinais prematuros facilmente.
Além disso, a taxa de ganho geral das estratégias de reversão pode ser limitada. Deve combinar-se com indicadores de tendência para evitar a abertura de posições em zonas de gama ou participar depois que a tendência se torna mais clara. As médias móveis podem ser adicionadas como filtro para melhorar a estabilidade.
A estratégia pode ser reforçada pelos seguintes aspectos:
Otimizar o período ATR e o multiplicador ATR da Supertrend para a melhor combinação de parâmetros com base em diferentes produtos e condições de mercado.
Otimizar o período de Fisher para suavizar a curva e evitar sinais falsos.
Adicionar médias móveis ou bandas de Bollinger como indicador auxiliar para evitar a abertura de posições em mercados variáveis.
Combinar a transformação de Fisher em diferentes prazos para obter um julgamento de reversão mais estável.
Adicionar módulos de gestão de posições, como o rácio de alavancagem, o dimensionamento das posições, regras adicionais, etc., para controlar os riscos.
Incorporar métodos de aprendizagem de máquina para obter otimização automática de parâmetros e ajuste de estratégia.
A estratégia integra a Supertrend e a Fisher Transform com flexibilidade para se adaptar a diferentes produtos por ajuste de parâmetros, em comparação com as estratégias de indicador único.
/*backtest start: 2024-02-21 00:00:00 end: 2024-02-27 03:00:00 period: 2m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supertrend and Fisher_SHORT", overlay=true) //This block is for Fisher Transformation Calculation. len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you. high_ = ta.highest(hl2, len) low_ = ta.lowest(hl2, len) round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val value = 0.0 value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1])) fish1 = 0.0 fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1]) fish2 = fish1[1] // Sell condition for Fisher transformation. sell_signal = (fish1 > 2.5) and (fish2 > fish1) durum = 0 //just for the situation. if (sell_signal) durum := -1 // now it changes from 0 to -1. // Supertrend indicator inputs and calculations (same as in the indicator) Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it src = input(hl2, title='Source') Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it changeATR = input(title='Change ATR Calculation Method ?', defval=true) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend // Calculate position size based on risk amount riskPerContract = atr * Multiplier contracts = RiskAmount / (riskPerContract * syminfo.mintick) //short signal condition sellSignal = trend == -1 and trend[1] == 1 and durum == -1 plotshape(sellSignal, title='Sell Signal', location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) //shows the signal. // variables var float entryPrice = na var float stopLoss = na var float takeProfit = na var float atr1 = na var float takeProfit2 = na var float takeProfit3 = na //it calculates the stop level and reward profit levels using atr. if (sellSignal) entryPrice := close atr1 := atr stopLoss := entryPrice + atr1 * Multiplier contracts := entryPrice / (stopLoss - entryPrice) * RiskAmount / entryPrice takeProfit := entryPrice - atr1 * Multiplier takeProfit2 := entryPrice - 2 * atr1 * Multiplier takeProfit3 := entryPrice - 3 * atr1 * Multiplier if (sellSignal) strategy.entry("Sell", strategy.short, qty=1) // if (close >= stopLoss) strategy.close("Sell", comment="Stop Loss Hit") else if (close <= takeProfit) strategy.close("Sell", comment="Take Profit Hit") // draw the stop, entry and profit levels plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr) plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr) plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr) plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr) plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)