Tendência seguindo uma estratégia de longo prazo baseada na SuperTendência e na Transformação Fisher

Autora:ChaoZhang, Data: 2023-11-03 15:42:16
Tags:

img

Resumo

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.

Estratégia lógica

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Análise das vantagens

  1. A combinação de múltiplos indicadores evita a negociação frequente causada por um único indicador.

  2. 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.

  3. 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.

  4. Os sinais de negociação são estáveis e adequados para a detenção a longo prazo.

  5. Grande espaço de otimização para os parâmetros do indicador. período de ATR e multiplicador de SuperTrend, e suavidade de Fisher pode ser ajustado de acordo com diferentes produtos e prazos para encontrar a combinação de parâmetros ideal.

Análise de riscos

  1. Como uma estratégia de tendência, irá acumular pequenas perdas durante períodos de intervalo.

  2. 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.

  3. 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.

  4. Ignorar os custos de transação fará com que os negócios lucrativos percam dinheiro.

  5. É necessária uma participação de longo prazo no mercado para que a estratégia realize a sua vantagem.

Orientações de otimização

  1. Ajuste o período ATR, o multiplicador ATR para otimizar o stop loss e o take profit.

  2. Tente diferentes parâmetros de Fisher como período suave para encontrar sinais de negociação mais estáveis.

  3. Adicionar outros indicadores como filtros para evitar negociações erradas quando o mercado é incerto.

  4. Teste diferentes estratégias de lucro, como mudança, parcial, ATR, etc., para melhorar a lucratividade.

  5. 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.

  6. Otimizar os custos de transacção, manter o lucro para pequenas posições.

Conclusão

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)


Mais.