Chiến lược giao dịch giới hạn đường trung bình động đa dạng


Ngày tạo: 2023-09-22 14:16:20 sửa đổi lần cuối: 2023-09-22 14:16:20
sao chép: 0 Số nhấp chuột: 641
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này là một chiến lược giao dịch dựa trên nhiều lệnh giới hạn thiết lập đường trung bình. Nó sẽ thiết lập số lượng khác nhau của lệnh thầu hoặc tháo lỗ tùy theo mức trung bình khác nhau của giá phá vỡ, tạo thành một vị trí giữ nhiều đơn theo hình kim tự tháp.

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

Chiến lược này sử dụng chỉ số đường trung bình để xác định hướng của xu hướng. Cụ thể, số lượng lệnh giới hạn được thiết lập dựa trên việc giá có phá vỡ đường trung bình 3 đường lên hay không; số lượng lệnh giới hạn được thiết lập dựa trên việc giá có phá vỡ đường trung bình 3 đường xuống hay không.

Như vậy, xu hướng giá càng mạnh, sẽ thiết lập nhiều lệnh giới hạn đồng chiều hơn; khi giá xuất hiện tín hiệu đảo ngược, sẽ được mở vị trí ngược. Đường trung bình trục được sử dụng để đánh giá sự đột phá của vị trí nắm giữ, phát ra tín hiệu vị trí bằng phẳng.

Toàn bộ chiến lược tạo thành một hình thức giao dịch kết hợp với vị trí mở kim tự tháp với vị trí mở cửa đột phá. Mục đích của việc mở nhiều vị trí giá trung bình, giảm chi phí; Đường dừng trung bình trục, kiểm soát rủi ro.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng xu hướng đánh giá trung bình, hoạt động đơn giản và trực quan.

  2. Các nhà đầu tư có thể mở một sàn giao dịch theo kiểu kim tự tháp để có được chi phí tốt hơn khi xu hướng bắt đầu.

  3. Đường trung trục đồng nhất, có thể dừng lỗ kịp thời, kiểm soát rủi ro.

  4. Bắt đầu giao dịch với giá giới hạn để tránh trượt.

  5. Các tham số có thể tùy chỉnh để phù hợp với các giống khác nhau.

  6. Cấu trúc rõ ràng, dễ hiểu và mở rộng.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Chỉ số đường trung bình bị chậm trễ, có thể gây ra sai sót.

  2. Thẻ giới hạn thất bại có thể dẫn đến việc bỏ lỡ thời gian vào cửa.

  3. Mức dừng trung bình trục có thể quá thô và không thể phá vỡ Phán quyết.

  4. Thiết lập tham số không đúng có thể dẫn đến vị trí kim tự tháp quá lớn.

  5. Phạm vi thời gian phản hồi không đầy đủ có thể dẫn đến đường cong quá phù hợp.

  6. Không tính đến chi phí.

Các giải pháp đối phó với rủi ro như sau:

  1. Kết hợp với các chỉ số khác để xác nhận và tối ưu hóa các tham số.

  2. Thiết lập thời hạn và điều chỉnh giá.

  3. Cài đặt trạm dừng ở đường trục trung bình, hoặc thêm logic phán đoán đột phá.

  4. Các tham số tối ưu hóa, đánh giá tỷ lệ lợi nhuận.

  5. Mở rộng phạm vi thời gian phản hồi, phản hồi đa thị trường

  6. Thêm phí và logic điểm trượt.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa bằng cách:

  1. Các tham số được tối ưu hóa để phù hợp với nhiều giống hơn. Có thể sử dụng phương pháp học máy.

  2. Thêm các chỉ số khác để lọc xác nhận. Ví dụ MACD, KDJ, v.v.

  3. Thêm logic dừng ở đường trung tâm.

  4. Động thái điều chỉnh tỷ lệ mở và vị trí dừng lỗ.

  5. Tối ưu hóa thiết lập đơn giá giới hạn, cải thiện chi phí. Ví dụ: thiết lập giá theo phạm vi biến động.

  6. Tăng khả năng quản lý chi phí và ngăn chặn việc truy xuất quá mức.

  7. Kiểm tra hiệu quả của các tham số khác nhau, xây dựng các bể tham số.

Tóm tắt

Chiến lược này mở vị trí bằng cách thiết lập giá giới hạn bằng đường thẳng để tạo ra một kim tự tháp để có được chi phí tối ưu. Sử dụng điểm dừng đường thẳng trung tâm để kiểm soát rủi ro. Cấu trúc của chiến lược đơn giản, rõ ràng, dễ hiểu và mở rộng.

Mã nguồn chiến lược
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox MultiMA", shorttitle = "Robot WhiteBox MultiMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()