Chiến lược quản lý vị thế dựa trên đường cong vốn


Ngày tạo: 2024-01-16 15:06:39 sửa đổi lần cuối: 2024-01-16 15:06:39
sao chép: 1 Số nhấp chuột: 738
1
tập trung vào
1617
Người theo dõi

Chiến lược quản lý vị thế dựa trên đường cong vốn

Tổng quan về chiến lược

Ý tưởng cốt lõi của chiến lược này là động điều chỉnh kích thước vị trí tùy theo sự di chuyển của đường cong vốn, tăng vị trí khi lợi nhuận và giảm vị trí khi thua lỗ để kiểm soát rủi ro tổng thể. Chiến lược này kết hợp chỉ số động lực Chande, chỉ số SuperTrend và chỉ số động lực để xác định tín hiệu giao dịch.

Nguyên tắc chiến lược

Chiến lược này sử dụng hai cách để xác định liệu đường cong vốn có đang đi xuống hay không: 1) tính toán đường cong vốn theo đường trung bình di chuyển đơn giản nhanh và chậm, nếu đường SMA nhanh thấp hơn đường SMA chậm, thì được đánh giá là đi xuống; 2) tính toán đường cong vốn theo đường trung bình di chuyển đơn giản với chu kỳ dài hơn của chính nó, nếu đường cong vốn thấp hơn đường trung bình di chuyển, thì được đánh giá là đi xuống.

Khi đánh giá đường cong vốn đi xuống, vị trí sẽ giảm hoặc tăng một tỷ lệ nhất định tùy theo thiết lập. Ví dụ: nếu thiết lập giảm 50%, vị trí 10% ban đầu sẽ giảm xuống còn 5%. Chiến lược này làm cho quy mô vị trí lớn hơn khi lợi nhuận và giảm quy mô vị trí khi thua lỗ để kiểm soát rủi ro tổng thể.

Lợi thế chiến lược

  • Sử dụng đường cong vốn để đánh giá lợi nhuận tổng thể của hệ thống, điều chỉnh vị trí động giúp kiểm soát rủi ro
  • Kết hợp nhiều chỉ số để đánh giá khả năng tham gia và tăng tỷ lệ lợi nhuận
  • Các tham số có thể tùy chỉnh vị trí để phù hợp với sở thích rủi ro khác nhau

Rủi ro chiến lược

  • Các vị trí lớn hơn sẽ làm tăng lỗ hổng.
  • Thiết lập tham số không đúng có thể dẫn đến việc điều chỉnh vị trí quá mạnh
  • Quản lý vị trí không hoàn toàn tránh được rủi ro hệ thống

Tối ưu hóa tư duy

  • Kiểm tra hiệu quả của các tham số điều chỉnh vị trí khác nhau
  • Cố gắng kết hợp các chỉ số khác để xác định đường cong vốn
  • Tối ưu hóa điều kiện nhập học và tăng tỷ lệ thắng

Tóm tắt

Chiến lược này có ý tưởng tổng thể rõ ràng, có thể điều chỉnh vị trí bằng cách sử dụng động lực của đường cong vốn, có thể kiểm soát rủi ro một cách hiệu quả, đáng để thử nghiệm và tối ưu hóa hơn nữa. Cài đặt tham số và chiến lược dừng lỗ cũng cần được xem xét đầy đủ để tránh rủi ro do hoạt động cực đoan.

Mã nguồn chiến lược
/*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))