
La stratégie utilise l’indicateur WaveTrend pour déterminer les tendances de prix et les surachats et les surventeurs, en combinaison avec les signaux de filtrage de l’indicateur RSI, et utilise le suivi de tendance pour effectuer des opérations inverses sur les surachats et les surventeurs.
La stratégie utilise l’indicateur WaveTrend pour déterminer la direction de la tendance des prix. L’indicateur WaveTrend est basé sur l’amélioration de l’indicateur Rainbow pour déterminer la direction de la tendance des prix en calculant la différence entre la moyenne Heikin-Ashi et la valeur absolue des prix.
La formule de WaveTrend dans la stratégie est la suivante:
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
Dans ce cas, esa est la moyenne calculée de Heikin-Ashi, d est la moyenne de la différence entre la moyenne de Heikin-Ashi et la valeur absolue du prix.
L’indicateur RSI est utilisé pour juger si une personne est sur-achetée ou sur-vendue. La formule de calcul du RSI dans le code est:
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
Les zones de plus de 70 sont des zones d’achat et les zones de moins de 30 sont des zones de vente.
La combinaison de ces deux indicateurs signifie que lorsque le RSI est inférieur à 25, WaveTrend est inférieur à 60 pour la zone de survente et un signal de survente; lorsque le RSI est supérieur à 75, WaveTrend est supérieur à 60 pour la zone de survente et un signal de survente.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
La réponse:
Cette stratégie peut être optimisée dans les directions suivantes:
Remplacer ou augmenter les indices de jugement pour optimiser la précision du signal. Par exemple, ajouter des indices de jugement tels que MACD, KD.
Optimiser les paramètres pour les différentes variétés de transactions. Par exemple, ajuster le cycle de lissage pour trouver la meilleure combinaison de paramètres.
Adhérer à une stratégie de suivi des arrêts de perte pour contrôler efficacement les pertes individuelles, telles que les arrêts de pourcentage de solde, les arrêts mobiles, etc.
Considérez différentes stratégies de mise en position. Par exemple, utilisez la mise en position de Martingale au lieu de la quantité fixe de mise en position.
Optimiser les paramètres de la plage d’adaptabilité, trouver les meilleurs paramètres pour améliorer l’exactitude des jugements.
La stratégie a une conception globale claire, utilise des indicateurs de dynamisme pour déterminer les tendances des prix et filtre efficacement les signaux de négociation de bruit. La stratégie a une grande marge d’optimisation et peut être améliorée sous plusieurs angles, ce qui rend la stratégie plus stable et plus fiable. L’optimisation peut être adaptée à différentes variétés de transactions en ajustant les paramètres.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)
//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()