Ba chiến lược đảo ngược phạm vi dao động trung bình động


Ngày tạo: 2024-02-18 11:18:51 sửa đổi lần cuối: 2024-02-18 11:18:51
sao chép: 0 Số nhấp chuột: 649
1
tập trung vào
1617
Người theo dõi

Ba chiến lược đảo ngược phạm vi dao động trung bình động

Tổng quan

Chiến lược này sử dụng 3 ngày di chuyển nhanh trung bình, 10 ngày di chuyển chậm trung bình và 16 ngày tín hiệu di chuyển trơn trung bình để xây dựng chỉ số MACD, hỗ trợ chỉ số RSI và đặc điểm giao dịch, thiết lập các đặc điểm đường K đa chiều, đánh giá tình hình đã quá chặt chẽ, hình thành xu hướng dao động trong khu vực, để đảo ngược các mục thu lợi nhuận.

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

Mã chủ yếu sử dụng 3 ngày trung bình di chuyển nhanh trừ 10 ngày trung bình di chuyển chậm để tạo ra chỉ số MACD, 16 ngày xử lý đường tín hiệu mịn, tạo ra chiến lược MACD tiêu chuẩn. Đồng thời kết hợp phân tích giao dịch tổng hợp mua và bán, đánh giá đặc điểm sức mạnh.

Cụ thể, bằng cách quan sát mối quan hệ của đường MACD với đường tín hiệu, sự thay đổi của độ lệch, đánh giá sự suy giảm của lực lượng đa luân, tìm kiếm cơ hội đảo ngược. Đồng thời, sự thay đổi khối lượng mua bán cũng phản ánh sự suy giảm của lực lượng đa luân.

Chính sách này có 3 tín hiệu nhập cảnh:

  1. Khi khối lượng giao dịch không có lợi thế về khối lượng mua, RSI thấp hơn 41 và tăng lên, và tín hiệu MACD không có sai lệch rõ ràng, hãy làm nhiều hơn;

  2. Khi khối lượng giao dịch có lợi thế về khối lượng mua, RSI ở khoảng 45-55 và tăng lên, MACD và đường tín hiệu cùng tăng lên, làm nhiều hơn;

  3. Khi MACD cao hơn ngưỡng thiết lập và tăng lên, hãy làm trống.

Ba tình huống này phản ánh sự biến động của khu vực trong thời gian ngắn và sự mở rộng quá mức theo một hướng, do đó, được coi là thời điểm tốt để đảo ngược và thực hiện hành động ngược.

Exit được thiết lập như là phương thức dừng lỗ và dừng, rút lại kiểm soát và thu lợi nhuận.

Phân tích lợi thế

Chiến lược này kết hợp nhiều chỉ số để đánh giá khoảng cách chấn động và quá mua quá bán, để đảo ngược ý tưởng lợi nhuận rõ ràng. Sử dụng phân tích khối lượng giao dịch sâu hơn, tăng cơ sở hoạt động. Cài đặt dừng lỗ cũng thận trọng hơn, tránh theo đuổi quá mức để ngăn chặn giảm.

Cụ thể, những lợi thế là:

  1. MACD là một chỉ số kiểm tra giá trị, đánh giá mối quan hệ giữa giá và khối lượng giao dịch, tránh chủ quan phân tích mặt kỹ thuật đơn lẻ;

    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  2. RSI đánh giá giá quá mua quá bán, hỗ trợ tìm kiếm sự đảo ngược;

  3. Cài đặt Stop Loss Stop để ngăn chặn tổn thất quá mức và khóa một phần lợi nhuận.

Phân tích rủi ro

Mặc dù sử dụng nhiều chỉ số tổng hợp trong chiến lược này có thể làm tăng tỷ lệ chiến thắng, nhưng bất kỳ chiến lược nào cũng có một số rủi ro nhất định, vấn đề chính là:

  1. Tỷ lệ các chỉ số phát ra tín hiệu sai, chẳng hạn như tiếp tục xu hướng ban đầu sau khi đảo ngược;

  2. Lưu ý rằng các lệnh dừng lỗ có thể được thiết lập không đúng cách, có thể có quá nhiều rút tiền và lợi nhuận không được khóa tốt.

  3. Các thiết lập tham số có thể cần được tối ưu hóa để kiểm tra thêm, chẳng hạn như kết hợp tham số đường trung bình, chu kỳ RSI, nhân số dừng lỗ.

Những rủi ro này có thể được giảm bằng cách tối ưu hóa hơn nữa. Các phương pháp cụ thể sẽ được mô tả trong phần tiếp theo.

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

Chiến lược này có thể được tối ưu hóa hơn nữa, chủ yếu tập trung vào các khía cạnh sau:

  1. Kiểm tra các thiết lập tham số trung bình khác nhau để tìm kiếm sự kết hợp tốt nhất;

  2. Kiểm tra các thiết lập tham số RSI để xác định một chu kỳ thích hợp hơn để đánh giá quá mua quá bán;

  3. Tối ưu hóa stop loss và stop loss, tìm sự cân bằng giữa rút tối đa và khóa lợi nhuận;

  4. Giới thiệu mô hình học máy, sử dụng dữ liệu lớn hơn để đào tạo, giảm tỷ lệ sai lầm và tăng tỷ lệ thắng.

Các phương pháp tối ưu hóa này có thể được thực hiện thông qua phản hồi có hệ thống hơn. Với sự mở rộng của thử nghiệm không gian tham số và số lượng mẫu tăng lên, tỷ lệ chiến lược và chỉ số lợi nhuận cũng sẽ tăng lên.

Tóm tắt

Chiến lược này sử dụng tổng hợp MACD, RSI và khối lượng giao dịch ba loại chỉ số, để đánh giá các đặc điểm xung đột giữa các khu vực thị trường, thiết lập các mục tiêu tại các điểm đảo ngược để chiết khấu sự gia tăng phản hồi. Ý tưởng chiến lược rõ ràng, cân bằng xu hướng và đảo ngược, có không gian lợi nhuận tốt sau khi tối ưu hóa.

Mã nguồn chiến lược
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)