Cette stratégie permet de déterminer le moment de l’achat et de la vente en calculant le taux de variation sur une période donnée. Elle aide les traders à saisir les opportunités de fluctuations de prix à court terme.
Cette stratégie est basée sur les indicateurs suivants:
Règles spécifiques à l’achat:
Les règles de vente sont les suivantes:
La taille de la commande est définie en pourcentage du total des droits de participation (par défaut 96%), ce qui permet de fournir un effet de levier.
Les principaux avantages de cette stratégie sont les suivants:
Dans l’ensemble, la stratégie utilise des outils tels que le taux de variation des prix et les indicateurs SMA pour obtenir de meilleures performances dans des conditions de volatilité.
La stratégie présente également les risques suivants:
Les paramètres de taux de variation et de SMA mal configurés peuvent entraîner des signaux de trading erronés ou erronés. Les paramètres doivent être ajustés pour différents marchés.
La taille de la commande au-delà de la convention augmente le risque. Il est recommandé d’optimiser le ratio de commande au cours de la phase de test.
Suivre le stop-loss peut être prématuré en cas de tremblement de terre. Vous pouvez envisager d’ajuster le stop-loss.
La stratégie de transactionsstab est sujette à l’arbitrage. Elle doit être combinée avec un jugement de tendance et une gestion des risques de stop loss.
Le risque d’adéquation des données de retracement. La robustesse de la stratégie devrait être vérifiée en laboratoire plusieurs fois dans différents marchés.
Ces risques peuvent être maîtrisés par l’optimisation des paramètres, l’ajustement des commandes, l’optimisation des stratégies de stop loss et la vérification en temps réel.
La stratégie peut également être optimisée pour:
Ajout d’autres indicateurs techniques tels que le taux de fluctuation, le volume de transactions, etc. pour améliorer la précision du signal.
Optimiser le nombre de transactions afin de réduire l’impact des transactions stab en réduisant leur fréquence.
En combinaison avec une stratégie de rupture, un signal de rupture est mis en place à proximité des niveaux de prix critiques.
Optimiser automatiquement les paramètres en utilisant des méthodes d’apprentissage automatique.
La robustesse de la stratégie est testée sur plusieurs marchés sur plusieurs périodes de temps, afin d’améliorer l’adaptabilité.
Il faut prendre en compte les caractéristiques des différentes variétés, telles que les actions, les devises, etc., et définir un ensemble de paramètres spécifiques.
Les signaux stratégiques et les méthodes de contrôle des risques sont optimisés de manière itérative en fonction des résultats du marché.
Cette stratégie utilise le taux de variation et les indicateurs SMA pour rechercher des opportunités de négociation dans les fluctuations de prix à courte ligne. Elle est propice à la capture de tendances rapides, mais nécessite également une attention particulière au contrôle des risques. La robustesse et l’adaptabilité de la stratégie peuvent être continuellement améliorées grâce à l’optimisation des paramètres, à l’ajustement des ordres, à l’amélioration de la stratégie de stop loss et à la vérification en laboratoire.
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=4
// Author: Sonny Parlin (highschool dropout)
// Best if run on 5m timeframe
strategy(shorttitle="ROC+Strategy", title="Rate of Change 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.023, "ROC Low (%)", minval=0, step=0.01)
highOffset = input(0.047, "ROC High (%)", minval=0, step=0.01)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)
lookback = input(12, "Lookback Candles", minval=1, step=1)
// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
ROC = (max(close[lookback],close) - min(close[lookback],close)) / max(close[lookback],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 Reference line
// Guard that the rate of change over the lookback period is greater than our
// ROC lowOffset %, default is 0.023. (low < smaRef) and (ROC > 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 (ROC > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow,1))
// The sell Strategy:
// Guard that close is higher than our SMA reference line and that the rate of
// change over the lookback period is greater than our highOffset %, default
// is 0.047. (close > smaRef) and (ROC > 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 (ROC > 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 2.62 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=3.62) * 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)