Chiến lược đảo ngược hồ sơ scillator dựa trên Multi Timeframe MACD Zero-crossing

Tác giả:ChaoZhang, Ngày: 2024-02-18 15:27:21
Tags:

img

Tổng quan

Chiến lược đảo ngược hồ sơ dao động 3 10.0 xác định sự đảo ngược giá tiềm năng bằng cách tính toán các chỉ số MACD trên các khung thời gian khác nhau.

Chiến lược logic

Chiến lược này tính toán SMA trung bình động của 3 và 10 giai đoạn để xây dựng các đường nhanh và chậm và chỉ số MACD và đường tín hiệu. Khi đường nhanh và đường tín hiệu vượt qua đường không lên hoặc xuống, nó cho thấy giá đã đạt đến một điểm quan trọng và có thể xảy ra đảo ngược. Ngoài ra, nó cũng kết hợp phán đoán áp suất khối lượng, chỉ số RSI vv để xác định độ tin cậy của tín hiệu đảo ngược. Nó đi dài hoặc ngắn khi tín hiệu đảo ngược đáp ứng các yêu cầu độ tin cậy nhất định.

Cụ thể, chiến lược đánh giá sự đảo ngược giá thông qua:

  1. MACD không vượt qua chỉ ra giá đạt đến điểm quan trọng
  2. Áp lực khối lượng đánh giá tâm lý tăng hoặc giảm
  3. Chỉ số RSI với sự thay đổi độ dốc MACD xác định sức mạnh của tín hiệu đảo ngược
  4. Đường nhanh và đường tín hiệu băng qua theo hướng ngược hình thành tín hiệu đảo ngược

Khi độ tin cậy tín hiệu đảo ngược cao, chiến lược áp dụng lệnh dừng lỗ theo xu hướng để theo đuổi lợi nhuận cao hơn.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Nhiều chỉ số làm cho tín hiệu đảo ngược đáng tin cậy hơn
  2. MACD không vượt qua xác định chính xác các điểm đảo ngược
  3. RSI và khối lượng hỗ trợ phán đoán để cải thiện độ tin cậy
  4. Tiếp theo xu hướng dừng lỗ cải thiện hiệu quả vốn

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Khả năng cao của tín hiệu MACD sai và bị mắc kẹt
  2. Khả năng dừng lỗ cao trong các xu hướng thay thế
  3. Thiết lập tham số không chính xác có thể làm tăng tần suất giao dịch và chi phí

Các rủi ro có thể được giảm bằng cách:

  1. Cho phép dừng lỗ rộng hơn để tránh bị mắc kẹt
  2. Tối ưu hóa các tham số để giảm tần suất giao dịch
  3. Chỉ xem xét nhập cảnh gần mức hỗ trợ / kháng cự chính

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

Chiến lược có thể được tối ưu hóa hơn nữa thông qua:

  1. Thêm thuật toán học máy để hỗ trợ độ tin cậy tín hiệu đảo ngược
  2. Thêm các chỉ số tâm lý để xác định tâm lý bò / gấu
  3. Kết hợp các mức hỗ trợ / kháng cự chính để cải thiện độ chính xác nhập
  4. Tối ưu hóa việc dừng lỗ cho hiệu quả vốn cao hơn
  5. Kiểm tra các kết hợp thông số tối ưu để giảm tần suất giao dịch

Kết luận

Chiến lược đảo ngược không vượt qua MACD nhiều khung thời gian xem xét toàn diện các chỉ số giá, khối lượng và biến động để xác định thời gian nhập cảnh thông qua đánh giá nhiều chỉ số. Nó thiết lập dừng lỗ kịp thời khi có đủ lợi nhuận. Nó có thể đạt được lợi nhuận tốt trong các thị trường đảo ngược. Những cải tiến hơn nữa về học máy và tích hợp cấp độ chính có thể làm giảm rủi ro và tần suất giao dịch trong khi cải thiện lợi nhuận.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

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

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")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

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 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

Thêm nữa