Die Hauptidee dieser Strategie ist es, mit dem Gleichgewicht Goldfork zu überschreiten, die Gleichgewicht-Dot-Fork zu machen, und nach dem Eintritt in die Position, setzen Sie die Tracking-Stopp. Wenn der Preis die angegebene Stop-Line erreicht, wird die Tracking-Stopp ausgelöst, und die Stop-Line wird ständig angepasst, um den Gewinn zu maximieren.
Die Strategie besteht aus folgenden Teilen:
Berechnen Sie die schnelle und die langsame Durchschnittslinie. Hier ist die schnelle Durchschnittslinie 20 und die langsame Durchschnittslinie 50.
Beurteilung der Zulassungsvoraussetzungen: Mehr auf der schnellen Durchschnittslinie, weniger auf der schnellen Durchschnittslinie.
Beurteilen Sie die Richtung des Trends. Aufzeichnen Sie die Anzahl der Über- und Überholbarren, um zu beurteilen, ob der aktuelle Trend mehrköpfig ist oder ob er sich im Luftverkehr befindet.
Eintrittspreis. Der Preis, der bei der Ausgabe des Handelssignals als Eintrittspreis aufgezeichnet wird.
Setzen Sie eine Stop-Line. Wenn Sie zu viel tun, ist es auf dem Höhepunkt.(1 + Stop-Percentage) als Stop; bei einer Leerstellung wird auf einem Tiefpunkt(1-Stop-Prozentsatz) als Stop.
Tracking Stop. Die Stop-Line wird ständig angepasst und bewegt sich in die günstige Richtung, während sie einen festen Prozentsatz in die günstige Richtung bewegt, um den Gewinn zu maximieren.
Der Stop-Line-Trigger wird ausgelöst, wenn der Preis die Stop-Line erreicht.
Es gibt auch eine optional eingesetzte Start-Stopp-Funktion. Sie setzt eine Start-Stopp-Line ein, die nur dann ausgelöst wird, wenn der Preis diese Linie zum ersten Mal überschreitet.
Der größte Vorteil dieser Strategie besteht darin, dass die Verfolgung von Stop-Lines genutzt wird, um die Gewinnmarge zu maximieren. Wenn der Markt in eine günstige Richtung läuft, bewegt sich die Stop-Line ständig in eine günstige Richtung, um einen Gewinn zu sichern.
Außerdem enthält die Strategie einen Trendfilter, der die Gewinn- und Verlustbeurteilung beeinflusst und die unnötige Wiederholung von Positionen in nicht-trendigen Märkten verhindert. Die Einführung einer Starterfunktion verhindert auch, dass bei geringfügigen Preisschwankungen ein Tracking-Stop ausgelöst wird.
Die Strategie integriert also die Berechnungen über die Trends, die Einstiegsbedingungen und die Stop-Stopp-Strategie, um in einer Trendphase dauerhaft zu profitieren und die Erträge zu maximieren.
Das Hauptrisiko dieser Strategie besteht darin, dass es genügend Spielraum geben muss, um einen Stopp zu erreichen. Wenn sich der Kurs schnell umkehrt, kann dies zu Verlusten führen.
Außerdem kann das häufige Auslösen der Stoppschnur bei Erschütterungen Schäden verursachen.
Schließlich erhöht sich das Risiko, wenn die Parameter nicht richtig eingestellt sind, z. B. wenn die Stoppquote zu groß ist.
Risiken können durch ein vernünftiges Setup von Stop-Loss-Verhältnissen vermieden werden, um einen Handel in einem wackligen Umfeld zu vermeiden, oder durch ein Setup von Stop-Losses.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung der Mittellinienparameter. Verschiedene Mittellinien-Periodenparameter können getestet werden, um eine geeignete Kombination zu finden.
Optimierung der Startup-Funktionen. Versuchen Sie, die Größe der Startup-Stop-Taste zu testen, um die richtige Einstellung zu finden.
Optimierung des Stopp-Verhältnisses. Durch Rückmeldung kann ein geeigneter Stopp-Verhältnis-Parameter gefunden werden.
Einstieg in den Stopp. Setzen Sie einen vernünftigen Stopp und kontrollieren Sie die Risiken.
Die Optimierung der Filterbedingungen. Es können weitere Filterbedingungen, wie z. B. Handelsvolumen, ATR-Stopp-Loss usw., getestet werden.
Die Optimierung der Marken. Sie kann in verschiedenen Handelsmarken wie Aktien, Devisen, Kryptowährungen usw. getestet werden.
Diese Strategie integriert mehrere Strategie-Module wie Trendbeurteilung, Einstiegsbedingungen und Stop-Tracking. In einem Trend kann die Stop-Tracking fortgesetzt werden, um den Gewinn zu maximieren.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
SystemName = "BEST Trailing Profit Strategy"
// This string is to personalize the text that appears with your orders on the chart through strategy() calls and entry/exit markers, and in the alert default message.
// Although leaving it empty will not cause problems in study mode,
TradeId = "BEST"
// These values are used both in the strategy() header and in the script's relevant inputs as default values so they match.
// Unless these values match in the script's Inputs and the TV backtesting Properties, results between them cannot be compared.
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
// strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay,
// pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent,
// commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2)
// strategy(title=SystemName, shorttitle=SystemName, overlay=true,
// pyramiding=0, default_qty_value=100, precision=7, currency=currency.USD,
// commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=10000)
//
// Author: Daveatt
// Revision: R0.1 Beta
// Date: 8-Dec-2019
//
// inputs
src = input(defval=close, type=input.source, title="Source")
slowLength = input(20, "Fast Length",minval=2,step=1)
fastLength = input(50, "Fast Length",minval=2,step=1)
// Calculate moving averages
fastSMA = sma(src, slowLength)
slowSMA = sma(src, fastLength)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])
// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Take Profit ]======//
///////////////////////////////
// Use TP?
useTP = input(true, "Use take profit")
// TP trailing
ProfitTrailPerc = input(1.0, "Trailing Profit (%)",minval=0,step=0.5,type=input.float) * 0.01
use_TP_Trigger = input(true, "Use Take Profit Trigger")
// Will trigger the take profit trailing once reached
takeProfitTrigger = input(3.0, "Take Profit Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01
// ttp := ttp>tp ? tp : ttp
takeprofitPriceTrigger = 0.0
takeprofitPriceTrigger := if (use_TP_Trigger)
if (buy_trend)
entry_price * (1 + takeProfitTrigger)
else
entry_price * (1 - takeProfitTrigger)
else
-1
//plot(entry_price, title='entry_price', transp=100)
var TP_Trigger_Long_HIT = false
TP_Trigger_Long_HIT := useTP and use_TP_Trigger and buy_trend and high >= takeprofitPriceTrigger
? true : TP_Trigger_Long_HIT[1]
var TP_Trigger_Short_HIT = false
TP_Trigger_Short_HIT := useTP and use_TP_Trigger and sell_trend and low <= takeprofitPriceTrigger
? true : TP_Trigger_Short_HIT[1]
display_long_TP_trigger = useTP and buy_trend and TP_Trigger_Long_HIT == false
and takeprofitPriceTrigger != -1
display_short_TP_trigger = useTP and sell_trend and TP_Trigger_Short_HIT == false
and takeprofitPriceTrigger != -1
display_TP_trigger = display_long_TP_trigger or display_short_TP_trigger
//🔷🔷🔷
// @hugo: Will display the TP trigger as long as not hit
// once the TP trigger is hit, the TP trailing will activate
plot(display_TP_trigger ? takeprofitPriceTrigger : na, title='takeprofitPriceTrigger', transp=0, color=color.orange,
style=plot.style_cross, linewidth=3)
longTrailTP= 0.0, shortTrailTP = 0.0
// Trailing Profit
// Start trailing once trigger is reached
longTrailTP := if useTP and buy_trend
tpValue = high * (1 + ProfitTrailPerc)
max(tpValue, longTrailTP[1])
else
0
shortTrailTP := if useTP and sell_trend
tpValue = low * (1 - ProfitTrailPerc)
min(tpValue, shortTrailTP[1])
else
999999
//plot(longTrailTP, title='debug longTrailTP', transp=100)
//plot(shortTrailTP, title='debug shortTrailTP', transp=100)
//////////////////////////////////////////////////////////////////////////////////////////
//*** TRAILING TAKE PROFIT HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
//🔷🔷🔷
// @hugo: I use crossover/crossunder for the alerts to trigger the events only once
cond_long_trail_tp_hit = useTP and buy_trend and crossover(high, longTrailTP[1])
and (TP_Trigger_Long_HIT or use_TP_Trigger == false)
cond_short_trail_tp_hit = useTP and sell_trend and crossunder(low, shortTrailTP[1])
and (TP_Trigger_Short_HIT or use_TP_Trigger == false)
// 🔷🔷🔷
// Plot take profits values for confirmation
// Display the trailing TP until not hit
plot(series= useTP and buy_trend and high <= longTrailTP and
(TP_Trigger_Long_HIT or use_TP_Trigger == false) ? longTrailTP : na,
color=color.aqua, style=plot.style_circles,
linewidth=2, title="Long Trail TP")
plot(series= useTP and sell_trend and low >= shortTrailTP and
(TP_Trigger_Short_HIT or use_TP_Trigger == false) ? shortTrailTP : na,
color=color.aqua, style=plot.style_circles,
linewidth=2, title="Short Trail TP")
close_long = cond_long_trail_tp_hit
close_short = cond_short_trail_tp_hit
// Submit entry orders
strategy.entry("EL", long=true, when=enterLong)
strategy.close("EL", when=close_long)
//if (enterShort)
strategy.entry("ES", long=false, when=enterShort)
strategy.close("ES", when=close_short)
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// ALERTS ////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////
//* Put Entry Alerts below *//
//////////////////////////////
// IN STUDY MODE ONLY
// ⚠️⚠️⚠️ For alerts on the signal itself ⚠️⚠️⚠️
//alertcondition(buy_event, "Open Long", "LONG")
//alertcondition(sell_event, "Open Short", "SHORT")
// For the closes you will want to trigger these alerts on condition with alert
// option "Once Per Bar" for TP and SL
if change_trend
TP_Trigger_Long_HIT := false
TP_Trigger_Short_HIT := false