
La stratégie est basée sur l’indicateur de la chaîne de prix, qui définit des paramètres de dynamique pour former une ligne médiane de la chaîne de prix en calculant la moyenne des prix les plus élevés et les plus bas des différents cycles, en utilisant comme référence la ligne longue et la ligne courte. Lorsque le prix franchit la ligne longue, faites plus; lorsque le prix franchit la ligne courte, faites moins.
La stratégie utilise l’indicateur de la chaîne de prix pour calculer la moyenne des prix les plus élevés et les plus bas de différentes périodes, formant ainsi la ligne médiane de la chaîne de prix. La ligne médiane est utilisée comme base de référence, la ligne longue et la ligne courte étant définie par des paramètres de déplacement.
Lorsque le prix est inférieur à la ligne longue, utilisez un billet à prix limité pour ouvrir plusieurs offres; lorsque le prix est supérieur à la ligne courte, utilisez un billet à prix limité pour ouvrir plusieurs offres. La méthode d’arrêt des billets à prix limité est de revenir à la ligne médiane du canal.
Cette stratégie présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Il est possible d’atténuer ces risques en optimisant les paramètres, en définissant des ordres de stop-loss, ou en combinant les jugements d’autres indicateurs.
Cette stratégie peut être optimisée dans les domaines suivants:
Cette stratégie est basée sur une conception claire des indicateurs de la chaîne de prix. L’ouverture de position de rupture permet de contrôler efficacement le risque. Cependant, il existe également un grand espace d’optimisation des paramètres et un mécanisme d’arrêt des pertes qui doit être amélioré.
/*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()