Der Wert des Wertpapiers, der in den unteren Zahlen angegebenen Zahlen angegeben ist, wird nach der Handelsstrategie berechnet.

Schriftsteller:ChaoZhang, Datum: 2023-10-09 15:18:10
Tags:

Übersicht

Diese Strategie entwirft ein Handelssystem mit einer Trend-Folge-Funktion, die auf der Grundlage von Average True Range (ATR) und Relative Strength Index (RSI) basiert.

Strategie Logik

  1. Berechnen Sie ATR und RSI. ATR spiegelt die durchschnittliche Preisvolatilität über einen Zeitraum wider. RSI spiegelt den Machtvergleich zwischen Bullen und Bären wider.

  2. Wenn der ATR höher als sein gleitender Durchschnitt ist, gilt er als eine für den Handel geeignete Periode mit hoher Volatilität.

  3. Wenn der RSI über dem Überkauf liegt, geht man lang, wenn er unter dem Überverkauf liegt, geht man kurz.

  4. Nach Long verwenden Sie den hohen Punkt multipliziert mit einem festen Verhältnis als Trailing Stop Loss Preis.

  5. Nehmen Sie Profit nach Profitquote.

Analyse der Vorteile

  1. Ein Trailing Stop Loss kann Stop Loss-Orders maximieren, um Verluste zu reduzieren.

  2. Der RSI kann die Stärke von Bullen und Bären effektiv beurteilen, um wiederholte Eröffnungen von Positionen in Bereichsmärkten zu vermeiden.

  3. Als Volatilitätsindikator kann der ATR die Märkte mit Bandbreiten filtern und nur in Trendmärkten handeln.

  4. Der Profit-by-Profit-Verhältnis kann einige Gewinne einbringen.

Risikoanalyse

  1. Sowohl ATR als auch RSI sind Verzögerungsindikatoren, was zu einem späten Einstiegszeitplan führen kann.

  2. Die festgelegte Gewinn-Verlust-Ratio für Stop-Loss und Take-Profit ist anfällig für eine Überoptimierung und sollte auf der Grundlage der Ergebnisse der Backtests mit Bedacht festgelegt werden.

  3. In großen Zyklus-Range-gebundenen Märkten kann der ATR für eine lange Zeit höher als der gleitende Durchschnitt sein, was zu einem Überhandel führt.

Optimierungsrichtlinien

  1. Optimierung der Parameter von ATR und RSI, um das System empfindlicher zu machen.

  2. Zusätzlich werden die MA und andere Indikatoren verwendet, um die Trendrichtung zu bestimmen, um zu vermeiden, dass die Märkte falsch in die Bandbreite eingegriffen werden.

  3. Versuchen Sie dynamischen Stop-Loss und nehmen Sie Gewinnquoten anstelle von festen Einstellungen.

  4. Überlegen Sie, Maßnahmen zur Kontrolle der Handelsgröße einzuführen.

Zusammenfassung

Diese Strategie integriert die Vorteile der ATR- und RSI-Indikatoren und entwirft einen einfachen und praktischen Trend nach dem Handelssystem.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © liwei666
//@version=5
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #
strategy(
 title                = "ATR_RSI_Strategy v2[liwei666]",
 shorttitle           = "ATR_RSI_Strategy",
 overlay              =  true,
 max_lines_count                 =  500, 
 max_labels_count                =  500, 
 max_boxes_count                 =  500,
 max_bars_back = 5000,
 initial_capital = 10000,
 default_qty_type=strategy.percent_of_equity, 
 default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1, 
 commission_value=0.05
 )
// # ========================================================================= #
// #                   |   Strategy  |
// # ========================================================================= #

atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)

var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry

sma_norm_h_45() => 
    source = high
    n = 45
    sma = ta.sma(source, n) 
    sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
    sma_norm

atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length) 
rsi_value = ta.rsi(close, length = rsi_length) 
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()

var intra_trade_high = 0.0
var intra_trade_low = 0.0

if strategy.position_size == 0
    intra_trade_high := high
    intra_trade_low := low

    if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
        if atr_value > atr_ma
            if rsi_value > rsi_buy
                strategy.entry("B1", strategy.long, limit = close + 5 )
            else if rsi_value < rsi_sell
                strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
    intra_trade_high := math.max(intra_trade_high, high)
    intra_trade_low := low

    long_tp = intra_trade_high * (1 - trailing_percent / 100)
    strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)

else if strategy.position_size < 0
    intra_trade_high := high
    intra_trade_low := math.min(intra_trade_low, low) 

    short_tp = intra_trade_low * (1 + trailing_percent / 100)
    strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)

Mehr