Cette stratégie utilise des moyennes mobiles simples (SMA) et quelques calculs mathématiques pour déterminer les points d'achat/vente. Nous gardons une ligne SMA de 100 jours comme base. Si le prix de clôture est en dessous de cette ligne, nous déterminons la position d'ouverture en fonction du pourcentage que le prix est en dessous de la ligne (faible décalage), ce qui est configurable. De même, nous définissons un pourcentage de décalage élevé au-dessus de la SMA de 100 jours avant de fermer des positions longues. Si nous essayons de fermer trop tôt alors que le prix est encore en hausse, le stop loss de trailing sera déclenché.
La stratégie utilise trois lignes SMA: une ligne rapide (défaut de 14 jours), une ligne lente (défaut de 100 jours) et une ligne de référence (défaut de 30 jours).
Il va long lorsque le prix de clôture est inférieur à la ligne de référence, le pourcentage en dessous de la ligne lente (décalage bas) est supérieur à la valeur configurée, la ligne rapide est en hausse et la ligne lente est en baisse.
Il ferme long lorsque le prix de clôture est au-dessus de la ligne de référence, le pourcentage au-dessus de la ligne lente (compensation élevée) est supérieur à la valeur configurée, le prix de clôture a augmenté pendant 3 bougies consécutives, nous avons des bénéfices ouverts et la ligne rapide est au-dessus de la ligne lente.
La taille de l'ordre est basée sur un pourcentage du capital total, ce qui contrôle la taille de notre position.
Améliorations correspondantes:
Le mécanisme de sortie définit un stop loss pour verrouiller les gains. Cette stratégie est simple à comprendre et à mettre en œuvre. En optimisant les paramètres tels que les périodes SMA, les offsets, les niveaux de stop loss, de meilleurs résultats peuvent être obtenus. Il convient aux investisseurs à moyen et long terme qui recherchent des profits stables.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // Author: Sonny Parlin (highschool dropout) strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy", overlay=true, currency=currency.USD, initial_capital=10000) // Inputs and variables ss = input(14, minval=10, maxval=50, title="SMA Fast (days)") ff = input(100, minval=55, maxval=200, title="SMA Slow (days)") ref = input(30, minval=20, maxval=50, title="SMA Reference (days)") lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001) highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001) orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01) // SMA smaFast = sma(close, ss) smaSlow = sma(close, ff) smaRef = sma(close, ref) distanceLow = (close - smaSlow) / close distanceHigh = (close - smaSlow) / close // Set up SMA plot but don't show by default plot(smaFast, "smaFast", color=#00ff00, display = 0) plot(smaSlow, "smaSlow", color=#ff0000, display = 0) plot(smaRef, "smaRef", color=#ffffff, display = 0) // The buy stratey: // guard that the low is under our sma low reference line by our lowOffset %, // default is 0.001. (low < smaRef) and (distanceLow > lowOffset) // SMA fast is on the rise and SMA slow is falling and they are very likely // to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) // The sell Strategy: // Guard that close is higher than our sma high reference line by our // highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset) // Guard that close has risen by 3 candles in a row (rising(close,3)) // Guard that we currently have profit (strategy.openprofit > 0) // Guard that SMA fast is higher than smaSlow (smaFast > smaSlow) // If it keeps going up past our close position the trailing stoploss will kick in! enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow) // Order size is based on total equity // Example 1: // startingEquity = 2000 // close = 47434.93 // orderStake = 0.45 // (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900 // Example 2: // startingEquity = 2000 // close = 1.272 // orderStake = 0.45 // (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900 orderSize = (strategy.equity * orderStake) / close // Trailing Stoploss // I'm using 1.35 as my default value, play with this for different results. longTrailPerc = input(title="Trailing Stoploss (%)", type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01 longStopPrice = 0.0 longStopPrice := if (strategy.position_size > 0) stopValue = close * (1 - longTrailPerc) max(stopValue, longStopPrice[1]) else 0 if (enterLong) strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0) if (enterShort) strategy.exit(id="Close Long Position", stop=longStopPrice) //plot(strategy.equity)