
La estrategia se basa en un indicador de canal de precios, que establece un parámetro de dinámica para formar la línea media del canal de precios calculando el promedio de los precios máximos y mínimos de los diferentes períodos, y como base de referencia, establece una línea larga y una línea corta. Cuando el precio rompe la línea larga, haga más; cuando el precio rompe la línea corta, haga vacío.
La estrategia utiliza un indicador de canal de precios para calcular el promedio de los máximos y mínimos de precios en diferentes períodos, formando una línea media de canal de precios. Utilizando la línea media como referencia, establece la línea larga y la línea corta a través de los parámetros de cambio. En concreto, la fórmula para calcular la línea larga es: línea media + (((la línea media x el parámetro de la línea larga%); la fórmula para calcular la línea corta es: línea media + (((la línea media x el parámetro de la línea corta%).
Cuando el precio está por debajo de la línea larga, use la sola de precio limitado para abrir una carta abierta; cuando el precio está por encima de la línea corta, use la sola de precio limitado para abrir una carta abierta. El método de parada de la carta abierta múltiple es el regreso del precio a la línea media del canal.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
El riesgo puede ser reducido mediante la optimización de los parámetros, el establecimiento de órdenes de stop loss, o en combinación con otros indicadores de juicio.
La estrategia puede ser optimizada en los siguientes aspectos:
Esta estrategia se basa en un claro diseño de indicadores de canales de precios, el uso de la apertura de posición para controlar el riesgo de manera efectiva. Pero también hay un gran espacio para la optimización de los parámetros, el mecanismo de detención de pérdidas debe ser perfeccionado. En general, la estrategia tiene cierto valor práctico y merece ser probada y optimizada.
/*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()