Strategi Dimensi Posisi Dinamis Berdasarkan Kurva Ekuitas

Penulis:ChaoZhang, Tanggal: 2024-01-16 15:06:39
Tag:

img

Tinjauan Strategi

Ide inti dari strategi ini adalah untuk menyesuaikan ukuran posisi secara dinamis berdasarkan tren kurva ekuitas - meningkatkan ukuran posisi selama keuntungan dan mengurangi ukuran posisi selama kerugian untuk mengendalikan risiko keseluruhan.

Nama Strategi

Strategi Dimensi Posisi Dinamis Berdasarkan Kurva Ekuitas

Logika Strategi

Strategi ini menggunakan dua metode untuk menentukan apakah kurva ekuitas berada dalam tren menurun: 1) Menghitung rata-rata bergerak sederhana cepat dan lambat dari kurva ekuitas, jika SMA cepat di bawah yang lambat, itu dianggap sebagai tren menurun; 2) Menghitung kurva ekuitas terhadap rata-rata bergerak sederhana jangka panjangnya sendiri, jika ekuitas berada di bawah garis rata-rata bergerak, itu dianggap sebagai tren menurun.

Ketika tren penurunan kurva ekuitas ditentukan, ukuran posisi akan berkurang atau meningkat sebesar persentase tertentu berdasarkan pengaturan. Misalnya, jika pengurangan 50% ditetapkan, ukuran posisi 10% asli akan berkurang menjadi 5%. Mekanisme ini meningkatkan ukuran posisi selama keuntungan dan mengurangi ukuran selama kerugian untuk mengendalikan risiko keseluruhan.

Keuntungan

  • Menggunakan kurva ekuitas untuk menilai laba rugi keseluruhan dan secara dinamis menyesuaikan ukuran posisi untuk mengendalikan risiko
  • Menggabungkan beberapa indikator untuk mengidentifikasi sinyal masuk dapat meningkatkan tingkat kemenangan
  • Parameter yang dapat disesuaikan untuk penyesuaian posisi sesuai dengan selera risiko yang berbeda

Risiko

  • Kerugian dapat diperkuat dengan peningkatan ukuran posisi selama keuntungan
  • Pengaturan agresif karena pengaturan parameter yang tidak tepat
  • Ukuran posisi saja tidak dapat sepenuhnya menghindari risiko sistem

Arah Peningkatan

  • Efektivitas pengujian dari parameter penyesuaian posisi yang berbeda
  • Cobalah indikator lain untuk menentukan tren kurva ekuitas
  • Mengoptimalkan kondisi masuk untuk meningkatkan tingkat kemenangan

Kesimpulan

Logika keseluruhan dari strategi ini jelas - secara dinamis menyesuaikan ukuran posisi berdasarkan kurva ekuitas, yang membantu mengontrol risiko secara efektif. pengujian lebih lanjut dan optimalisasi parameter dan strategi stop loss diperlukan untuk menghindari risiko manuver agresif.


/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 3m
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/
// © shardison
//@version=5

//EXPLANATION
//"Trading the equity curve" as a risk management method is the 
//process of acting on trade signals depending on whether a system’s performance
//is indicating the strategy is in a profitable or losing phase.
//The point of managing equity curve is to minimize risk in trading when the equity curve is  in a downtrend. 
//This strategy has two modes to determine the equity curve downtrend:
//By creating two simple moving averages of a portfolio's equity curve - a short-term
//and a longer-term one - and acting on their crossings. If the fast SMA is below
//the slow SMA, equity downtrend is detected (smafastequity < smaslowequity).
//The second method is by using the crossings of equity itself with the longer-period SMA (equity < smasloweequity).
//When "Reduce size by %" is active, the position size will be reduced by a specified percentage
//if the equity is "under water" according to a selected rule. If you're a risk seeker, select "Increase size by %"
//- for some robust systems, it could help overcome their small drawdowns quicker.

strategy("Use Trading the Equity Curve Postion Sizing", shorttitle="TEC", default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital = 100000)

//TRADING THE EQUITY CURVE INPUTS
useTEC           = input.bool(true, title="Use Trading the Equity Curve Position Sizing")
defulttraderule  = useTEC ? false: true
initialsize      = input.float(defval=10.0, title="Initial % Equity")
slowequitylength = input.int(25, title="Slow SMA Period")
fastequitylength = input.int(9, title="Fast SMA Period")
seedequity = 100000 * .10
if strategy.equity == 0
    seedequity
else
    strategy.equity
slowequityseed   = strategy.equity > seedequity ? strategy.equity : seedequity
fastequityseed   = strategy.equity > seedequity ? strategy.equity : seedequity
smaslowequity    = ta.sma(slowequityseed, slowequitylength)
smafastequity    = ta.sma(fastequityseed, fastequitylength)
equitycalc       = input.bool(true, title="Use Fast/Slow Avg", tooltip="Fast Equity Avg is below Slow---otherwise if unchecked uses Slow Equity Avg below Equity")
sizeadjstring    = input.string("Reduce size by (%)", title="Position Size Adjustment", options=["Reduce size by (%)","Increase size by (%)"])
sizeadjint       = input.int(50, title="Increase/Decrease % Equity by:")
equitydowntrendavgs = smafastequity < smaslowequity
slowequitylessequity = strategy.equity < smaslowequity

equitymethod = equitycalc ? equitydowntrendavgs : slowequitylessequity

if sizeadjstring == ("Reduce size by (%)")
    sizeadjdown = initialsize * (1 - (sizeadjint/100))
else
    sizeadjup = initialsize * (1 + (sizeadjint/100))
c = close
qty = 100000 * (initialsize / 100) / c
if useTEC and equitymethod
    if sizeadjstring == "Reduce size by (%)"
        qty := (strategy.equity * (initialsize / 100) * (1 - (sizeadjint/100))) / c
    else
        qty := (strategy.equity * (initialsize / 100) * (1 + (sizeadjint/100))) / c
    
//EXAMPLE TRADING STRATEGY INPUTS
CMO_Length = input.int(defval=9, minval=1, title='Chande Momentum Length')
CMO_Signal = input.int(defval=10, minval=1, title='Chande Momentum Signal')

chandeMO = ta.cmo(close, CMO_Length)
cmosignal = ta.sma(chandeMO, CMO_Signal)

SuperTrend_atrPeriod = input.int(10, "SuperTrend ATR Length")
SuperTrend_Factor = input.float(3.0, "SuperTrend Factor", step = 0.01)
Momentum_Length = input.int(12, "Momentum Length")
price = close

mom0 = ta.mom(price, Momentum_Length)
mom1 = ta.mom( mom0, 1)
[supertrend, direction] = ta.supertrend(SuperTrend_Factor, SuperTrend_atrPeriod)
stupind = (direction < 0 ? supertrend : na)
stdownind = (direction < 0? na : supertrend)

//TRADING CONDITIONS
longConditiondefault = ta.crossover(chandeMO, cmosignal) and (mom0 > 0 and mom1 > 0 and close > stupind) and defulttraderule
if (longConditiondefault)
    strategy.entry("DefLong", strategy.long, qty=qty)

shortConditiondefault = ta.crossunder(chandeMO, cmosignal) and (mom0 < 0 and mom1 < 0 and close < stdownind) and defulttraderule
if (shortConditiondefault)
    strategy.entry("DefShort", strategy.short, qty=qty)
    
longCondition = ta.crossover(chandeMO, cmosignal) and (mom0 > 0 and mom1 > 0 and close > stupind) and useTEC
if (longCondition)
    strategy.entry("AdjLong", strategy.long, qty = qty)

shortCondition = ta.crossunder(chandeMO, cmosignal) and (mom0 < 0 and mom1 < 0 and close < stdownind) and useTEC
if (shortCondition)
    strategy.entry("AdjShort", strategy.short, qty = qty)
plot(strategy.equity)
plot(smaslowequity, color=color.new(color.red, 0))
plot(smafastequity, color=color.new(color.green, 0))

Lebih banyak