Esta estratégia combina os indicadores SuperTrend e Fisher Transform para implementar uma tendência relativamente estável após uma estratégia de negociação de longo prazo. Ela gera sinais de compra quando o indicador SuperTrend dá um sinal de compra e o indicador Fisher Transform cai abaixo de -2,5 e sobe. A estratégia gerencia posições adequadamente com stop loss e take profit.
O indicador de SuperTrend é usado para determinar a direção da tendência do preço. Quando o preço cruza acima da faixa superior, é um sinal de alta; quando o preço cruza abaixo da faixa inferior, é um sinal de baixa. Esta estratégia emite um sinal de compra quando a SuperTrend é alta.
O indicador Fisher Transform reflete o impacto das flutuações de preços na psicologia do consumidor. Os valores de Fisher entre (-2.5, 2.5) representam um mercado neutro, abaixo de -2.5 representam um mercado em pânico e acima de 2.5 representam um mercado eufórico.
A estratégia gerencia posições adequadamente com stop loss e take profit. O stop loss é definido no preço de entrada menos o valor ATR multiplicado pelo multiplicador ATR, e o take profit é definido no preço de entrada mais o valor ATR multiplicado pelo multiplicador ATR. A amplitude de stop loss é maior que a amplitude de take profit, refletindo a ideia de controle de risco da estratégia de tendência seguinte.
Calcular o tamanho da posição com base no ATR e no montante do risco de modo a que o risco por unidade não exceda o montante do risco fixado.
A combinação de múltiplos indicadores evita a negociação frequente causada por um único indicador.
A definição adequada de stop loss e take profit é propícia à captação de tendências para a detenção a longo prazo, controlando simultaneamente os riscos.
Usando a gestão do montante do risco e tamanho mínimo do tick torna o risco de cada negociação controlada, evitando grandes perdas além do acessível.
Os sinais de negociação são estáveis e adequados para a detenção a longo prazo.
Grande espaço de otimização para os parâmetros do indicador. período de ATR e multiplicador de SuperTrend
Como uma estratégia de tendência, irá acumular pequenas perdas durante períodos de intervalo.
Quando o mercado permanece em um estado por um longo tempo, os valores de Fisher continuarão a se desviar da zona neutra, caso em que a estratégia deve ser suspensa.
O período ATR e o multiplicador ATR devem ser definidos de forma razoável para garantir uma reserva suficiente para a perda de parada.
Ignorar os custos de transação fará com que os negócios lucrativos percam dinheiro.
É necessária uma participação de longo prazo no mercado para que a estratégia realize a sua vantagem.
Ajuste o período ATR, o multiplicador ATR para otimizar o stop loss e o take profit.
Tente diferentes parâmetros de Fisher como período suave para encontrar sinais de negociação mais estáveis.
Adicionar outros indicadores como filtros para evitar negociações erradas quando o mercado é incerto.
Teste diferentes estratégias de lucro, como mudança, parcial, ATR, etc., para melhorar a lucratividade.
Optimizar as estratégias de gestão de capital, como a fração fixa, a fórmula Kelly, etc., para aumentar a relação rendimento/risco.
Otimizar os custos de transacção, manter o lucro para pequenas posições.
Esta estratégia integra as vantagens da SuperTrend, Fisher Transform e outros indicadores para formar uma tendência estável após uma estratégia de negociação de longo prazo. Através de stop loss, take profit e gestão de risco, pode alcançar uma boa relação de recompensa de risco. A estratégia precisa de mais otimização em parâmetros, filtragem de sinal, gestão de capital, etc. para melhorar o desempenho prático. Mas a lógica geral é robusta e vale a pena verificação prática e otimização contínua.
/*backtest start: 2023-10-26 00:00:00 end: 2023-11-02 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Supertrend and Fisher_LONG", 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] // Buy condition for Fisher transformation. buy_signal = (fish1 < -2.5) and (fish1 > fish2) durum = 0 //just for the situation. if (buy_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 buySignal = trend == 1 and trend[1] == -1 and durum == 1 plotshape(buySignal, title='Buy Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) // 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 (buySignal) entryPrice := close atr1 := atr stopLoss := entryPrice - atr1 * Multiplier contracts := entryPrice / (entryPrice - stopLoss) * RiskAmount / entryPrice takeProfit := entryPrice + atr1 * Multiplier takeProfit2 := entryPrice + 2 * atr1 * Multiplier takeProfit3 := entryPrice + 3 * atr1 * Multiplier if (buySignal) strategy.entry("Buy", strategy.long, qty=contracts) // if (close <= stopLoss) strategy.close("Buy", comment="Stop Loss Hit") else if (close >= takeProfit) strategy.close("Buy", 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)