
L’idée principale de cette stratégie est d’utiliser des moyennes mobiles lisses pour calculer des moyennes éclairées lisses afin de détecter la tendance des prix et de faire plus lorsque le prix se fourche avec la moyenne éclairée lisses et moins lorsque la fourche est morte.
La stratégie définit d’abord une fonction pour calculer la moyenne mobile lisse smoothedMovingAvg, qui prend la moyenne mobile de la période précédente et la plus récente pour calculer la moyenne mobile lisse de la période en cours avec un certain poids.
On définit ensuite une fonction getHAClose qui permet de calculer le prix de clôture en fonction du prix d’ouverture, du prix le plus élevé, du prix le plus bas et du prix de clôture.
Dans la logique de la stratégie principale, on obtient d’abord les prix initiaux des différents cycles, puis on calcule la moyenne mobile en douceur à l’aide de la fonction smoothedMovingAvg, puis on calcule le prix de clôture en douceur à l’aide de la fonction getHAClose.
Enfin, lorsque le prix est au-dessus de la marge de glissement pour indiquer le prix de clôture, faites plus, et le prix est à l’arrêt lorsque le prix est au-dessous de la marge de glissement pour indiquer le prix de clôture, faites moins, et le prix est à l’arrêt lorsque le prix est à l’arrêt.
Le plus grand avantage de cette stratégie réside dans l’utilisation de moyennes mobiles lisses pour calculer la moyenne d’éclairage lisse, permettant de déterminer plus précisément la tendance des prix, de filtrer une partie du bruit et d’éviter de produire de faux signaux dans les oscillations. En outre, la moyenne d’éclairage a elle-même l’avantage de mettre en évidence la tendance, et son utilisation en combinaison avec les prix peut encore améliorer l’exactitude de la décision.
Les principaux risques de cette stratégie sont les suivants:
En ce qui concerne les risques susmentionnés, nous pouvons réduire les risques et améliorer la stabilité de la stratégie en ajustant les paramètres de lissage, en introduisant des mécanismes de stop-loss et en réduisant les positions de transaction individuelles.
La stratégie peut également être optimisée dans les domaines suivants:
En optimisant les points ci-dessus, il est possible de réduire encore plus le risque d’adaptation à la courbe de la stratégie et d’améliorer l’adaptabilité et la stabilité de la stratégie.
L’idée générale de la stratégie est claire et facile à comprendre, elle permet de déterminer la tendance des prix en calculant une ligne de lumière uniforme lisse, et de procéder en conséquence. Le plus grand avantage est de pouvoir filtrer une partie du bruit et d’améliorer l’exactitude du jugement des signaux. Mais il existe également une certaine difficulté d’optimisation des paramètres et le risque de manquer un retournement rapide.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Smoothed Heiken Ashi Strategy", overlay=true)
// Inputs
g_TimeframeSettings = 'Display & Timeframe Settings'
time_frame = input.timeframe(title='Timeframe for HA candle calculation', defval='', group=g_TimeframeSettings)
g_SmoothedHASettings = 'Smoothed HA Settings'
smoothedHALength = input.int(title='HA Price Input Smoothing Length', minval=1, maxval=500, step=1, defval=10, group=g_SmoothedHASettings)
// Define a function for calculating the smoothed moving average
smoothedMovingAvg(src, len) =>
smma = 0.0
smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
smma
// Function to get Heiken Ashi close
getHAClose(o, h, l, c) =>
((o + h + l + c) / 4)
// Calculate smoothed HA candles
smoothedHAOpen = request.security(syminfo.tickerid, time_frame, open)
smoothedMA1close = smoothedMovingAvg(request.security(syminfo.tickerid, time_frame, close), smoothedHALength)
smoothedHAClose = getHAClose(smoothedHAOpen, smoothedHAOpen, smoothedHAOpen, smoothedMA1close)
// Plot Smoothed Heiken Ashi candles
plotcandle(open=smoothedHAOpen, high=smoothedHAOpen, low=smoothedHAOpen, close=smoothedHAClose, color=color.new(color.blue, 0), wickcolor=color.new(color.blue, 0))
// Strategy logic
longCondition = close > smoothedHAClose
shortCondition = close < smoothedHAClose
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.close("Buy", when=shortCondition)
plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar)
plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar)