Chiến lược này kết hợp các chỉ số MACD và RSI để thực hiện giao dịch dài và ngắn đồng thời, để có được lợi nhuận dư thừa trong các tình huống xu hướng không rõ ràng.
Giải pháp rủi ro:
Chiến lược này thực hiện giao dịch hai hướng với sự kết hợp của MACD và RSI. Sử dụng stop loss để khóa lợi nhuận có thể tạo ra lợi nhuận dư thừa trong các thị trường không có xu hướng. Chiến lược có thể được tối ưu hóa thêm về các thông số, chiến lược stop loss vv để có được lợi nhuận dư thừa nhất quán hơn.
/*backtest start: 2023-09-08 00:00:00 end: 2023-10-08 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Revision: 290 // Author: @Hugo_Moriceau //study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true) // Pyramide 10 order size 100, every tick strategy("Moriceau_Crypto_strategies_Long_short_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) dataB = macd < -0.1 and rsi<27 and fastMA < slowMA // data1 = macd > 0.125 and rsi>81 and fastMA> slowMA dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA tradeInvert = input(defval = false, title = "Invert Trade Direction?") // === LOGIC === // is fast ma above slow ma? Achat = macd < -0.1 and rsi < 27 and fastMA < slowMA ? true : false vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false // are we inverting our trade direction? tradeDirection = vente ? Achat ? false : true : Achat ? 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)) plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0) plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0) //fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50) //slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50) // === BACKTEST RANGE === FromMonth = input(defval = 05, title = "From Month", minval = 1) FromDay = input(defval = 23, title = "From Day", minval = 1) FromYear = input(defval = 2021, title = "From Year", minval = 2017) ToMonth = input(defval = 5, title = "To Month", minval = 1) ToDay = input(defval = 25, title = "To Day", minval = 1) ToYear = input(defval = 2021, title = "To Year", minval = 2017) // === STRATEGY RELATED INPUTS ===+ // the risk management inputs inpTakeProfit = input(defval = 2500, title = "Take Profit", minval = 28) inpStopLoss = input(defval = 600, title = "Stop Loss", minval = 15) inpTrailStop = input(defval = 300, title = "Trailing Stop Loss", minval = 5) inpTrailOffset = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1) // === 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 = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in strategy.close(id = "TP 50% Sell", 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 = "Vente", long = false, when = enterShort()) strategy.close(id = "Vente", when = exitShort()) // === STRATEGY RISK MANAGEMENT EXECUTION === // finally, make use of all the earlier values we got prepped strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)