Stratégie de renversement de l'élan du marché

Auteur:ChaoZhang est là., Date: le 29 février 2024 à 15h10
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur Supertrend et Fisher Transform pour rechercher des opportunités courtes lorsque le marché est inversé. Il peut ajuster les paramètres de Supertrend et Fisher Transform pour différentes crypto-monnaies, actions et marchés.

La logique de la stratégie

La stratégie calcule d'abord la transformation de Fisher avec une période de 10. Lorsque la ligne de Fisher dépasse 2,5 en dessous, un signal de vente est généré. En même temps, elle calcule la plage moyenne vraie (ATR) de 10 périodes comme canal pour la supertrend. Lorsque le prix traverse le rail supérieur, un signal de vente est généré. La stratégie combine donc la transformation de Fisher et le canal de supertrend pour saisir les opportunités courtes lorsque le marché inverse.

Plus précisément, lorsque la clôture actuelle est en dessous du rail supérieur précédent et que la clôture précédente est au-dessus du rail inférieur du canal Supertrend, elle détermine que le marché s'est inversé et génère un signal de vente.

Donc la stratégie nécessite à la fois l'identification de l'inversion de Supertrend et Fisher Transform pour générer le signal de vente final.

Les avantages

La stratégie combine le canal Supertrend et Fisher Transform, qui peuvent capturer plus précisément les points d'inversion du marché.

En outre, la stratégie offre une flexibilité pour ajuster les paramètres de Supertrend et Fisher. Les utilisateurs peuvent sélectionner les meilleures combinaisons de paramètres pour différents marchés et produits pour s'adapter au marché de manière ciblée. Il s'agit d'une stratégie personnalisable et optimisable.

La stratégie fournit également une gestion du montant du risque. Les utilisateurs peuvent facilement ajuster le capital de risque pour chaque ordre pour répondre à leurs propres besoins de gestion des risques. En même temps, elle calcule automatiquement les niveaux de stop-loss et de prise de profit pour atteindre un bon rapport risque-rendement.

Les risques

La stratégie repose principalement sur le canal de Supertrend pour déterminer la structure du marché. Lorsque la tendance dure pendant une période prolongée, la Supertrend peut échouer. Dans ce cas, la période ou le multiplicateur ATR du canal doit être augmenté de manière appropriée.

En outre, Fisher Transform a tendance à générer facilement de faux signaux ou des signaux prématurés.

En outre, le taux de gain global des stratégies d'inversion peut être limité. Il devrait être combiné avec des indicateurs de tendance suivants pour éviter d'ouvrir des positions dans des zones de fourchette ou de participer après que la tendance soit devenue plus claire. Les moyennes mobiles peuvent être ajoutées comme filtre pour améliorer la stabilité.

Directions de renforcement

La stratégie peut être améliorée par les aspects suivants:

  1. Optimiser la période ATR et le multiplicateur ATR de Supertrend pour la meilleure combinaison de paramètres basée sur différents produits et conditions de marché.

  2. Optimiser la période de Fisher pour lisser la courbe et éviter de faux signaux.

  3. Ajoutez des moyennes mobiles ou des bandes de Bollinger comme indicateur auxiliaire pour éviter d'ouvrir des positions sur des marchés variables.

  4. Combiner la transformation de Fisher sur différents délais pour obtenir un jugement d'inversion plus stable.

  5. Ajouter des modules de gestion des positions tels que le ratio d'effet de levier, la taille des positions, des règles complémentaires, etc. pour contrôler les risques.

  6. Incorporer des méthodes d'apprentissage automatique pour obtenir une optimisation automatique des paramètres et un ajustement de la stratégie.

Conclusion

La stratégie intègre Supertrend et Fisher Transform avec une flexibilité pour s'adapter à différents produits par ajustement de paramètres, par rapport aux stratégies d'indicateur unique. Elle permet un jugement plus fiable du signal et un contrôle des risques. Avec une amélioration continue, la stratégie promet d'améliorer encore la stabilité et la rentabilité.


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


Plus de