Chiến lược giao dịch tiền điện tử dựa trên MACD


Ngày tạo: 2023-09-19 11:21:42 sửa đổi lần cuối: 2023-09-19 11:21:42
sao chép: 0 Số nhấp chuột: 759
1
tập trung vào
1617
Người theo dõi

Tổng quan

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.

Nguyên tắc chiến lược

  1. 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

  2. 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

  3. Tính MACD 9 ngày EMA như là một đường tín hiệu

  4. Tính toán RSI 14 ngày để đánh giá giá quá mua quá bán

  5. 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

  6. Bán khi MACD đi qua đường và RSI nhỏ hơn 27

  7. Sử dụng mô-đun chính sách tích hợp vào và ra sân

Phân tích lợi thế

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

Phân tích rủi ro

  1. 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

  2. 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

  3. 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.

  4. 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

Hướng tối ưu hóa

  1. Kiểm tra các tổ hợp tham số khác nhau để tìm ra tham số tối ưu

  2. Thêm các điều kiện lọc bổ sung để tránh đột phá giả

  3. 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

  4. Tăng quản lý vị trí, tăng vị trí trong xu hướng, giảm vị trí trong biến động

  5. 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

  6. Kiểm tra hiệu quả trong các giống và thời gian khác nhau

Tóm tắt

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.

Mã nguồn chiến lược
/*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)