Die beste Strategie zur Gewinnverfolgung

Schriftsteller:ChaoZhang, Datum: 2023-10-07 10:28:54
Tags:

Übersicht

Die Hauptidee dieser Strategie besteht darin, lang zu gehen, wenn der schnelle MA über den langsamen MA überschreitet, kurz zu gehen, wenn der schnelle MA unter dem langsamen MA überschreitet, und nach dem Eintritt in die Position einen nachfolgenden Gewinn zu erzielen. Wenn der Preis die Gewinnlinie erreicht, löst er den nachfolgenden Gewinn aus und passt die Gewinnlinie ständig an, um die Gewinne zu maximieren.

Strategie Logik

Die Strategie besteht aus folgenden Hauptteilen:

  1. Berechnen Sie die schnellen und langsamen gleitenden Durchschnitte.

  2. Es ist notwendig, die Eintrittsbedingungen festzulegen.

  3. Erfassen Sie die Anzahl der Balken seit langen und kurzen Signalen, beurteilen Sie, ob es sich um einen Aufwärtstrend oder einen Abwärtstrend handelt.

  4. Eintrittspreis: Der Preis, der beim Auslösen von Handelssignalen als Eintrittspreis erfasst wird.

  5. Für Longs ist der Take Profit hoch * (1 + Take Profit Procent); für Shorts ist der Take Profit niedrig * (1 - Take Profit Procent).

  6. Die Gewinnlinie ändert sich ständig und bewegt sich im festen Prozentsatz in die profitable Richtung.

  7. Wenn der Preis ankommt, nehmen Sie die Gewinnlinie, schließen Sie die Position für den Gewinn.

  8. Es gibt auch eine optionale Aktivierungsfunktion. Nur wenn der Preis erstmals durch das Aktivierungsniveau bricht, wird der nachfolgende Gewinn ausgelöst.

Analyse der Vorteile

Der größte Vorteil dieser Strategie ist die Maximierung der Gewinne durch Verfolgung des Gewinns. Wenn sich der Preis in günstige Richtung bewegt, bewegt sich die Gewinnlinie in günstige Richtung, um Gewinne zu erzielen.

Es fügt auch Trendfilterung mit MA-Kreuzungen hinzu, um unnötige Whipsaws in nicht-trendigen Märkten zu vermeiden.

Durch die Kombination von Trend, Einstieg, Gewinn nehmen, kann es den Trend fahren, um kontinuierlich Gewinne zu erzielen und die Rendite zu maximieren.

Risikoanalyse

Das Hauptrisiko besteht darin, dass eine angemessene Preisbewegung erforderlich ist, um einen Gewinn zu erzielen.

Auch häufige Profit-Triggerungen auf unruhigen Märkten können zu Verlusten führen.

Und falsch eingestellte Parameter wie zu hoher Gewinnanteil können das Risiko erhöhen.

Das Risiko kann verwaltet werden, indem der richtige Profitanteil festgelegt wird, der Handel in unruhigen Märkten vermieden wird oder der Stop-Loss verwendet wird.

Optimierung

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie die MA-Parameter, indem Sie verschiedene Perioden testen, um bessere Kombinationen zu finden.

  2. Optimieren Sie die Aktivierungsfunktion, indem Sie verschiedene Aktivierungsstufen testen.

  3. Prozentsatz des Gewinns durch Backtesting optimieren.

  4. Um das Risiko zu kontrollieren, müssen Stop-Loss auf angemessenen Niveaus angebracht werden.

  5. Testen Sie zusätzliche Filter wie Lautstärke, ATR-Stopp usw.

  6. Test auf verschiedenen Märkten wie Aktien, Forex, Krypto.

Schlussfolgerung

Diese Strategie integriert mehrere Module wie Trend, Entry, Trailing Take Profit, um Gewinne zu maximieren, indem man Trends reitet.


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

Mehr