Chiến lược kim tự tháp đơn giản theo thời gian

Tác giả:ChaoZhang, Ngày: 2023-12-27 17:39:40
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giao dịch lượng đơn giản sử dụng kim tự tháp theo thời gian. Ý tưởng chính là mở các vị trí dài mỗi ngày vào thời điểm cố định, và đặt mức lợi nhuận và dừng lỗ khác nhau cho mỗi vị trí để nhận ra lợi nhuận và dừng lỗ.

Nguyên tắc

Chiến lược dựa trên ba logic chính:

  1. Đường kim tự tháp theo thời gian

    Sử dụngsessionTimeĐơn vị giao dịch lớn là số tiền được phân bổ trung bình của vốn tối đa.

  2. Các khoản được tính theo mục 3 của mục 3 của mục 3 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục 4 của mục

    Đặt tương ứng với mức lợi nhuậntakeProfitvà mức dừng lỗstopLosscho mỗi vị trí mở, để mỗi vị trí có lợi nhuận của riêng mình và dừng mất logic để thực hiện thực thi hàng loạt.

  3. Đóng tất cả các vị trí khi cửa sổ thời gian kết thúc

    Chọn để đóng tất cả các vị trí mở trong cửa sổ thời gian ở cuối cửa sổ.

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Phân phối rủi ro: phân bổ vốn một cách đồng đều cho các vị trí khác nhau để kiểm soát hiệu quả tổn thất vị trí duy nhất.

  2. Các vị trí khác nhau có logic độc lập để tránh mất mát dừng hàng loạt.

  3. Cấu hình linh hoạt. Các tham số có thể tùy chỉnh như thời gian xây dựng kim tự tháp tối đa, cửa sổ thời gian hàng ngày, tỷ lệ lợi nhuận / dừng lỗ vv.

  4. Một logic đơn giản và rõ ràng.

Rủi ro

Ngoài ra còn có một số rủi ro:

  1. Rủi ro của toàn bộ vốn bị mắc kẹt nếu tất cả các vị trí kích hoạt dừng lỗ trước khi lấy lợi nhuận.

  2. Không giới hạn tổng vốn vị trí mở mỗi ngày. Quá nhiều vị trí có thể vượt quá khả năng chịu vốn nếu gặp tình huống thị trường bất thường. Xem xét thêm tổng vốn vị trí tối đa mỗi ngày.

  3. Thiết lập cửa sổ thời gian không đúng có thể bỏ lỡ cơ hội giao dịch.

Tăng cường

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Thêm các điều kiện vị trí mở dựa trên các chỉ số kỹ thuật để tránh kim tự tháp liều lĩnh.

  2. Thêm tổng giới hạn vốn vị trí mở hàng ngày để tránh vượt quá khả năng chịu vốn.

  3. Thiết lập tỷ lệ lợi nhuận / dừng lỗ khác nhau cho các vị trí khác nhau để nhận ra lợi nhuận khác nhau và dừng lỗ.

  4. Thêm logic để liên kết số tiền vị trí với số dư vốn.

Kết luận

Tóm lại, đây là một mẫu chiến lược giao dịch lượng rất đơn giản sử dụng phương pháp kim tự tháp theo thời gian. Logic đơn giản và rõ ràng trong khi cũng có một số rủi ro và phòng cải tiến. Các nhà phát triển có thể tối ưu hóa nó đúng cách để làm cho nó trở thành một chiến lược lượng tương đối ổn định và đáng tin cậy.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © A3Sh

//@version=5
strategy("Simple_Pyramiding", overlay=true, pyramiding=99, initial_capital=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.075, close_entries_rule='FIFO')

// Study of a Simple DCA strategy that opens a position every day at a specified time.
// A position is opened at the start time of the Timeframe.
// Positions exit individually when the take profit level is triggered.
// Option to activate Stop Loss and/or Position exit at the end of the Timeframe


// Backtest Window
start_time   = input(defval=timestamp("01 April 2021 20:00"), group = "Backtest Window", title="Start Time")
end_time     = input(defval=timestamp("01 Aug 2022 20:00"),  group = "Backtest Window", title="End Time")
window() => true


// Inputs
posCount     = input.int    (6,           group = "Risk",         title = "Max Amount of DCA Entries")
takeProfit   = input.float  (2.5,         group = "Risk",         title = "Take Profit %")
slSwitch     = input.bool   (true,        group = "Risk",         title = "Activate Stop Loss")
stopLoss     = input.float  (9,           group = "Risk",         title = "Stop Loss %")
sessionTime =  input("1800-1700", group = "DCA Settings", title = "DCA Order Timeframe", tooltip="Open order at the start/If ativated, close order at the end")
exitDCA     =  input.bool   (false,       group = "DCA Settings", title = "Exit DCA Entry at end of Timeframe")


// Order size based on max amount of pyramid orders
q = (strategy.equity  / posCount) / open


// Timeframe for opening and closing a DCA order
// example taken from https://stackoverflow.com/questions/69230164/pinescript-basic-question-open-a-trade-at-a-set-time-each-day
t       = time("D", sessionTime)
isStart = na(t[1]) and not na(t) or t[1] < t
isEnd   = na(t) and not na(t[1]) or t[1] < t
bgcolor(t ? color.new(color.blue,95) : na, title = " TimeFrame Color")


// Create DCA Entries
entry_price = 0.0
if isStart and window() 
    for i = 0 to strategy.opentrades
        if strategy.opentrades == i
            entry_price := close
            entry_id = "PE_" + str.tostring(i + 1) 
            strategy.entry(id = entry_id, direction=strategy.long, limit=entry_price, qty=q)
        if strategy.opentrades == posCount
            break
            
 
//Exit DCA Entries when take profit or stop loss is triggered
if strategy.opentrades > 0 and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, profit = close * takeProfit / 100 / syminfo.mintick, loss = slSwitch ? close * stopLoss /100 / syminfo.mintick :na)
        

//Exit DCA Entries at end of DCA Timeframe
if strategy.opentrades > 0 and exitDCA and isEnd and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, stop = close)




Thêm nữa