Cette stratégie est une stratégie de croisement simple de moyenne mobile (SMA) adaptée aux marchés de crypto-monnaie. Elle utilise des SMA rapides, moyennes et lentes pour identifier les signaux d'entrée et de sortie potentiels. Lorsque le SMA rapide traverse le SMA moyen, un signal d'achat est généré. Lorsque le SMA rapide traverse le SMA moyen, un signal de vente est généré.
La stratégie permet aux opérateurs de définir les paramètres clés suivants:
Les SMA rapides, moyennes et lentes sont calculées sur la base des longueurs de SMA définies par l'utilisateur.
Lorsque la SMA rapide traverse la SMA moyenne, un signal d'achat est généré.
La stratégie calcule le principal nominal par transaction en fonction des fonds du compte et du pourcentage de risque acceptable par transaction.
Peut optimiser en raccourcissant les périodes de SMA, en ajoutant d'autres indicateurs, etc.
Cette stratégie intègre les règles de croisement SMA, la gestion des risques et le dimensionnement des positions pour un système de suivi de tendance robuste adapté aux marchés cryptographiques.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Onchain Edge Trend SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Configuration Parameters priceSource = input(close, title="Price Source") includeIncompleteBars = input(true, title="Consider Incomplete Bars") maForecastMethod = input(defval="flat", options=["flat", "linreg"], title="Moving Average Prediction Method") linearRegressionLength = input(3, title="Linear Regression Length") fastMALength = input(7, title="Fast Moving Average Length") mediumMALength = input(30, title="Medium Moving Average Length") slowMALength = input(50, title="Slow Moving Average Length") tradingCapital = input(100000, title="Trading Capital") tradeRisk = input(1, title="Trade Risk (%)") // Calculation of Moving Averages calculateMA(source, period) => sma(source, period) predictMA(source, forecastLength, regressionLength) => maForecastMethod == "flat" ? source : linreg(source, regressionLength, forecastLength) offset = includeIncompleteBars ? 0 : 1 actualSource = priceSource[offset] fastMA = calculateMA(actualSource, fastMALength) mediumMA = calculateMA(actualSource, mediumMALength) slowMA = calculateMA(actualSource, slowMALength) // Trading Logic enterLong = crossover(fastMA, mediumMA) exitLong = crossunder(fastMA, mediumMA) // Risk and Position Sizing riskCapital = tradingCapital * tradeRisk / 100 lossThreshold = atr(14) * 2 tradeSize = riskCapital / lossThreshold if (enterLong) strategy.entry("Enter Long", strategy.long, qty=tradeSize) if (exitLong) strategy.close("Enter Long") // Display Moving Averages plot(fastMA, color=color.blue, linewidth=2, title="Fast Moving Average") plot(mediumMA, color=color.purple, linewidth=2, title="Medium Moving Average") plot(slowMA, color=color.red, linewidth=2, title="Slow Moving Average")