Chiến lược này xác định tín hiệu mua và bán bằng cách tính toán sự chéo chéo giữa hai đường trung bình động của chỉ số MACD. Nó vẽ các mũi tên trên biểu đồ để chỉ ra tín hiệu giao dịch.
Chiến lược đầu tiên tính toán đường nhanh (12-period EMA), đường chậm (26-period EMA) và chênh lệch MACD. Sau đó, nó xác định tín hiệu dài và ngắn dựa trên sự chéo chéo của đường nhanh và chậm, cũng như giá trị dương / âm của chênh lệch MACD:
Để lọc các tín hiệu sai, mã cũng kiểm tra tín hiệu của ngọn nến trước đó.
Ngoài ra, hình mũi tên được vẽ trên biểu đồ để chỉ ra tín hiệu mua và bán.
Những lợi thế của chiến lược này bao gồm:
Một số rủi ro của chiến lược này:
Một số cách để cải thiện chiến lược:
Chiến lược mũi tên chéo trung bình di chuyển kép khá đơn giản và thực tế. Bằng cách sử dụng chéo của hai đường trung bình di chuyển và lọc khác biệt MACD, nó xác định các bước vào và ra trong xu hướng trung hạn và dài hạn, tránh mất đảo ngược giá. Các tín hiệu mũi tên cũng cung cấp hướng dẫn hoạt động rõ ràng. Sự cải thiện hơn nữa về sự ổn định và lợi nhuận có thể đạt được thông qua điều chỉnh tham số, bộ lọc bổ sung và tối ưu hóa thích nghi.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //Daniels stolen code strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0) //Define MACD Variables fast = 12, slow = 26 fastMACD = ema(hlc3, fast) slowMACD = ema(hlc3, slow) macd = fastMACD - slowMACD signal = sma(macd, 9) hist = macd - signal currMacd = hist[0] prevMacd = hist[1] currPrice = hl2[0] prevPrice = hl2[1] buy = currPrice > prevPrice and currMacd > prevMacd sell = currPrice < prevPrice and currMacd < prevMacd neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd) //Plot Arrows timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1)) timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1)) plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup) plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown) //plotshape(neutral, color=black, location=location.belowbar, style=shape.circle) //Test Strategy // strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high // strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01)) strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01)) strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01)) // strategy.entry(id = "Short", long = false, when = enterShort()) // strategy.close(id = "Short", when = exitShort()) //strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high // strategy.exit("exit", "long", profit = 10, loss = 5) // ge