
Chiến lược này sử dụng đường 9 và đường 14 trong hai chỉ số đường trung bình di chuyển để xây dựng tín hiệu mua và bán. Mua khi đường 9 phá vỡ đường 14 từ phía dưới và hình thành đường vàng, bán khi đường 9 phá vỡ đường 14 từ phía trên và hình thành đường chết. Để lọc tín hiệu giả, chiến lược này cũng đưa vào chỉ số đường 50 để đánh giá xem giá có phá vỡ hay không.
Chiến lược này chủ yếu dựa trên tín hiệu giao dịch của hai chỉ số đường trung bình di động. Trong hai đường trung bình di động, đường 9 đại diện cho xu hướng ngắn hạn và đường 14 đại diện cho xu hướng trung hạn, giao nhau của chúng là một chỉ số kỹ thuật hiệu quả để xác định xu hướng thị trường. Khi đường xu hướng ngắn hạn phá vỡ đường xu hướng trung hạn từ phía dưới và hình thành một đường giao dịch vàng, đường xu hướng ngắn hạn sẽ mạnh hơn và thuộc về tín hiệu mua; Khi đường xu hướng ngắn hạn phá vỡ và hình thành một đường giao dịch chết, đường xu hướng ngắn hạn sẽ yếu hơn và thuộc về tín hiệu bán.
Ngoài ra, chiến lược cũng giới thiệu đường 50 ngày để lọc các tín hiệu sai lệch. Chỉ khi giá cao hơn đường 50 ngày, mua sẽ xảy ra; Chỉ khi giá thấp hơn đường 50 ngày, bán sẽ xảy ra.
Lập luận của mã cốt lõi là:
// 买入条件:9日线上穿14日线 且 当前价格高于50日线
buyCondition = ta.crossover(sma9, sma14) and close > sma50
// 卖出条件:9日线下穿14日线 且 当前价格低于50日线
sellCondition = ta.crossunder(sma9, sma14) and close < sma50
Những lợi thế của chiến lược đường trung bình di chuyển kép là rõ ràng:
Tuy nhiên, chiến lược hai đường trung bình di động cũng có một số rủi ro:
Bạn có thể tối ưu hóa các rủi ro như sau:
Chiến lược hai đường trung bình di chuyển có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược đường trung bình di chuyển đôi là một chiến lược hiệu quả và lợi nhuận. Nó có thể được tiếp tục và tiếp tục; đồng thời có một số rủi ro cần được cải thiện hơn nữa. Hiệu quả của chiến lược có thể được tăng cường hơn nữa thông qua các tham số tối ưu hóa, phương thức dừng lỗ và kết hợp các chiến lược.
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("smaCrossReverse", shorttitle="smaCrossReverse", overlay=true)
// Define the length for the SMAs
sma9Length = input(9, title="SMA 9 Length")
sma14Length = input(14, title="SMA 14 Length")
sma50Length = input(50, title="SMA 50 Length") // Add input for SMA 50
// Calculate SMAs
sma9 = ta.sma(close, sma9Length)
sma14 = ta.sma(close, sma14Length)
sma50 = ta.sma(close, sma50Length) // Calculate SMA 50
// Buy condition: SMA 9 crosses above SMA 14 and current price is above SMA 50
buyCondition = ta.crossover(sma9, sma14) and close > sma50
// Sell condition: SMA 9 crosses below SMA 14 and current price is below SMA 50
sellCondition = ta.crossunder(sma9, sma14) and close < sma50
// Track the time since position was opened
var float timeElapsed = na
if (buyCondition)
timeElapsed := 0
else
timeElapsed := na(timeElapsed[1]) ? timeElapsed[1] : timeElapsed[1] + 1
// Close the buy position after 5 minutes
if (timeElapsed >= 5)
strategy.close("Buy")
// Track the time since position was opened
var float timeElapsedSell = na
if (sellCondition)
timeElapsedSell := 0
else
timeElapsedSell := na(timeElapsedSell[1]) ? timeElapsedSell[1] : timeElapsedSell[1] + 1
// Close the sell position after 5 minutes
if (timeElapsedSell >= 5)
strategy.close("Sell")
// Plot the SMAs on the chart
plot(sma9, title="SMA 9", color=color.blue)
plot(sma14, title="SMA 14", color=color.red)
plot(sma50, title="SMA 50", color=color.green) // Plot SMA 50 on the chart
// Strategy entry and exit conditions using if statements
if (buyCondition)
strategy.entry("Buy", strategy.long)
if (sellCondition)
strategy.entry("Sell", strategy.short)