Chiến lược này là chiến lược giao dịch dựa trên chỉ số chênh lệch giá tổng hợp trung bình di chuyển (MACD) và chỉ số cường độ tương đối (RSI) để đánh giá điểm mua và bán tiền điện tử. Nó cung cấp tín hiệu cho các quyết định giao dịch bằng cách tính toán chênh lệch giữa trung bình di chuyển ngắn hạn và dài hạn, kết hợp với RSI để đánh giá xu hướng thị trường và quá mua quá bán.
Tính EMA 12 ngày và EMA 26 ngày, tương ứng với đường trung bình di chuyển ngắn hạn và dài hạn
Tính chênh lệch giữa EMA ngắn hạn và dài hạn, dưới dạng biểu đồ MACD
Tính MACD 9 ngày EMA như là một đường tín hiệu
Tính toán RSI 14 ngày để đánh giá giá quá mua quá bán
Khi MACD đi qua đường tín hiệu và RSI lớn hơn 81, nó sẽ hiển thị tín hiệu mua
Bán khi MACD đi qua đường và RSI nhỏ hơn 27
Sử dụng mô-đun chính sách tích hợp vào và ra sân
Chỉ số MACD có thể xác định xu hướng và thay đổi xu hướng, chỉ số RSI có thể hiển thị hiện tượng quá mua quá bán, cả hai kết hợp có thể cải thiện độ chính xác của tín hiệu giao dịch
Sự thay đổi trên và xuống của MACD 0 đại diện cho sự thay đổi hướng và cường độ của xu hướng ngắn hạn và dài hạn, cung cấp cơ sở để đánh giá hướng thị trường
Các vùng RSI cao đại diện cho khả năng quá nóng và quá mua, RSI thấp đại diện cho khả năng quá bán, cung cấp cơ sở để tìm kiếm điểm mua và bán
Các tín hiệu giao dịch đơn giản, rõ ràng và dễ dàng thực hiện giao dịch theo quy tắc
Các tham số có thể cấu hình được tối ưu hóa để thích ứng với các môi trường thị trường khác nhau
Dữ liệu dựa trên MACD và RSI dễ bị ảnh hưởng bởi dữ liệu đột phá và bất thường, có thể phát ra tín hiệu sai
Cài đặt tham số cố định có thể không thích nghi với sự thay đổi của thị trường và cần được tối ưu hóa
Các tín hiệu mua và bán có thể bị trì hoãn, không thể mua và bán tại các điểm chuyển đổi.
Các vị trí chỉ có nhiều chỗ trống, không thể lợi dụng tình hình khủng hoảng
Kiểm tra các tổ hợp tham số khác nhau để tìm ra tham số tối ưu
Thêm các điều kiện lọc bổ sung để tránh đột phá giả
Tăng chiến lược ngăn chặn thiệt hại, giảm tổn thất của các hoạt động đơn phương
Tăng quản lý vị trí, tăng vị trí trong xu hướng, giảm vị trí trong biến động
Kết hợp với các chỉ số khác, tìm kiếm điểm mua và bán chính xác hơn
Kiểm tra hiệu quả trong các giống và thời gian khác nhau
Chiến lược này sử dụng lợi thế bổ sung của hai chỉ số MACD và RSI để xác định hướng xu hướng và điểm mua và bán. Sự ổn định của chiến lược và yếu tố lợi nhuận có thể được cải thiện bằng cách tối ưu hóa các tham số và thêm các điều kiện lọc. Điều chỉnh đúng mức độ dừng lỗ và quản lý vị trí cũng có thể giúp nâng cao mức lợi nhuận và giảm rủi ro.
/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-12 04:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// Revision: 5
// Author: @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)
// Pyramide 10 order size 100, every tick
strategy("Daily_Crypto_Moriceau_indicator",overlay=true)
// === GENERAL INPUTS ===
fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
// === Plot Setting ===
//plot(fastMA,color=red)
//plot(slowMA,color=blue)
//barcolor(color=iff(fastMA > slowMA, yellow, na))
//barcolor(color=iff(fastMA < slowMA, black, na))
barcolor(color=iff(macd > 0.12*close , fuchsia, na))
barcolor(color=iff(macd < -0.1*close , lime, na))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1 and rsi<27 and fastMA< slowMA
plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)
// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay = input(defval = 01, title = "From Day", minval = 1)
FromYear = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth = input(defval = 2, title = "To Month", minval = 1)
ToDay = input(defval = 10, title = "To Day", minval = 1)
ToYear = input(defval = 2019, title = "To Year", minval = 2018)
// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)