
Mô hình ba yếu tố hỗ trợ phán đoán biến động giá là một chiến lược giao dịch ngắn hạn kết hợp nhiều yếu tố phán đoán. Chiến lược này xem xét nhiều yếu tố của tỷ lệ giao dịch, chỉ số RSI, chỉ số MACD và chỉ số đường tín hiệu để phán đoán hành vi biến động giá để phát hiện cơ hội giao dịch ngắn hạn.
Lập luận cốt lõi của chiến lược này là:
Tính toán các chỉ số kỹ thuật như trung bình di chuyển nhanh, trung bình di chuyển chậm, đường cong MACD, đường tín hiệu;
Xác định tỷ lệ giao dịch mua bán, RSI, MACD, và các điều kiện đa yếu tố của đường tín hiệu;
Xác định tổng hợp nhiều yếu tố, xác nhận rằng hiện tại là giai đoạn biến động giá, có cơ hội mua và bán;
Bước vào vị trí LONG hoặc SHORT, đặt lệnh dừng lỗ;
Khi giá đạt đến điều kiện dừng hoặc dừng lỗ, vị trí trơn tru.
Chiến lược này có tính linh hoạt sử dụng nhiều yếu tố như tỷ lệ giao dịch, chỉ số RSI, chỉ số MACD, chỉ số đường tín hiệu để đánh giá hành vi biến động giá để nắm bắt cơ hội giao dịch ngắn. Việc đánh giá kết hợp nhiều yếu tố có thể tránh tín hiệu sai do một yếu tố duy nhất và tăng độ chính xác của tín hiệu.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có những rủi ro sau:
Đối với các rủi ro trên, có thể tối ưu hóa theo các khía cạnh sau:
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Tối ưu hóa trọng lượng đa yếu tố, thực hiện điều chỉnh động. Có thể điều chỉnh trọng lượng cho phán đoán đa yếu tố theo các tình huống khác nhau, tăng khả năng thích ứng;
Kết hợp với thuật toán học máy, để thực hiện tối ưu hóa tự thích ứng của nhiều yếu tố. Sử dụng mạng thần kinh, thuật toán di truyền và các thuật toán để đào tạo mô hình đa yếu tố, để thực hiện tối ưu hóa tự động của tham số;
Tối ưu hóa chiến lược dừng lỗ. Có thể thử nghiệm các kết hợp dừng theo dõi khác nhau, di chuyển dừng lỗ để tìm giải pháp dừng lỗ tốt nhất;
Kết hợp với các chỉ số kỹ thuật cao. Có thể kiểm tra các chỉ số khác như dao động tỷ lệ dao động, động lực dao động và nhiều yếu tố khác nhau.
Chiến lược sử dụng nhiều yếu tố như khối lượng giao dịch, RSI, MACD, đường tín hiệu để xác định thời điểm mua bán tốt nhất. Phân tích đa yếu tố tăng cường độ chính xác tín hiệu, có lợi cho thu được lợi nhuận ổn định. Sau đó, có thể thực hiện tối ưu hóa đa yếu tố tự thích ứng bằng thuật toán học máy, để có được hiệu suất chiến lược xuất sắc hơn.
/*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)