Chiến lược Chữ thập vàng Chữ thập chết

Tác giả:ChaoZhang, Ngày: 2023-10-11 16:33:18
Tags:

Tổng quan

Chiến lược này sử dụng các nguyên tắc chéo vàng và chéo chết của các đường trung bình di chuyển đơn giản để thực hiện các vị trí dài và ngắn cho cổ phiếu.

Chiến lược logic

Chiến lược đầu tiên xác định khung thời gian backtesting, sau đó thiết lập các tham số tính toán cho hai đường trung bình động, bao gồm loại MA và thời gian dài.

Chức năng getMAType () tính toán các giá trị của hai MA. fastMA là thời gian ngắn hơn MA, và slowMA là thời gian dài hơn MA.

Lý thuyết cốt lõi:

  • Khi fastMA vượt qua slowMA, một tín hiệu dài được kích hoạt.

  • Khi fastMA vượt qua dưới slowMA, một tín hiệu ngắn được kích hoạt.

Cuối cùng, trong quá trình backtesting, hãy giữ vị trí dài khi thấy tín hiệu dài, và giữ vị trí ngắn khi thấy tín hiệu ngắn.

Phân tích lợi thế

  • Ý tưởng chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện.
  • Sử dụng các nguyên tắc chéo MA được áp dụng rộng rãi, phù hợp với hầu hết các sản phẩm cổ phiếu.
  • Các loại và tham số MA có thể tùy chỉnh, khả năng thích nghi cao.
  • Cấu trúc chiến lược mô-đun, chức năng rõ ràng, dễ tối ưu hóa.

Phân tích rủi ro

  • MA crossover có một chút chậm trễ, có thể bỏ lỡ một số cơ hội giao dịch.
  • Không thể lọc hiệu quả thị trường, dễ bị mắc kẹt.
  • Tối ưu hóa tham số không đủ toàn diện, đòi hỏi kinh nghiệm thủ công.
  • Không thể kiểm soát hiệu quả rủi ro và lỗ cho mỗi giao dịch.

Tối ưu hóa có thể đối với rủi ro:

  1. Thêm các chỉ số kỹ thuật khác để xác định xu hướng.

  2. Đưa stop loss vào kiểm soát cho mỗi khoản lỗ giao dịch.

  3. Thêm các chỉ số khối lượng để tránh các thị trường thắt lưng.

  4. Xây dựng các cơ chế tối ưu hóa tham số để tìm các tập hợp tham số tối ưu tự động.

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

Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Thêm các chiến lược dừng lỗ như điểm dừng lỗ cố định hoặc dừng lỗ để kiểm soát lỗ.

  2. Thêm các chiến lược định hình vị trí như định hình vị trí cố định hoặc động để kiểm soát rủi ro giao dịch.

  3. Thêm các bộ lọc bằng cách kết hợp với các chỉ số kỹ thuật khác để xác định xu hướng và cải thiện tỷ lệ thắng.

  4. Tối ưu hóa các tham số bằng các phương pháp như tìm kiếm lưới và hồi quy tuyến tính để tìm ra các giá trị tối ưu.

  5. Mở rộng các chiến lược nhập cảnh như Breakout pullback, quy mô trong các lệnh để làm phong phú chiến thuật giao dịch.

  6. Thêm các chỉ số khối lượng để tránh các thị trường thắt lưng.

  7. Mở rộng các sản phẩm đến chỉ số chứng khoán, ngoại hối, tiền điện tử v.v.

Tóm lại

Chiến lược này thực hiện lựa chọn cổ phiếu dài / ngắn dựa trên các nguyên tắc chéo MA. Ý tưởng chiến lược đơn giản và rõ ràng, được sử dụng rộng rãi, thích nghi cao và thực tế có giá trị. Nhưng nó cũng có một số vấn đề về lọc chậm và whipsaw. Tối ưu hóa trong tương lai có thể tập trung vào cải thiện stop loss, tối ưu hóa tham số, thêm bộ lọc vv để làm cho nó có lợi hơn.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

Thêm nữa