
Chiến lược này là một hệ thống giao dịch kết hợp nhiều chỉ số kỹ thuật, chủ yếu dựa trên xác nhận tín hiệu EMA trung bình, bán tháo RSI và MACD Gold Forks, để quản lý rủi ro thông qua các cơ chế nhập cảnh và thoát nhiều lần. Chiến lược sử dụng chỉ số trung bình di chuyển 9 chu kỳ và 21 chu kỳ (EMA) làm chỉ số xu hướng chính, kết hợp với chỉ số tương đối yếu (RSI) và xu hướng trung bình di chuyển ngược lại chỉ số (MACD) để lọc tín hiệu giao dịch, kiểm soát rủi ro bằng cách đặt khoảng cách giá giới hạn và số điểm dừng cố định.
Các logic giao dịch cốt lõi của chiến lược bao gồm các phần quan trọng sau:
Chiến lược này sử dụng một lần nhập vào giá giới hạn, có thể đặt vị trí ở vị trí giá tốt hơn để tăng độ chính xác của giao dịch thông qua sự kết hợp của nhiều chỉ số kỹ thuật.
Đây là một chiến lược giao dịch đa chỉ số có cấu trúc, logic rõ ràng, xác định xu hướng thông qua hệ thống thống nhất định, các tín hiệu lọc RSI và MACD, lệnh giới hạn và nhiều cơ chế dừng lỗ để kiểm soát rủi ro. Ưu điểm của chiến lược là tín hiệu đáng tin cậy cao, kiểm soát rủi ro hoàn hảo, nhưng cũng có các vấn đề như tín hiệu chậm trễ và tối ưu hóa tham số.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true)
// Inputs for Simple Moving Averages
sma_short = ta.ema(close, 9)
sma_long = ta.ema(close, 21)
// Plotting SMA
plot(sma_short, color=color.green, title="SMA 9")
plot(sma_long, color=color.red, title="SMA 21")
// RSI Calculation
rsi_length = input.int(14, title="RSI Length")
rsi_threshold = input.int(70, title="RSI Threshold")
rsi = ta.rsi(close, rsi_length)
// MACD Calculation
macd_fast = input.int(8, title="MACD Fast Length")
macd_slow = input.int(18, title="MACD Slow Length")
macd_signal = input.int(6, title="MACD Signal Length")
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// Inputs for Limit Order Offset
limit_offset = input.int(50, title="Limit Order Offset", minval=1) // 50 points below 9 EMA
// User input for specific date
simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates")
simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates")
// Declare limit_price as float
var float limit_price = na
// Calculate Limit Order Price
if (sma_short[1] < sma_long[1] and sma_short > sma_long) // 9 EMA crosses above 21 EMA
limit_price := sma_short - limit_offset
// Buy Signal Condition (only on the specified date)
buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line)
// Sell Signal Condition (MACD crossover down)
sell_condition = ta.crossunder(macd_line, signal_line)
// Track Entry Price for Point-Based Exit
var float entry_price = na
if (buy_condition )
strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price)
label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white)
entry_price := limit_price // Set entry price
// Exit Conditions
exit_by_macd = sell_condition
exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12)) // Adjust as per exit points
// Exit all positions at the end of the day
if hour == 15 and minute > 10 and strategy.position_size > 0
strategy.close_all() // Close all positions at the end of the day
strategy.cancel_all()
// Exit based on sell signal or point movement
if (exit_by_macd or exit_by_points and strategy.position_size > 0 )
strategy.close("Buy")
label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)