Strategi pengurusan kedudukan berdasarkan keluk modal


Tarikh penciptaan: 2024-01-16 15:06:39 Akhirnya diubah suai: 2024-01-16 15:06:39
Salin: 1 Bilangan klik: 738
1
fokus pada
1617
Pengikut

Strategi pengurusan kedudukan berdasarkan keluk modal

Gambaran Keseluruhan Strategi

Idea teras strategi ini adalah untuk menyesuaikan saiz kedudukan secara dinamik mengikut pergerakan kurva modal, meningkatkan kedudukan apabila menguntungkan, mengurangkan kedudukan apabila rugi, untuk mengawal risiko keseluruhan. Strategi ini menggabungkan indikator momentum Chande, indikator SuperTrend dan indikator momentum untuk mengenal pasti isyarat perdagangan.

Prinsip Strategi

Strategi ini menggunakan dua cara untuk menentukan sama ada kurva modal berada dalam trend menurun: 1) mengira purata bergerak sederhana cepat dan perlahan pada kurva modal, yang dinilai sebagai menurun jika SMA cepat lebih rendah daripada SMA perlahan; 2) mengira kurva modal dengan purata bergerak sederhana dalam tempoh yang lebih lama dari dirinya sendiri, yang dinilai sebagai menurun jika kurva modal lebih rendah daripada rata-rata bergerak tersebut.

Apabila menilai kurva modal ke bawah, kedudukan akan dikurangkan atau ditingkatkan mengikut peratusan tertentu. Sebagai contoh, jika ditetapkan untuk dikurangkan sebanyak 50%, kedudukan 10% akan dikurangkan kepada 5%. Strategi ini menjadikan saiz kedudukan lebih besar apabila menguntungkan, dan mengurangkan saiz kedudukan apabila rugi, untuk mengawal risiko keseluruhan.

Kelebihan Strategik

  • Menggunakan kurva modal untuk menilai kerugian keseluruhan sistem, perubahan posisi secara dinamik membantu mengawal risiko
  • Menggabungkan pelbagai penunjuk untuk menilai kemasukan, meningkatkan peluang keuntungan
  • Parameter yang boleh disesuaikan untuk menyesuaikan kedudukan yang sesuai dengan pilihan risiko yang berbeza

Risiko Strategik

  • Posisi yang lebih besar akan menyebabkan kerugian yang lebih besar.
  • Tetapan parameter yang tidak betul boleh menyebabkan penyesuaian kedudukan yang terlalu radikal
  • Pengurusan kedudukan tidak dapat mengelakkan risiko sistematik sepenuhnya

Optimum idea

  • Uji kesan parameter penyesuaian kedudukan yang berbeza
  • Cuba kombinasi indikator lain untuk menilai pergerakan kurva wang
  • Optimumkan Syarat Kemasukan dan Tingkatkan Kadar Kemenangan

ringkaskan

Strategi ini mempunyai idea yang jelas, menggunakan peralihan kedudukan yang dinamik pada kurva modal, boleh mengawal risiko dengan berkesan, dan patut diuji dan dioptimumkan lebih lanjut. Tetapan parameter dan strategi hentikan kerosakan juga perlu dipertimbangkan sepenuhnya, untuk mengelakkan risiko yang dibawa oleh operasi yang radikal.

Kod sumber strategi
/*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))