Cette stratégie construit des signaux de trading basés sur l'indicateur de dynamique RSI et les prix (Exponential Moving Average (EMA) et Simple Moving Average (SMA).
La stratégie utilise 3 conditions pour générer des signaux de trading:
Si deux des trois conditions ci-dessus sont remplies, un signal d'achat est généré; si aucun n'est rempli, un signal de vente est généré.
La stratégie prévoit également un mode "acheter toujours" pour tester les performances du système par rapport au grand marché.
En résumé, cette stratégie appartient à une stratégie de négociation à moyenne fréquence qui vise à capturer les tendances des prix à moyen terme tout en évitant les fluctuations à court terme du marché. Ses avantages et ses points de risque sont assez évidents.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("I11L Unitrend",overlay=false, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00) tradingMode = input.string("Unitrend", "Trading Mode", ["Unitrend", "Always Buy"], tooltip="Choose the Trading Mode by trying Both in your Backtesting. I use it if one is far better then the other one.") compoundingMode = input.bool(false) leverage = input.float(1.0,step=0.1) SL_Factor = 1 - input.float(1,"Risk Capital per Trade unleveraged (%)", minval=0.1, maxval=100, step=0.1) / 100 TPFactor = input.float(2, step=0.1) var disableAdditionalBuysThisDay = false var lastTrade = time if(time > lastTrade + 1000 * 60 * 60 * 8 or tradingMode == "Always Buy") disableAdditionalBuysThisDay := false if(strategy.position_size != strategy.position_size[1]) lastTrade := time disableAdditionalBuysThisDay := true //Trade Logic SCORE = 0 //rsi momentum RSIFast = ta.ema(ta.rsi(close,50),24) RSISlow = ta.sma(ta.rsi(close,50),24) RSIMomentum = RSIFast / RSISlow goodRSIMomentum = RSIMomentum > 1 SCORE := goodRSIMomentum ? SCORE + 1 : SCORE //rsi trend RSITrend = RSISlow / 45 goodRSI = RSITrend > 1 SCORE := goodRSI ? SCORE + 1 : SCORE //price trend normalTrend = ta.ema(close,50) / ta.sma(close,50) goodTrend = normalTrend > 1 SCORE := goodTrend ? SCORE + 1 : SCORE isBuy = SCORE > 1 or tradingMode == "Always Buy" isSell = false //SCORE == 0 //plot(SCORE, color=isBuy ? color.green : #ffffff88) //reduced some of the values just for illustrative purposes, you can buy after the signal if the trendlines seem to grow plot(1, color=isBuy ? #77ff7733 : SCORE == 2 ? #ffff0033 : SCORE == 1 ? #ff888833 : #ff000033,linewidth=10) plot(1 - (1 - RSIMomentum) * 6,color=#00F569) plot(1 - (1 - RSITrend) * 0.25,color=#00DB9B) plot(1 - (1 - normalTrend) * 20,color=#00F5EE) strategy.initial_capital = 50000 if(isBuy and not(disableAdditionalBuysThisDay)) if(compoundingMode) strategy.entry("Long", strategy.long, (strategy.equity / close) * leverage) else strategy.entry("Long", strategy.long, (strategy.initial_capital / close) * leverage) if(strategy.position_size != 0) strategy.exit("TP/SL Long", "Long", stop=strategy.position_avg_price * (1 - (1 - SL_Factor)), limit=strategy.position_avg_price * (1 + (1 - SL_Factor) * TPFactor))