
Chiến lược này là một chiến lược đơn giản để định lượng giao dịch bằng cách gia tăng vị trí theo thời gian. Ý tưởng chính của chiến lược này là thiết lập nhiều vị trí mở mỗi ngày vào một thời gian cố định, sau đó đặt các điều kiện dừng lỗ khác nhau cho mỗi vị trí, để thực hiện dừng hoặc dừng lỗ theo đợt.
Chiến lược này dựa trên ba logic quan trọng:
Sử dụngsessionTimeCác tham số được thiết lập trong một khoảng thời gian giao dịch trong ngày, trong khoảng thời gian này, mỗi ngày mở cửa thị trường sẽ được tăng dần theo thang FIXED, số lượng tăng thêm là phân bổ trung bình của số lượng vị trí lớn nhất trong nhóm vốn.
Đặt điểm dừng tương ứng cho mỗi lệnh mở khotakeProfitvà điểm dừngstopLossLưu ý: Các lệnh có thể được thực hiện theo một hệ thống logic dừng-mất độc lập, để thực hiện các lệnh dừng-mất theo từng đợt.
Khi kết thúc một khoảng thời gian giao dịch trong ngày, bạn có thể chọn để thanh toán cho tất cả các lệnh chưa dừng trong khoảng thời gian đó.
Chiến lược này có những ưu điểm sau:
Phân tán rủi ro, phân bổ số tiền trong bể tài chính cho các đơn đặt hàng khác nhau, kiểm soát hiệu quả tổn thất đơn đặt hàng.
Lưu ý: Lưu ý: Lưu ý: Lưu ý: Lưu ý: Lưu ý:
Tính linh hoạt, tùy chỉnh số lần đặt cược tối đa, khoảng thời gian giao dịch hàng ngày, tỷ lệ dừng lỗ.
Dễ hiểu, logic chiến lược đơn giản và rõ ràng.
Chiến lược này cũng có những rủi ro:
Có rủi ro bị che đậy, nếu tất cả các đơn đặt hàng không đến ngưỡng dừng trước khi kích hoạt ngưỡng dừng tương ứng, sẽ có tổn thất lớn hơn. Có thể tránh được bằng cách cấu hình tỷ lệ dừng hợp lý.
Không thể giới hạn tổng số lần đặt hàng hàng ngày, nếu gặp trường hợp đặc biệt, quá nhiều đơn đặt hàng cùng lúc có thể đặt hàng vượt quá khả năng chịu đựng vốn. Bạn có thể xem xét giới hạn tối đa tổng số lần đặt hàng hàng ngày.
Không cấu hình đúng thời gian có thể bỏ lỡ cơ hội giao dịch, nên cấu hình thời gian giao dịch dựa trên thời gian hoạt động của loại giao dịch mục tiêu.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Thêm logic xác định điều kiện mở vị trí, chỉ mở vị trí khi đáp ứng tín hiệu chỉ số kỹ thuật cụ thể, tránh tăng vị trí mù quáng.
Tăng giới hạn tổng số tiền đặt hàng hàng ngày để ngăn chặn vượt quá khả năng chịu đựng của quỹ.
Thiết lập tỷ lệ Stop Loss khác nhau cho các lệnh khác nhau để thực hiện Stop Loss chênh lệch.
Tăng số lượng đơn đặt hàng theo logic liên kết với số dư của quỹ, để số lượng đơn đặt hàng được gắn với số tiền có sẵn.
Toàn bộ chiến lược này là một mẫu chiến lược rất đơn giản để sử dụng tư tưởng gia tăng cổ phiếu theo bậc thang thời gian để giao dịch định lượng, logic chiến lược rõ ràng, đồng thời cũng có một số rủi ro và không gian tối ưu hóa, nhà phát triển có thể tối ưu hóa phù hợp trên cơ sở này, làm cho nó trở thành một chiến lược định lượng ổn định và đáng tin cậy hơn.
/*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)