
Chiến lược theo dõi đảo ngược hai đường trung bình là một chiến lược giao dịch định lượng sử dụng đường trung bình di chuyển như một tín hiệu giao dịch. Chiến lược này kết hợp các mức chênh lệch đường trung bình chậm và nhanh của MACD và đường tín hiệu của nó, cùng với phán đoán tỷ lệ đa không của khối lượng giao dịch, tạo thành tín hiệu giao dịch để nắm bắt cơ hội đảo ngược thị trường.
Chiến lược này chủ yếu đánh giá mối quan hệ giữa đường nhanh và đường chậm, tạo ra nhiều tín hiệu khi đường nhanh đi qua đường chậm và tạo ra tín hiệu trống khi đường chậm đi qua đường nhanh. Ngoài ra, nó cũng kết hợp với trạng thái trống của MACD, mối quan hệ giữa giá trị chênh lệch và đường tín hiệu, tình trạng trống của khối lượng giao dịch.
Cụ thể, chiến lược sẽ đánh giá kích thước và hướng của chênh lệch MACD, sự giao nhau của chênh lệch và đường tín hiệu, sự đồng nhất hoặc ngược lại của chênh lệch và đường tín hiệu. Những tình huống này phản ánh đặc điểm hồi phục giảm sút của thị trường. Ngoài ra, phân phối đa không của khối lượng giao dịch cũng sẽ được sử dụng như một chỉ số phán đoán phụ trợ.
Chiến lược giao dịch sẽ được tạo ra khi phân biệt giá trị và đường tín hiệu cho thấy tín hiệu thị trường đảo ngược, và khối lượng giao dịch tương ứng xác nhận thị trường đảo ngược.
Bi-equal-cross gây ra vấn đề whipsaw
Số lượng giao dịch không thể lọc hoàn toàn thông tin đột phá
Không thể xác định độ sâu và độ mạnh của điều chỉnh subsection
Sử dụng mô hình học máy thay vì phán đoán theo quy tắc
Tăng kỹ năng chống phá hủy
Kết hợp các chỉ số cảm xúc, phân tích tin tức
Cấy ghép sang các giống khác, thị trường
Chiến lược theo dõi đảo ngược hai đường trung bình tổng hợp các chỉ số đường trung bình, chỉ số MACD và chỉ số khối lượng giao dịch, bằng cách nắm bắt tín hiệu đảo ngược của chúng, chọn điểm đảo ngược thích hợp để thiết lập vị thế. Có rất nhiều không gian để tối ưu hóa chiến lược, có thể tăng cường sự ổn định và lợi nhuận của chiến lược thông qua các phương tiện học máy và kiểm soát gió.
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)
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)
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(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, 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)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)
// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)