Kurzfristige Handelsstrategie auf Basis eines stochastischen Indikators mit elastischem Stop Loss

Schriftsteller:ChaoZhang, Datum: 28.09.2023
Tags:

Übersicht

Diese Strategie verwendet den Stochastic-Oszillator-Indikator, um überkaufte und überverkaufte Marktbedingungen für den kurzfristigen Handel zu bestimmen.

Strategie Logik

Eintrittslogik

Der Stochastic-Oszillator-Indikator besteht aus der %K-Linie und der %D-Linie. Wenn die %K-Linie über die %D-Linie kreuzt, wird ein goldenes Kreuzkaufsignal generiert. Wenn die %K-Linie unter die %D-Linie kreuzt, wird ein Todeskreuzverkaufsignal ausgelöst. Diese Strategie folgt einfach den Crossovers auf dem Stochastic-Indikator, um Einträge zu bestimmen.

Wenn der Stochastische Indikator einen goldenen Kreuz aufweist und der Wert von %K unter 80 liegt (nicht überkauft), wird eine Long-Position aufgenommen.

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20

Verlust-Logik aufhören

Diese Strategie verwendet einen elastischen Stop-Loss-Ansatz, bei dem der Stop-Preis auf der Grundlage früherer Pivot-Punkte festgelegt wird, wie unten gezeigt:

piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)

stoploss_long=valuewhen(piv_low,piv_low,0)
stoploss_short=valuewhen(piv_high,piv_high,0) 

Pivots stellen wichtige Unterstützungs- und Widerstandsniveaus dar. Wenn der Preis durch das Pivot-Niveau bricht, wird die Position geschlossen und der Stop-Loss-Preis wird den sich ändernden Pivot-Punkten elastisch folgen.

Darüber hinaus berücksichtigt der Stopppreis auch die höchsten und niedrigsten Preise des laufenden Zeitraums zur weiteren Optimierung:

if GoLong
    stoploss_long := low<pl ? low : pl
if GoShort
    stoploss_short := high>ph ? high : ph

Vorteile

  1. Stochastische Kennzahlen, um Höhen und Tiefen zu vermeiden;

  2. Elastic Stop Loss folgt den Marktveränderungen und optimiert den Stoppreis;

  3. Der Stop-Loss auf Basis des Pivot-Point-Breakouts ist effektiver.

  4. Die Optimierung des Stopppreises unter Verwendung der aktuellen höchsten und niedrigsten Preise macht den Stopp genauer.

Risiken und Lösungen

  1. Risiko falscher Signale von Stochastic

    • Lösung: Bestätigen Sie Signale mit anderen Indikatoren, um falsche Signale zu vermeiden
  2. Risikopositionen, bei denen die Risikopositionen nicht berücksichtigt werden

    • Lösung: Reduzieren Sie den Stoppweg oder verwenden Sie Methoden wie Chandelier Exit
  3. Risiko einer hohen Handelsfrequenz und Provisionen

    • Lösung: Lockerung der Eingangsregeln zur Verringerung der Anzahl der Geschäfte

Optimierungsrichtlinien

  1. Optimieren Sie den Stop-Loss, indem Sie Methoden wie Chandelier Exit, Trailing Stop, oscillierenden Stop-Loss usw. verwenden

  2. Optimierung der Einstiegsregeln mit anderen Indikatoren, um Stochastische falsche Signale zu vermeiden

  3. Optimieren Sie die Gewinnentnahme, indem Sie das Ziel für einen nachfolgenden Gewinn, das Ziel für einen schwankenden Gewinn usw. verwenden, um die Rentabilität zu erhöhen

  4. Zusätzliche Positionsgröße, wie feste Menge pro Handel, fester Risikoprozentsatz usw. zur Kontrolle des Handelsrisikos

  5. Optimierung von Parametern wie K, D-Perioden, Glättung usw. basierend auf verschiedenen Märkten

Zusammenfassung

Diese Strategie basiert auf Stochastic Overbought/Oversold und verwaltet das Risiko mit einem elastischen Stop-Loss. Sie hat den Vorteil, dass sie keine Dynamik verfolgt, effektive Stops, aber auch einige falsche Signalrisiken hat. Zukünftige Verbesserungen können bei Einträgen, Stops, Exits, Risikomanagement usw. vorgenommen werden.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Peter_O

//@version=4
//strategy(title="TradingView Alerts to MT4 MT5 example with cancelling pending orders", commission_type=strategy.commission.cash_per_order, commission_value=0.00003, overlay=true, default_qty_value=100000, initial_capital=1000)

// This script was created for educational purposes only.
// It is showing how to create pending orders and cancel them
// Together with syntax to send these events through TradingView alerts system
// All the way to brokers for execution

TakeProfitLevel=input(400)

// **** Entries logic **** {
periodK = 13 //input(13, title="K", minval=1)
periodD = 3 //input(3, title="D", minval=1)
smoothK = 4 //input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
// plot(k, title="%K", color=color.blue)
// plot(d, title="%D", color=color.orange)
// h0 = hline(80)
// h1 = hline(20)
// fill(h0, h1, color=color.purple, transp=75)

GoLong=crossover(k,d) and k<80
GoShort=crossunder(k,d) and k>20
// } End of entries logic

// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high

pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)

if GoLong 
    stoploss_long := low<pl ? low : pl
if GoShort 
    stoploss_short := high>ph ? high : ph
plot(stoploss_long, color=color.lime, title="stoploss_long")
plot(stoploss_short, color=color.red, title="stoploss_short")
// } End of Pivot-points and stop-loss logic

CancelLong=crossunder(low,stoploss_long) and strategy.position_size[1]<=0 and strategy.position_size<=0
CancelShort=crossover(high,stoploss_short) and strategy.position_size[1]>=0 and strategy.position_size>=0
entry_distance=input(10, title="Entry distance for stop orders")

plotshape(CancelLong ? stoploss_long[1]-10*syminfo.mintick : na, location=location.absolute, style=shape.labelup, color=color.gray, textcolor=color.white, text="cancel\nlong", size=size.tiny)
plotshape(CancelShort ? stoploss_short[1]+10*syminfo.mintick : na, location=location.absolute, style=shape.labeldown, color=color.gray, textcolor=color.white, text="cancel\nshort", size=size.tiny)

strategy.entry("Long", strategy.long, when=GoLong, stop=close+entry_distance*syminfo.mintick)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.cancel("Long", when = CancelLong)
strategy.entry("Short", strategy.short, when=GoShort, stop=close-entry_distance*syminfo.mintick)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
strategy.cancel("Short", when = CancelShort)

if GoLong
    alertsyntax_golong='long offset=' + tostring(entry_distance) + ' slprice=' + tostring(stoploss_long) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
    alertsyntax_goshort='short offset=' + tostring(-entry_distance) + ' slprice=' + tostring(stoploss_short) + ' tp=' + tostring(TakeProfitLevel)
    alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if CancelLong
    alertsyntax_cancellong='cancel long'
    alert(message=alertsyntax_cancellong, freq=alert.freq_once_per_bar_close)
if CancelShort
    alertsyntax_cancelshort='cancel short'
    alert(message=alertsyntax_cancelshort, freq=alert.freq_once_per_bar_close)
    


Mehr