Cette stratégie est basée sur l'indicateur de canal de prix. En définissant un paramètre de dynamique, il calcule la valeur moyenne des prix les plus élevés et les plus bas dans différents cycles pour former la ligne médiane du canal de prix, et établit des lignes longues et courtes en fonction de cela. Lorsque le prix traverse la ligne longue, il va long; lorsque le prix traverse la ligne courte, il va court. La condition de clôture est que le prix régresse à la ligne médiane du canal.
Cette stratégie utilise l'indicateur de canal de prix pour calculer la valeur moyenne des prix les plus élevés et les plus bas dans différents cycles pour former la ligne médiane du canal.
Lorsque le prix est inférieur à la ligne longue, ouvrez des positions longues avec des ordres de limite; lorsque le prix est supérieur à la ligne courte, ouvrez des positions courtes avec des ordres de limite.
La stratégie présente les avantages suivants:
La stratégie comporte également certains risques:
Les risques ci-dessus peuvent être atténués en optimisant les paramètres, en établissant des ordres de stop loss ou en combinant d'autres indicateurs de jugement.
La stratégie peut être optimisée dans les aspects suivants:
L'idée de conception de cette stratégie basée sur l'indicateur de canal de prix est claire. L'utilisation de la rupture pour ouvrir des positions peut contrôler efficacement les risques. Mais il existe également de grands espaces d'optimisation des paramètres et des mécanismes de stop loss qui doivent être améliorés. Dans l'ensemble, la stratégie a une certaine valeur pratique et mérite d'être testée et optimisée davantage.
/*backtest start: 2022-11-29 00:00:00 end: 2023-12-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's PCMA Strategy v1.0", shorttitle = "PCMA 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 = "Lot, %") per = input(3, title = "Length") shortlevel = input(10.0, title = "Short line (red)") longlevel = input(-5.0, title = "Long line (lime)") 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") //Price Channel h = highest(high, per) l = lowest(low, per) c = (h + l) / 2 ll = c + ((c / 100) * longlevel) sl = c + ((c / 100) * shortlevel) //Lines shortcolor = needshort ? red : na longcolor = needlong ? lime : na plot(sl, linewidth = 2, color = shortcolor, title = "Short line") plot(c, linewidth = 2, color = blue, title = "SMA line") plot(ll, linewidth = 2, color = longcolor, title = "Long line") //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[per])) and size == 0 and needlong strategy.entry("L", strategy.long, lot, limit = ll, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size == 0 and needshort strategy.entry("S", strategy.short, lot, limit = sl, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size > 0 strategy.entry("Close", strategy.short, 0, limit = c, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[per])) and size < 0 strategy.entry("Close", strategy.long, 0, limit = c, 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()