Trend nach langfristiger Strategie auf Basis von SuperTrend und Fisher Transform

Schriftsteller:ChaoZhang, Datum: 2023-11-03
Tags:

img

Übersicht

Diese Strategie kombiniert die SuperTrend- und Fisher Transform-Indikatoren, um nach einer langfristigen Handelsstrategie einen relativ stabilen Trend zu implementieren. Sie erzeugt Kaufsignale, wenn der SuperTrend-Indikator ein Kaufsignal gibt und der Fisher Transform-Indikator unter -2,5 fällt und steigt. Die Strategie verwaltet Positionen ordnungsgemäß mit Stop-Loss und Take-Profit.

Strategie Logik

  1. Der SuperTrend-Indikator wird verwendet, um die Richtung des Preistrends zu bestimmen. Wenn der Preis über das obere Band überschreitet, ist es ein bullisches Signal; wenn der Preis unter das untere Band überschreitet, ist es ein bärisches Signal. Diese Strategie gibt ein Kaufsignal aus, wenn der SuperTrend bullisch ist.

  2. Der Fisher-Transform-Indikator spiegelt die Auswirkungen von Preisschwankungen auf die Verbraucherpsychologie wider. Fisher-Werte zwischen (-2.5, 2.5) repräsentieren einen neutralen Markt, unter -2.5 repräsentieren einen Panikmarkt und über 2.5 repräsentieren einen euphorischen Markt. Diese Strategie gibt ein Kaufsignal aus, wenn der Fisher unter -2.5 und steigt, um den Wendepunkt von Panik zu neutral zu erfassen.

  3. Die Strategie verwaltet Positionen ordnungsgemäß mit Stop-Loss und Take-Profit. Der Stop-Loss wird am Einstiegspreis abzüglich des ATR-Wertes multipliziert mit dem ATR-Multiplikator festgelegt, und der Take-Profit wird am Einstiegspreis plus dem ATR-Wert multipliziert mit dem ATR-Multiplikator festgelegt. Die Stop-Loss-Amplitude ist größer als die Take-Profit-Amplitude und spiegelt die Risikokontrollidee der Trendfolgestrategie wider.

  4. Die Risikopositionsgröße wird auf der Grundlage der ATR und des Risikobetrags berechnet, so dass das Risiko pro Einheit den festgelegten Risikobetrag nicht übersteigt.

Analyse der Vorteile

  1. Die Kombination mehrerer Indikatoren vermeidet häufigen Handel durch einen einzigen Indikator verursacht. SuperTrend bestimmt die Trendrichtung und Fisher Transform bestimmt die Marktpsychologie, um stabile Handelssignale zu bilden.

  2. Eine angemessene Einstellung von Stop-Loss und Take-Profit trägt dazu bei, die Trends für langfristige Beteiligungen zu erfassen und gleichzeitig Risiken zu kontrollieren.

  3. Die Verwendung von Risikobegrenzungsmanagement und Mindest-Tick-Größe macht das Risiko jedes Handels kontrollierbar und vermeidet große Verluste, die über die Erschwinglichkeit hinausgehen.

  4. Fisher Transform ist ein reibungsloser Indikator, der hilft, Marktlärm zu filtern und falsche Signale zu vermeiden.

  5. Großer Optimierungsraum für Indikatorparameter. SuperTrends ATR-Periode und Multiplikator sowie Fisher's Glatzheit können je nach verschiedenen Produkten und Zeitrahmen angepasst werden, um die optimale Parameterkombination zu finden.

Risikoanalyse

  1. Da es sich dabei um eine Trendstrategie handelt, werden sich während der Perioden, in denen der Bereich begrenzt ist, kleine Verluste anhäufen.

  2. Wenn der Markt lange Zeit in einem Zustand bleibt, weichen die Fisher-Werte weiterhin von der neutralen Zone ab, in diesem Fall sollte die Strategie ausgesetzt werden.

  3. Ein zu naher Stop-Loss kann zu einem vorzeitigen Ausstieg führen.

  4. Wenn man die Transaktionskosten ignoriert, verliert man bei profitablen Geschäften Geld.

  5. Es bedarf einer langfristigen Marktbeteiligung, damit die Strategie ihren Vorteil realisiert.

Optimierungsrichtlinien

  1. Anpassung der ATR-Periode, ATR-Multiplikator, um den Stop-Loss und den Take-Profit zu optimieren.

  2. Versuchen Sie verschiedene Fisher-Parameter wie eine glatte Periode, um stabilere Handelssignale zu finden.

  3. Hinzufügen anderer Indikatoren als Filter, um falsche Trades zu vermeiden, wenn der Markt unsicher ist.

  4. Verschiedene Gewinnstrategien wie Bewegung, Teilweise, ATR Trailing usw. testen, um die Rentabilität zu verbessern.

  5. Optimierung von Kapitalmanagementstrategien wie Fixed Fractional, Kelly-Formel usw., um das Rendite-Risiko-Verhältnis zu erhöhen.

  6. Optimieren für Transaktionskosten, halten Sie für kleine Positionen profitabel.

Schlussfolgerung

Diese Strategie integriert die Vorteile von SuperTrend, Fisher Transform und anderen Indikatoren, um nach einer langfristigen Handelsstrategie einen stabilen Trend zu bilden. Durch Stop-Loss, Take-Profit und Risikomanagement kann es ein gutes Risiko-Reward-Ratio erreichen. Die Strategie muss weitere Optimierungen an Parametern, Signalfilterung, Kapitalmanagement usw. durchführen, um die praktische Leistung zu verbessern.


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


Mehr