Strategi Pengambilan Untung Trailing Terbaik


Tarikh penciptaan: 2023-10-07 10:28:54 Akhirnya diubah suai: 2023-10-07 10:28:54
Salin: 1 Bilangan klik: 742
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Gagasan utama strategi ini adalah menggunakan garpu mata rata untuk melakukan lebih banyak, garpu mata rata untuk membuat kosong, dan setelah memasuki kedudukan, menetapkan hentian penjejakan. Apabila harga mencapai garis hentian yang ditetapkan, ia akan mencetuskan hentian penjejakan, terus menyesuaikan garis hentian, untuk memaksimumkan keuntungan.

Prinsip Strategi

Strategi ini terdiri daripada beberapa bahagian utama:

  1. Hitung laju rata-rata dan laju rata-rata. Di sini laju rata-rata adalah 20, dan laju rata-rata adalah 50.

  2. Keperluan kemasukan: ◦ Membuat lebih banyak apabila melintasi garis rata-rata perlahan di atas garis rata-rata pantas; ◦ Membuat kosong apabila melintasi garis rata-rata perlahan di bawah garis rata-rata pantas.

  3. Menentukan arah trend. Mencatatkan jumlah bar yang melakukan lebih banyak dan melakukan lebih sedikit, menentukan apakah tren semasa adalah tren multi-kepala atau tren kosong.

  4. Harga kemasukan. Harga yang direkodkan semasa isyarat perdagangan dikeluarkan sebagai harga kemasukan.

  5. Tetapkan penangguhan. Apabila anda melakukan lebih banyak, anda akan berada pada tahap yang lebih tinggi.(1 + peratus hentian) sebagai hentian; apabila kosong, akan berada pada titik rendah(1-peratusan penangguhan) sebagai penangguhan.

  6. Tracking Stop. Stop line akan sentiasa disesuaikan, dan apabila bergerak ke arah yang menguntungkan, terus bergerak ke arah yang menguntungkan dalam peratusan tetap, untuk memaksimumkan keuntungan.

  7. Hentikan barisan. Apabila harga menyentuh Hentikan barisan, Hentikan posisi.

  8. Terdapat juga pilihan untuk memulakan. Ia adalah untuk menetapkan garisan permulaan dan hentikan yang akan mencetuskan tracking stop hanya apabila harga pertama kali melanggar garisan ini.

Kelebihan Strategik

Kelebihan utama strategi ini adalah dengan menggunakan tracking stop, yang dapat memaksimumkan keuntungan. Apabila pasaran berjalan ke arah yang menguntungkan, garis stop akan terus bergerak ke arah yang menguntungkan, memastikan keuntungan.

Selain itu, strategi ini menambah penapis trend untuk penilaian rata-rata, yang dapat mengurangkan pembukaan posisi berulang yang tidak perlu di pasaran yang tidak bergaya. Penambahan fungsi permulaan juga dapat mengelakkan pergerakan harga kecil yang mencetuskan berhenti tracking.

Oleh itu, strategi ini mengintegrasikan pelbagai aspek penilaian trend, syarat kemasukan, dan strategi berhenti, yang membolehkan keuntungan berterusan dan keuntungan maksimum dalam keadaan trend.

Risiko Strategik

Risiko utama strategi ini adalah bahawa perlu ada ruang yang cukup untuk menghentikan pergerakan. Jika ia berbalik dengan cepat, ia boleh menyebabkan kerugian.

Selain itu, dalam keadaan gegaran, seringnya pemicu tali penghalang juga boleh menyebabkan kerosakan.

Akhirnya, risiko juga meningkat jika parameter ditetapkan dengan tidak betul, seperti nisbah penangguhan yang terlalu besar.

Anda boleh mengawal risiko dengan menetapkan nisbah stop loss yang munasabah, mengelakkan perdagangan dalam keadaan goyah, atau menetapkan stop loss untuk mengawal risiko.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Pengoptimuman parameter garis rata. Anda boleh menguji parameter kitaran garis rata yang berbeza untuk mencari kombinasi yang lebih sesuai.

  2. Optimumkan fungsi permulaan. Anda boleh menguji pelbagai saiz tetingkap permulaan untuk mencari tetapan yang lebih sesuai.

  3. Pengoptimuman nisbah penangguhan. Parameter nisbah penangguhan yang lebih sesuai dapat dijumpai melalui pengulangan.

  4. Menambah Stop Loss. Menetapkan kedudukan Stop Loss yang munasabah dan mengawal risiko.

  5. Optimumkan syarat penapisan. Anda boleh menguji untuk menambah syarat penapisan lain, seperti jumlah transaksi, ATR stop loss, dan sebagainya.

  6. Pengoptimuman objek token. Ia boleh diuji dalam pelbagai token seperti saham, mata wang asing, mata wang kripto, dan lain-lain.

ringkaskan

Strategi ini mengintegrasikan beberapa modul strategi seperti penghakiman trend, syarat masuk, dan pengesanan penghentian. Dalam keadaan trend, anda boleh terus mengesan penghentian dan memaksimumkan keuntungan. Tetapi anda mesti mengawal risiko dengan baik, mengelakkan penggunaan dalam keadaan goyah, dan mengoptimumkan parameter untuk memanfaatkan strategi.

Kod 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