Stratégie des zones transitoires

Auteur:ChaoZhang est là., Date: 2023-12-29 17h03 et 27 min
Les étiquettes:

img

Résumé

La stratégie des zones transitoires est une stratégie de négociation à court terme basée sur des zones de fluctuation des prix.

La logique de la stratégie

La stratégie calcule les prix les plus élevés et les plus bas des N bougies passées pour construire une zone de fluctuation des prix.

Plus précisément, la stratégie suit en permanence les prix les plus élevés et les plus bas des derniers N chandeliers (paramètre réglable N), où:

  • Prix le plus bas = point le plus bas des N chandeliers passés
  • Prix le plus élevé = point le plus élevé des N chandeliers passés

Cela construit la zone de fluctuation des prix.

Lorsque le prix de clôture du dernier chandelier est supérieur au prix le plus élevé de la zone, il indique que la zone a été pénétrée, générant un signal long; lorsque le prix de clôture est inférieur au prix le plus bas de la zone, il indique que la zone a été pénétrée, générant un signal court.

En outre, la stratégie intègre également des filtres de couleur et de corps. Le filtre de couleur filtre les signaux en fonction de la couleur du chandelier; le filtre du corps filtre les signaux en fonction de la taille du corps du chandelier. Cela aide à filtrer certains faux signaux.

Les avantages

La stratégie présente les avantages suivants:

  1. Capture les zones de prix et détermine les points d'inversion de tendance pour des entrées longues/courtes précises
  2. Les filtres de couleur et de corps aident à filtrer les faux signaux.
  3. Logie de stratégie simple et claire, facile à comprendre et à ajuster les paramètres
  4. De nombreux paramètres réglables permettent d'optimiser la stratégie

Les risques

La stratégie comporte également certains risques:

  1. Des paramètres mal réglés peuvent entraîner une sur-trading et des frais élevés
  2. Des paramètres incorrects de la zone peuvent générer trop de faux signaux de rupture.
  3. Faible capacité de prédiction des zones de prix lors de fortes fluctuations du marché
  4. Incapable de gérer les écarts de prix

Ces risques peuvent être réduits en ajustant les paramètres des zones, en optimisant les filtres de signal, etc.

Directions d'optimisation

La stratégie peut être optimisée dans plusieurs directions:

  1. Ajustez dynamiquement la fourchette de la zone de prix au lieu de N chandeliers fixes
  2. Incorporer une logique de stop loss pour limiter les pertes
  3. Optimiser les paramètres du filtre pour améliorer la qualité du signal
  4. Ajouter de la logique pour gérer les écarts de prix
  5. Combinez plusieurs délais pour juger des signaux et éviter les pièges

Conclusion

La stratégie des zones transitoires est une stratégie de trading à court terme facile à utiliser. Elle détermine les points d'inversion de tendance à travers les zones de prix et peut rapidement capitaliser sur les opportunités du marché. Elle comporte également certains risques à noter. Des améliorations supplémentaires peuvent être apportées par l'ajustement et l'optimisation des paramètres pour améliorer la rentabilité.


/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ str 1.0", 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 = "Capital, %")

usecol = input(true, defval = true, title = "Use Color-Filter")
usebod = input(true, defval = true, title = "Use Body-Filter")

h_left = input(title = "H left", defval = 10)
h_right = -1
sample_period = input(title = "Sample bars for % TZ",  defval = 5000)
show_ptz = input(title = "Show PTZ", type = bool, defval = true)
show_channel = input(title = "Show channel", type = bool, defval = true)

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")

//By Jurij w/ TZ percent occurrence by SPYderCrusher

//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red)
plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green)
channel_high = plot(show_channel ? h_left_low : 0, color=silver)
channel_low = plot (show_channel ? h_left_high : 0, color=silver)

//check true TZ back in history
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1)
plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1)

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false)
dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Plus de