La stratégie Williams
La stratégie utilise trois SMA de longueurs de période différentes - la ligne rapide sma1, la ligne moyenne sma2 et la ligne lente sma3, où sma1 a la période la plus courte et sma3 a la plus longue.
Lorsque sma1 dépasse sma2 et sma2 dépasse sma3, cela indique que le marché est dans une tendance à la hausse et forme une bouche d'alligator à la hausse.
À l'inverse, lorsque sma1 passe sous sma2 et sma2 passe sous sma3, cela indique que le marché est dans une tendance à la baisse et forme une bouche d'alligator à la baisse.
La condition de sortie est lorsque les trois lignes se réalignent, la ligne rapide étant au-dessous de la ligne moyenne ou la ligne moyenne au-dessous de la ligne lente.
La stratégie dessine également des couleurs de fond pour identifier la direction de la tendance - vert pour la tendance haussière et rouge pour la tendance baissière.
En résumé, la stratégie utilise les forces des moyennes mobiles et des modèles de bouche d'alligator pour déterminer la direction de la tendance et le commerce en conséquence.
Pour lutter contre les risques, les améliorations suivantes peuvent être apportées:
Ajoutez un filtre de tendance pour éviter les fléchettes sur les marchés à variation.
Optimiser les conditions de sortie en utilisant des indicateurs de tendance.
Ajoutez une stratégie de stop loss pour contrôler les pertes d'une seule transaction.
Utilisez des moyennes mobiles adaptatives afin que les périodes s'ajustent dynamiquement.
La stratégie peut être encore optimisée dans les aspects suivants:
Ajoutez un filtre de force de tendance pour éviter une entrée prématurée dans les tendances faibles.
Optimiser les périodes moyennes mobiles pour trouver les meilleures combinaisons grâce au backtesting.
Utiliser des moyennes mobiles adaptatives afin que les périodes s'adaptent en fonction de la dynamique du marché.
Ajoutez des stratégies de stop loss comme le stop loss de suivi, le stop loss du solde du compte pour contrôler les risques.
Améliorer les conditions d'entrée en utilisant le volume, les bandes de Bollinger, etc. pour augmenter la précision.
Améliorer les conditions de sortie en évaluant la probabilité d'inversion de tendance avec des indicateurs lorsque les lignes se croisent.
La stratégie Williams
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's Alligator Strategy by Bill Williams", shorttitle = "Alligator", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len1 = input(50, defval = 50, minval = 1, title = "MA 1 Length") len2 = input(100, defval = 100, minval = 1, title = "MA 2 Length") len3 = input(200, defval = 200, minval = 1, title = "MA 3 Length") src = input(close, title = "Source") showbg = input(false, title = "Show Background") fromyear = input(1900, defval = 1900, 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") //MAs sma1 = sma(src, len1) sma2 = sma(src, len2) sma3 = sma(src, len3) plot(sma1, color = lime, linewidth = 2) plot(sma2, color = blue, linewidth = 2) plot(sma3, color = red, linewidth = 2) //Signals up = sma1 > sma2 and sma2 > sma3 dn = sma1 < sma2 and sma2 < sma3 //Background trend = 0 trend := up ? 1 : dn ? -1 : trend[1] col = showbg == false ? na : trend == 1 ? lime : red bgcolor(col) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("Long", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("Short", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()