Chiến lược này áp dụng phương pháp theo dõi xu hướng điển hình của giao thoa trung bình động kép, kết hợp với các cơ chế quản lý rủi ro như dừng lỗ, lấy lợi nhuận và dừng lỗ theo dõi, nhằm mục đích thu lợi nhuận lớn từ các thị trường xu hướng.
Các rủi ro có thể được giảm bằng cách:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tóm lại, đây là một chiến lược theo dõi xu hướng chéo EMA kép điển hình. Nó có lợi thế nắm bắt các chuyển động xu hướng, tích hợp với các cơ chế quản lý rủi ro như dừng lỗ, lấy lợi nhuận và dừng lỗ. Nhưng nó cũng có một số điểm yếu điển hình, như nhạy cảm cao đối với tiếng ồn và thị trường giới hạn phạm vi, dễ bị mắc kẹt. Có thể cải thiện thêm bằng cách giới thiệu các chỉ số bổ sung, tối ưu hóa tham số, điều chỉnh năng động và sử dụng danh mục đầu tư để nâng cao hiệu suất của chiến lược. Nhìn chung, với việc điều chỉnh tham số thích hợp và phù hợp với sản phẩm và điều kiện thị trường, chiến lược này có thể đạt được kết quả tốt.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true) // Revision: 1 // Author: @JayRogers // // *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION *** // === GENERAL INPUTS === // short ma maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 14, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1) // === STRATEGY RELATED INPUTS === tradeInvert = input(defval = false, title = "Invert Trade Direction?") // the risk management inputs inpTakeProfit = input(defval = 1000, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 200, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 200, 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 // === SERIES SETUP === /// a couple of ma's.. maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) // === PLOTTING === fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50) // === LOGIC === // is fast ma above slow ma? aboveBelow = maFast >= maSlow ? true : false // are we inverting our trade direction? tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false // === STRATEGY - LONG POSITION EXECUTION === enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions 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)