Preisbasierte Stop-Loss- und Take-Profit-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-23 15:36:00
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, die eingegangenen Stop-Loss- und Take-Profit-Beträge zu verwenden, um angemessene Stop-Loss- und Take-Profit-Tick-Levels festzulegen, um das Risiko und die Belohnung jedes Handels zu verwalten.

Strategie Logik

Die Strategie setzt zuerst zufällige Einstiegssignale und geht lang, wenn SMA14 über SMA28 kreuzt, und kurz, wenn SMA14 unter SMA28 kreuzt.

Nach dem Eintritt verwendet die Strategie die Funktion moneyToSLPoints, um das Stop-Loss-Tick-Level basierend auf der Stop-Loss-Dollarmenge zu berechnen.

Wenn zum Beispiel 100 Verträge mit jedem Tick im Wert von 10 USD gehalten werden und der Stop-Loss auf 100 USD festgelegt wird, wird das Stop-Loss-Tick-Level als 100/10/100 = 0,1 Ticks berechnet.

Endlich!strategy.exitDie Stop-Loss- und Take-Profit-Linien werden auch für Debugging-Zwecke gezeichnet.

Analyse der Vorteile

Der größte Vorteil dieser preisbasierten Stop-Loss- und Take-Profit-Strategie besteht darin, dass die Parameter intuitiv sind.

Außerdem können Dollar-Stopps im Vergleich zu festen Tick-Stopps, wenn sich die Marktvolatilität ändert, das tatsächliche Risiko besser kontrollieren.

Risikoanalyse

Diese Stop-Loss- und Take-Profit-Strategie birgt einige Risiken:

  1. Wenn der Stop-Loss zu breit ist, ist es leicht, bei Umkehrungen erwischt zu werden.

  2. Wenn der Take-Profit-Abstand sehr klein ist, wäre es für normale einseitige Trends schwierig, ihn zu erreichen, was einen Gewinn unwahrscheinlich macht.

  3. Wenn ein hoher Tic-Wert-Vertrag wie Rohöl verwendet wird, würde sich der gleiche Dollar-Stop-Loss in sehr wenige Ticks übersetzen, die leicht durch Lärm gestoppt werden können.

Optimierungsrichtlinien

Einige Möglichkeiten, wie diese Strategie verbessert werden kann:

  1. Das Eintrittssignal kann durch eine bessere Kombination von Trend, Volatilität, Saisonalität usw. mit Zeiteinträgen verstärkt werden.

  2. Bei hochvolatilen Rohstoffen können größere Stops verwendet werden.

  3. Stops können sich an die Volatilität anpassen, breiten sich aus, wenn die Volatilität steigt, und straffen sich, wenn die Volatilität fällt.

  4. Für verschiedene Handelssitzungen können unterschiedliche Stop/Profit-Ansätze verwendet werden.

Schlussfolgerung

Diese Strategie implementiert intuitive Stop Loss und Take Profit basierend auf Dollarbeträgen. Ihre Vorteile sind intuitive Parameter und Kapitalkontrolle. Nachteile sind die Leichtigkeit, in Umkehrungen und fehlenden Gewinnen gefangen zu werden. Sie kann verbessert werden, indem Einträge verbessert, Stops / Ziele optimiert, bessere Produkte ausgewählt werden, um sie stabiler zu machen.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 10m
basePeriod: 1m
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/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Mehr