Tendance à la suite d'une stratégie à long terme basée sur la SuperTrend et la transformation Fisher

Auteur:ChaoZhang est là., Date: 2023-11-03 15h42 et 16h
Les étiquettes:

img

Résumé

Cette stratégie combine les indicateurs SuperTrend et Fisher Transform pour mettre en œuvre une tendance relativement stable après une stratégie de trading à long terme. Elle génère des signaux d'achat lorsque l'indicateur SuperTrend donne un signal d'achat et que l'indicateur Fisher Transform tombe en dessous de -2.5 et augmente.

La logique de la stratégie

  1. L'indicateur SuperTrend est utilisé pour déterminer la direction de la tendance des prix. Lorsque le prix franchit la bande supérieure, c'est un signal haussier; lorsque le prix franchit la bande inférieure, c'est un signal baissier. Cette stratégie émet un signal d'achat lorsque la SuperTrend est haussière.

  2. L'indicateur Fisher Transform reflète l'impact des fluctuations des prix sur la psychologie des consommateurs. Les valeurs de Fisher entre (-2.5, 2.5) représentent un marché neutre, en dessous de -2.5 représentent un marché paniqué et au-dessus de 2.5 représentent un marché euphorique.

  3. La stratégie gère correctement les positions avec stop loss et take profit. Le stop loss est fixé au prix d'entrée moins la valeur ATR multipliée par le multiplicateur ATR, et le take profit est fixé au prix d'entrée plus la valeur ATR multipliée par le multiplicateur ATR. L'amplitude de stop loss est supérieure à l'amplitude de take profit, reflétant l'idée de contrôle des risques de la stratégie de suivi de tendance.

  4. La gestion du montant du risque est également prise en considération. Calculer la taille de la position sur la base de l'ATR et du montant du risque afin que le risque par unité ne dépasse pas le montant du risque fixé.

Analyse des avantages

  1. La combinaison de plusieurs indicateurs permet d'éviter les transactions fréquentes causées par un seul indicateur.

  2. Le fait de définir un stop-loss et un take profit appropriés permet de détecter les tendances de la détention à long terme tout en contrôlant les risques.

  3. L'utilisation de la gestion du montant du risque et de la taille minimale des ticks rend le risque de chaque transaction contrôlable, évitant ainsi de grosses pertes au-delà de l'abordabilité.

  4. Les signaux de trading sont stables et adaptés à la détention à long terme.

  5. Une large marge d'optimisation pour les paramètres de l'indicateur. La période et le multiplicateur d'ATR de SuperTrend et la fluidité de Fisher peuvent être ajustés en fonction de différents produits et délais pour trouver la combinaison optimale de paramètres.

Analyse des risques

  1. En tant que stratégie de suivi des tendances, il accumulera de petites pertes au cours de périodes de plage.

  2. Lorsque le marché reste dans un état pendant une longue période, les valeurs de Fisher continueront de s'écarter de la zone neutre, auquel cas la stratégie devrait être suspendue.

  3. La période ATR et le multiplicateur ATR doivent être réglés de manière raisonnable afin d'assurer un tampon suffisant pour le stop loss.

  4. L'ignorance des coûts de transaction entraînera une perte d'argent pour les transactions rentables.

  5. Il faut une participation à long terme au marché pour que la stratégie réalise son avantage.

Directions d'optimisation

  1. Ajustez la période ATR, le multiplicateur ATR pour optimiser le stop loss et le take profit.

  2. Essayez différents paramètres de Fisher comme la période de fluidité pour trouver des signaux de trading plus stables.

  3. Ajoutez d'autres indicateurs comme filtres pour éviter les mauvaises transactions lorsque le marché est incertain.

  4. Testez différentes stratégies de prise de profit comme le déplacement, partiel, ATR trailing, etc. pour améliorer la rentabilité.

  5. Optimiser les stratégies de gestion du capital telles que la fraction fixe, la formule Kelly, etc. pour augmenter le ratio rendement/risque.

  6. Optimiser pour les coûts de transaction, maintenir des profits pour les petites positions.

Conclusion

Cette stratégie intègre les avantages de SuperTrend, Fisher Transform et d'autres indicateurs pour former une tendance stable à la suite d'une stratégie de trading à long terme. Grâce au stop loss, à la prise de profit et à la gestion des risques, elle peut atteindre un bon ratio de récompense du risque. La stratégie nécessite une optimisation supplémentaire des paramètres, du filtrage des signaux, de la gestion des capitaux, etc. pour améliorer les performances pratiques. Mais la logique globale est robuste et mérite une vérification pratique et une optimisation continue.


/*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)


Plus de