Chiến lược giao dịch biến động cụ thể theo khung thời gian đảo ngược xu hướng


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

Chiến lược giao dịch biến động cụ thể theo khung thời gian đảo ngược xu hướng

Tổng quan

Chiến lược này đã thiết kế một chiến lược giao dịch chuyển đổi xu hướng bằng cách tính toán sự khác biệt trong áp lực mua bán khối lượng giao dịch trong các cửa sổ thời gian khác nhau, kết hợp với tín hiệu đa luồng của chỉ số MACD. Chiến lược này chủ yếu sử dụng sự khác biệt trong khối lượng giao dịch làm tín hiệu để xác định xu hướng chuyển đổi và được xác minh bằng tín hiệu đa luồng của MACD, để nắm bắt cơ hội chuyển đổi.

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

Lập luận cốt lõi của chiến lược này dựa trên những điểm sau:

  1. Tính toán áp lực mua và áp lực bán của khối lượng giao dịch trong các cửa sổ thời gian khác nhau (cửa sổ dài và cửa sổ ngắn). Xác định xu hướng tương lai bằng cách phân biệt áp lực mua và bán.

  2. Sử dụng chênh lệch của MACD (khoảng cách giữa đường MACD và đường tín hiệu) để xác định trạng thái trống rỗng. Kết hợp tín hiệu áp lực mua bán của khối lượng giao dịch, xác nhận xu hướng đảo ngược.

  3. Khi khối lượng giao dịch mua áp lực biến động tăng lên, và đường MACD xảy ra đi qua, người ta cho rằng có thể có một xu hướng đảo ngược từ không đến nhiều.

  4. Khi khối lượng giao dịch buôn bán áp lực biến động tăng lên, và đường MACD xảy ra đi qua, cho rằng thị trường có thể xuất hiện bởi nhiều chuyển động không khí xu hướng đảo ngược.

  5. Kiểm soát rủi ro bằng cách sử dụng chiến lược dừng dừng lỗ khi bước vào tín hiệu đảo ngược.

Phân tích lợi thế

Chiến lược này có một số ưu điểm:

  1. Sử dụng sự khác biệt đa không gian của khối lượng giao dịch để xác định điểm đảo ngược xu hướng, tránh đơn thuần phụ thuộc vào các chỉ số đánh giá xu hướng như đường cân bằng và bỏ qua vai trò của khối lượng giao dịch.

  2. Kết hợp với chỉ số MACD của tín hiệu xác nhận đa không gian, có thể cải thiện độ chính xác của phán đoán.

  3. Sử dụng cửa sổ thời gian ngắn để xác định hướng di chuyển của khối lượng giao dịch, làm cho tín hiệu đảo ngược đáng tin cậy hơn.

  4. Tỷ lệ lợi nhuận trung bình của các chiến lược chống biến đổi cao hơn.

Phân tích rủi ro

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

  1. Cả số lượng giao dịch và tín hiệu MACD đều có thể phát ra tín hiệu sai, dẫn đến nguy cơ sai lầm phán đoán ngược.

  2. Sau khi tín hiệu đảo ngược được phát ra, thị trường có thể điều chỉnh lại và không thể đảo ngược ngay lập tức.

  3. Các điểm dừng lỗ được thiết lập không đúng cách có thể dẫn đến nguy cơ tăng lỗ.

  4. Tỷ lệ rút tiền cao, không phù hợp với các nhà đầu tư tìm kiếm thu nhập ổn định.

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

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

  1. Tối ưu hóa khoảng thời gian trong các cửa sổ thời gian dài và ngắn để đưa ra quyết định chính xác hơn.

  2. Tối ưu hóa các tham số MACD để cải thiện độ chính xác của phán đoán đa không.

  3. Tối ưu hóa thuật toán dừng lỗ để giảm rủi ro lỗ.

  4. Thêm nhiều chỉ số phán đoán vô động, tăng tỷ lệ thành công của sự đảo ngược.

  5. Thêm mô-đun kiểm soát vị thế và quản lý tiền.

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch thuật toán đảo ngược xu hướng điển hình. Nó chủ yếu dựa trên sự biến động của khối lượng giao dịch được khuếch đại với tín hiệu MACD để xác minh, đánh giá và nắm bắt cơ hội đảo ngược giá từ nhiều đầu vào đầu trống hoặc từ đầu trống sang nhiều đầu. Chiến lược này có độ chính xác đánh giá cao, lợi nhuận tốt hơn, nhưng cũng có một số rủi ro.

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

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 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)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

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

getLookBackSlope(lookBack) => signal - signal[lookBack]
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
    float s = 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 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 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 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

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

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

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

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

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 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 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long, qty=10)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)