Mô hình ba yếu tố để phát hiện dao động giá

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

img

Tổng quan

Mô hình ba yếu tố để phát hiện dao động giá là một chiến lược giao dịch ngắn hạn tích hợp nhiều yếu tố để đánh giá. Chiến lược này tính đến các yếu tố như tỷ lệ khối lượng, RSI, MACD và đường tín hiệu để phát hiện dao động giá và khám phá cơ hội giao dịch ngắn hạn.

Chiến lược logic

Logic cốt lõi của chiến lược này là:

  1. Tính toán các chỉ số kỹ thuật như MA nhanh, MA chậm, MACD và đường tín hiệu;

  2. Đánh giá nhiều yếu tố bao gồm tỷ lệ khối lượng, RSI, MACD và đường tín hiệu;

  3. Xác nhận giai đoạn dao động giá hiện tại và các cơ hội mua/bán dựa trên phân tích nhiều yếu tố;

  4. Lấy các vị trí LONG hoặc SHORT và đặt lấy lợi nhuận và dừng lỗ;

  5. Đóng các vị trí khi giá đạt mức lấy lợi nhuận hoặc dừng lỗ.

Chiến lược này sử dụng các yếu tố linh hoạt như tỷ lệ khối lượng, RSI, MACD và đường tín hiệu để phát hiện dao động giá và nắm bắt các cơ hội ngắn hạn. Sự kết hợp của nhiều yếu tố giúp tránh tín hiệu sai từ một yếu tố duy nhất và cải thiện độ chính xác.

Phân tích lợi thế

Những lợi thế của chiến lược này:

  1. Nhiều yếu tố cải thiện độ chính xác và tránh tín hiệu sai;
  2. Thu hút các cơ hội ngắn hạn từ dao động giá với không gian lợi nhuận lớn;
  3. Đặt tự động lấy lợi nhuận và dừng lỗ để kiểm soát rủi ro;
  4. Một logic đơn giản và rõ ràng, dễ thực hiện.

Phân tích rủi ro

Những rủi ro của chiến lược này:

  1. thuật toán phụ thuộc quá nhiều vào dữ liệu lịch sử, nhạy cảm với những thay đổi của thị trường;
  2. Cách tiếp cận kết hợp nhiều yếu tố có thể cần tối ưu hóa thêm, với khả năng đánh giá sai;
  3. Điểm dừng lỗ ảnh hưởng trực tiếp đến sự ổn định của chiến lược.

Để giải quyết các rủi ro trên, các tối ưu hóa có thể được thực hiện trong:

  1. Mở rộng chu kỳ lấy mẫu để giảm tác động từ các thay đổi dữ liệu thị trường;
  2. Điều chỉnh trọng lượng giữa các yếu tố để đạt được tối ưu hóa thích nghi;
  3. Kiểm tra các điểm dừng mất mát khác nhau để tìm vị trí tối ưu.

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

Các hướng tối ưu hóa chính:

  1. Tối ưu hóa cân nặng yếu tố một cách năng động. Các cân nặng có thể được điều chỉnh dựa trên điều kiện thị trường để cải thiện khả năng thích nghi;

  2. giới thiệu các thuật toán học máy để đạt được tối ưu hóa thích nghi của các yếu tố. Các thuật toán như mạng thần kinh và thuật toán di truyền có thể được sử dụng để đào tạo mô hình và tối ưu hóa các thông số;

  3. Tối ưu hóa các chiến lược dừng lỗ. Các kết hợp khác nhau của việc theo dõi dừng lỗ và dừng lỗ di chuyển có thể được thử nghiệm để tìm ra giải pháp tốt nhất;

  4. Bao gồm các chỉ số kỹ thuật tiên tiến. Nhiều chỉ số như biến động biến động và dao động động lực có thể làm phong phú các yếu tố.

Kết luận

Mô hình ba yếu tố để phát hiện dao động giá sử dụng đầy đủ các đặc điểm của dao động giá để thực hiện một chiến lược giao dịch ngắn hạn hiệu quả. Nó đánh giá các điểm vào và ra tốt nhất dựa trên nhiều yếu tố như khối lượng, RSI, MACD và đường tín hiệu. Nhiều yếu tố tăng độ chính xác và dẫn đến lợi nhuận ổn định.


/*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.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.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.0)
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.0)
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.0)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Thêm nữa