Strategi Take Profit Trailing Terbaik


Tanggal Pembuatan: 2023-10-07 10:28:54 Akhirnya memodifikasi: 2023-10-07 10:28:54
menyalin: 1 Jumlah klik: 742
1
fokus pada
1617
Pengikut

Ringkasan

Gagasan utama dari strategi ini adalah untuk melakukan over, melakukan over, dan setelah masuk ke posisi, mengatur tracking stop. Ketika harga mencapai batas stop yang ditentukan, akan memicu tracking stop, terus menyesuaikan stop, untuk memaksimalkan keuntungan.

Prinsip Strategi

Strategi ini terdiri dari beberapa bagian utama:

  1. Perhitungan rata-rata cepat dan rata-rata lambat. Di sini rata-rata cepat adalah 20 dan rata-rata lambat adalah 50.

  2. Persyaratan masuk: ◦ Lebih banyak pada garis rata-rata cepat dan lebih lambat di bawah garis rata-rata cepat dan kosong pada garis rata-rata lambat.

  3. Menentukan arah tren. Mencatat jumlah bar overhead dan overhead, dan menentukan apakah tren saat ini adalah tren multihead atau tren overhead.

  4. Harga masuk. Harga yang tercatat pada saat sinyal perdagangan dikirim sebagai harga masuk.

  5. Setting Stop Line. Bila terlalu banyak, akan di titik tinggi.(1 + Stop Stop Persentase) sebagai Stop Stop; akan berada pada titik rendah saat melakukan blanko(1-persentase stop) sebagai stop.

  6. Tracking Stop. Stop line akan terus beradaptasi, dan akan terus bergerak ke arah yang menguntungkan dengan persentase tetap untuk memaksimalkan keuntungan.

  7. Stop line dipicu. Bila harga menyentuh stop line, maka posisi ditutup.

  8. Ada juga opsi untuk memulai. Ini adalah pengaturan untuk memulai dan menghentikan garis, yang hanya akan memicu tracking stop ketika harga pertama kali melewati garis ini.

Keunggulan Strategis

Keuntungan terbesar dari strategi ini adalah memanfaatkan tracking stop dan dapat memaksimalkan keuntungan. Ketika pasar berjalan ke arah yang menguntungkan, stop line akan terus bergerak ke arah yang menguntungkan, memastikan keuntungan.

Selain itu, strategi ini menambahkan filter tren untuk penilaian rata-rata, yang dapat mengurangi pembukaan posisi berulang yang tidak perlu di pasar non-trend. Penambahan fungsi memulai juga dapat mencegah pergerakan kecil dari harga yang memicu tracking stop.

Jadi, strategi ini mengintegrasikan beberapa aspek dari penilaian tren, persyaratan masuk, dan strategi stop-loss, yang dapat terus menghasilkan keuntungan dan memaksimalkan keuntungan dalam situasi tren.

Risiko Strategis

Risiko utama dari strategi ini adalah bahwa harus ada ruang yang cukup untuk melakukan stop-loss. Jika harga segera berbalik, maka kemungkinan besar akan terjadi kerugian.

Selain itu, dalam kondisi gempa, seringnya pemicu stop kontak juga dapat menyebabkan kerusakan.

Akhirnya, jika parameter yang tidak tepat, seperti stop-loss ratio terlalu besar, juga akan meningkatkan risiko.

Risiko dapat dikendalikan dengan mengatur stop loss rasio yang masuk akal, menghindari perdagangan dalam situasi yang bergolak, atau mengatur stop loss.

Optimasi Strategi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Optimasi parameter rata-rata. Anda dapat menguji parameter siklus rata-rata yang berbeda untuk menemukan kombinasi yang lebih cocok.

  2. Optimalkan fungsi start-up. Anda dapat menguji ukuran start-up yang berbeda untuk menemukan pengaturan yang lebih sesuai.

  3. Optimasi rasio stop. Parameter rasio stop yang lebih sesuai dapat ditemukan dengan feedback.

  4. Menambahkan Stop Loss. Menetapkan posisi Stop Loss yang masuk akal, mengendalikan risiko.

  5. Optimalisasi kondisi penyaringan. Anda dapat menguji penyaringan tambahan seperti volume transaksi, ATR stop loss, dan sebagainya.

  6. Optimalisasi token. Dapat diuji dalam berbagai token seperti saham, valuta asing, cryptocurrency, dll.

Meringkaskan

Strategi ini mengintegrasikan beberapa modul strategi seperti penilaian tren, kondisi masuk, dan pelacakan stop-loss. Dalam situasi tren, Anda dapat terus melacak stop-loss dan memaksimalkan keuntungan. Tetapi Anda harus mengendalikan risiko dengan baik, menghindari penggunaan dalam situasi goyah, dan melakukan pengoptimalan parameter untuk memberikan dampak maksimal pada strategi.

Kode Sumber Strategi
/*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