Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch kim tự tháp siêu xu hướng đa giai đoạn

Tác giả:ChaoZhang, Ngày: 2025-01-06 17:02:35
Tags:ATRSTSL

img

Tổng quan

Đây là một chiến lược giao dịch kim tự tháp dựa trên nhiều chỉ số Supertrend. Nó xác định các cơ hội giao dịch có khả năng cao bằng cách sử dụng ba chỉ số Supertrend với các khoảng thời gian và nhân khác nhau. Chiến lược sử dụng các mục nhập kim tự tháp năng động cho phép tối đa ba vị trí, kết hợp với các điều kiện dừng lỗ năng động và thoát lỏng để tối đa hóa lợi nhuận trong khi kiểm soát rủi ro.

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

Chiến lược này sử dụng ba chỉ báo siêu xu hướng với các thiết lập tham số khác nhau: nhanh, trung bình và chậm. Các tín hiệu vào dựa trên các đường chéo và hướng xu hướng của các chỉ báo này, thực hiện một cách tiếp cận kim tự tháp ba lớp: đầu tiên vào khi chỉ số nhanh chỉ xuống trong khi chỉ số trung bình chỉ lên và điểm chậm xuống; lần thứ hai vào thông qua đột phá khi cả chỉ số nhanh và trung bình đều chỉ xuống; lần thứ ba vào thông qua đột phá khi giá đạt mức cao mới. Các lối ra được quản lý thông qua nhiều cơ chế bao gồm dừng lỗ năng động, dừng giá trung bình và đảo ngược xu hướng tổng thể.

Ưu điểm chiến lược

  1. Cơ chế xác nhận nhiều lần cải thiện độ chính xác giao dịch
  2. Cách tiếp cận kim tự tháp làm tăng đáng kể lợi nhuận trong các thị trường xu hướng
  3. Cơ chế dừng lỗ năng động bảo vệ lợi nhuận trong khi cho phép xu hướng phát triển
  4. Các cơ chế thoát lỏng lẻo thích nghi tốt với các điều kiện thị trường khác nhau
  5. Định dạng vị trí dựa trên tỷ lệ phần trăm thích nghi với quy mô vốn khác nhau

Rủi ro chiến lược

  1. Có thể tạo ra các tín hiệu sai thường xuyên trong các thị trường khác nhau
  2. Bức tranh kim tự tháp có thể dẫn đến việc rút tiền lớn hơn trong khi xu hướng đột ngột đảo ngược
  3. Nhiều chỉ số có thể dẫn đến tín hiệu chậm
  4. Tối ưu hóa tham số phải đối mặt với rủi ro quá mức Nó được khuyến cáo thực hiện quản lý tiền tệ nghiêm ngặt và kiểm tra hậu quả để kiểm soát những rủi ro này.

Hướng dẫn tối ưu hóa

  1. Thêm các bộ lọc môi trường thị trường để điều chỉnh động các tham số dựa trên biến động
  2. Tối ưu hóa khoảng cách nhập và phân bổ kích thước vị trí
  3. Thiết lập các chỉ số kỹ thuật bổ sung để lọc các tín hiệu sai
  4. Phát triển các cơ chế tham số thích nghi để thích nghi với những thay đổi trên thị trường
  5. Cải thiện các cơ chế thoát bằng cách thêm mục tiêu lợi nhuận và dừng dựa trên thời gian

Tóm lại

Chiến lược này nắm bắt các cơ hội xu hướng thông qua nhiều chỉ số Supertrend và mục nhập kim tự tháp, trong khi kiểm soát rủi ro bằng cơ chế dừng lỗ năng động và cơ chế thoát lỏng lẻo.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy('4Vietnamese 3x Supertrend', overlay=true, max_bars_back=1000, initial_capital = 10000000000, slippage = 2, commission_type = strategy.commission.percent, commission_value = 0.013, default_qty_type=strategy.percent_of_equity, default_qty_value = 33.33, pyramiding = 3, margin_long = 0, margin_short = 0)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Inputs

// Supertrend Settings
STATRLENGTH1 = input.int(10, title='Fast Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT1 = input.float(1, title='Fast Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH2 = input.int(11, title='Medium Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT2 = input.float(2, title='Medium Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')
STATRLENGTH3 = input.int(12, title='Slow Supertrend ATR Length', group='SUPERTREND SETTINGS')
STATRMULT3 = input.float(3, title='Slow Supertrend ATR Multiplier', group='SUPERTREND SETTINGS')

isUseHighestOf2RedCandleSetup = input.bool(false, group = "Setup Filters")


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculations 
[superTrend1, dir1] = ta.supertrend(STATRMULT1, STATRLENGTH1)
[superTrend2, dir2] = ta.supertrend(STATRMULT2, STATRLENGTH2)
[superTrend3, dir3] = ta.supertrend(STATRMULT3, STATRLENGTH3)

// directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : false
// directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : false
// directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : false


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Calculate highest from supertrend1 uptrend
var float highestGreen = 0
if dir1 < 0 and highestGreen == 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    highestGreen := high
if highestGreen > 0 and (isUseHighestOf2RedCandleSetup ? close < open : true)
    if high > highestGreen
        highestGreen := high
if dir1 >= 0
    highestGreen := 0


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry SL
var entrySL4Long1 = false
var entrySL4Long2 = false
var entrySL4Long3 = false

isUseEntrySL = input.bool(true, group = "Entry SL Option")
dataToCalculate = input.source(low, group = "Entry SL Option")

if isUseEntrySL and (dir1 > 0 and dir2 < 0 and dir3 < 0)
    if strategy.opentrades >= 1
        if dataToCalculate > strategy.opentrades.entry_price(0)
            entrySL4Long1 := true
        else 
            entrySL4Long1 := false

        if entrySL4Long1 and close > strategy.opentrades.entry_price(0)
            strategy.exit('exit1', from_entry = 'long1', stop = strategy.opentrades.entry_price(0))

    if strategy.opentrades >= 2 
        if dataToCalculate > strategy.opentrades.entry_price(1)
            entrySL4Long2 := true
        else 
            entrySL4Long2 := false
    
        if entrySL4Long2 and close > strategy.opentrades.entry_price(1)
            strategy.exit('exit2', from_entry = 'long2', stop = strategy.opentrades.entry_price(1))   

    if strategy.opentrades >= 3 
        if dataToCalculate > strategy.opentrades.entry_price(2) 
            entrySL4Long3 := true
        else 
            entrySL4Long3 := false
    
        if entrySL4Long3 and close >  strategy.opentrades.entry_price(2)
            strategy.exit('exit3', from_entry = 'long3', stop = strategy.opentrades.entry_price(2))

if strategy.closedtrades > strategy.closedtrades[1]
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit3'
        entrySL4Long3 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit2'
        entrySL4Long2 := false
    if strategy.closedtrades.exit_id(strategy.closedtrades-1) == 'exit1'
        entrySL4Long1 := false

    
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entry
if dir3 < 0
    if dir2 > 0 and dir1 < 0
        strategy.entry('long1', strategy.long)
    else if dir2 < 0
        strategy.entry('long2', strategy.long, stop=superTrend1)
else
    if dir1 < 0 and highestGreen > 0
        strategy.entry('long3', strategy.long, stop=highestGreen)


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exit
isUseAllDowntrendExit = input.bool(true, group = "Exit Type")
if isUseAllDowntrendExit and dir3 > 0 and dir2 > 0 and dir1 > 0 and close < open
    strategy.close_all()

isUseAvgPriceInLoss = input.bool(true, group = "Exit Type")
if isUseAvgPriceInLoss and strategy.position_avg_price > close //and strategy.position_avg_price <= close[1]
    //  and (dir1 > 0 or dir2 > 0 or dir3 > 0)
    //  and strategy.opentrades >= 1  
    //  and strategy.opentrades >= 3  
    strategy.close_all()

isUseAllPositionsInLoss = input.bool(false, group = "Exit Type")
if isUseAllPositionsInLoss
      and (
       false
         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close))

         or (strategy.opentrades == 1 and ((not na(strategy.opentrades.entry_price(0))) and strategy.opentrades.entry_price(0) > close)
             and ((not na(strategy.opentrades.entry_price(1))) and strategy.opentrades.entry_price(1) > close)
             and ((not na(strategy.opentrades.entry_price(2))) and strategy.opentrades.entry_price(2) > close))
         )
    strategy.close_all()


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Plot
plot(superTrend1, title='Fast Supertrend',      color=dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title='Medium Supertrend',    color=dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title='Slow Supertrend',      color=dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)


Có liên quan

Thêm nữa