Cette stratégie combine les indicateurs MACD et RSI pour mettre en œuvre simultanément des transactions longues et courtes, afin d'obtenir des rendements excédentaires dans des situations de tendance peu claires.
Solution au risque:
Cette stratégie implémente le trading bidirectionnel avec la combinaison du MACD et du RSI. L'utilisation d'un stop loss pour verrouiller les profits peut générer des rendements excédentaires sur les marchés non-trending. La stratégie peut être optimisée sur les paramètres, les stratégies de stop loss, etc. pour obtenir des rendements excédentaires plus cohérents.
/*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)