Chiến lược định lượng: Theo dõi xu hướng điểm mạnh và điểm yếu của MA


Ngày tạo: 2024-01-19 16:50:13 sửa đổi lần cuối: 2024-01-19 16:50:13
sao chép: 3 Số nhấp chuột: 609
1
tập trung vào
1617
Người theo dõi

Chiến lược định lượng: Theo dõi xu hướng điểm mạnh và điểm yếu của MA

Tổng quan

Chiến lược này tạo ra tín hiệu mua khi chỉ số này vượt quá MA dài hạn của chính nó. Chiến lược có thể cấu hình các MA dài hạn để theo dõi các xu hướng khác nhau.

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

  1. Tính toán nhiều MA như 5, 10 và 20 ngày, để xác định xem giá có phá vỡ mỗi MA lên, phá vỡ mốc, tích hợp tạo ra các đường nét mạnh của MA.
  2. Sử dụng trung bình di chuyển đối với độ mạnh của MA, tạo ra chỉ số đường trung bình, đánh giá đường trung bình trống rỗng, tạo ra tín hiệu giao dịch.
  3. Các tham số theo dõi chu kỳ có thể được cấu hình: số MA ngắn hạn, chu kỳ đường trung bình dài hạn, điều kiện mở vị trí, v.v.

Chiến lược này chủ yếu xác định độ trống của chỉ số đường trung bình, thông qua chỉ số đường trung bình phản ứng với cường độ trung bình của nhóm đường MA. Các nhóm đường MA tập trung vào việc xác định hướng và cường độ của xu hướng, và chỉ số đường trung bình xác định tính bền vững.

Phân tích lợi thế

  1. Mô hình đa chiều để đánh giá cường độ xu hướng. Một đường MA đơn không thể xác định được cường độ đủ; Chiến lược này đo đạc nhiều đột phá MA, đảm bảo tín hiệu phát ra sau khi có đủ cường độ, có độ tin cậy cao.
  2. Chu kỳ theo dõi có thể cấu hình. Điều chỉnh các tham số MA ngắn hạn để nắm bắt xu hướng ở các cấp khác nhau; điều chỉnh các tham số MA dài hạn để kiểm soát nhịp độ ra đi. Người dùng có thể điều chỉnh chu kỳ theo thị trường.
  3. Chỉ cần làm nhiều hơn có thể tránh sai lầm, theo dõi xu hướng tăng dài hạn. Chiến lược chỉ cần làm nhiều hơn, chỉ cần theo dõi không theo dõi giảm, có thể làm giảm tổn thất đảo ngược.

Phân tích rủi ro

  1. Có nguy cơ rút lui. Có nguy cơ rút lui lớn hơn khi đường ngắn đi qua đường trung bình dưới đường trung bình của đường dài. Có thể giảm tổn thất đơn lẻ bằng cách dừng lỗ.
  2. Có rủi ro đảo ngược. Hoạt động lâu dài của thị trường chắc chắn sẽ có sự điều chỉnh, chiến lược phải dừng Exiting kịp thời.
  3. Rủi ro của tham số. Thiết lập tham số không đúng có thể nhận được tín hiệu sai. Các tham số nên được điều chỉnh cho phù hợp với các giống khác nhau để đảm bảo tính ổn định của tham số.

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

  1. Kết hợp với các chỉ số lọc hơn vào sân. Có thể xem xét kết hợp lưu lượng giao thông, phát tín hiệu khi số lượng có thể xác minh, tránh phá vỡ giả.
  2. Phương pháp tăng lỗ dừng. Dừng di chuyển, dừng đường cong có thể giảm lỗ trong điều chỉnh. Phương pháp dừng cũng có thể được xem xét, khóa lợi nhuận, tránh đảo ngược.
  3. Cân nhắc về việc sắp xếp các loại hợp đồng tương lai, ngoại hối. Đường đột phá MA phù hợp hơn với các loại có xu hướng. Có thể đánh giá tính ổn định của các tham số của các loại hợp đồng tương lai khác nhau, chọn loại tốt nhất.

Tóm tắt

Chiến lược này đánh giá xu hướng giá bằng cách tính toán chỉ số cường độ MA và theo dõi xu hướng bằng phương tiện giao thoa ngang bằng nguồn tín hiệu. Ưu điểm của chiến lược là đánh giá chính xác cường độ xu hướng, độ tin cậy cao. Rủi ro chính nằm ở việc đảo ngược xu hướng và điều chỉnh tham số. Bằng cách tối ưu hóa độ chính xác của tín hiệu đầu vào, tăng cách dừng lỗ và chọn loại phù hợp, có thể thu được lợi nhuận tốt hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
basePeriod: 15m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma
    

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)