
La estrategia de la nube que atraviesa la luna es una estrategia de comercio cuantitativa que combina el indicador de análisis técnico de mercado de la nube y el filtro de rango. La estrategia utiliza un indicador de la nube para determinar la tendencia del mercado y los soportes importantes, los puntos de resistencia y las formas de la línea K para generar señales de comercio. Al mismo tiempo, combina el filtro de rango para controlar la frecuencia de las operaciones y el riesgo.
La estrategia se basa principalmente en un indicador de nube y en la forma de la línea K para juzgar la tendencia del mercado. Un indicador de nube contiene la línea de cambio anterior, la línea de referencia y la línea de nube, cuya relación cruzada puede juzgar la tendencia del mercado; mientras que la línea de nube puede servir como soporte y resistencia. La estrategia ajusta la sensibilidad de una línea de nube mediante la configuración de diferentes combinaciones de parámetros.
Además, la estrategia también establece un filtro de rango de fechas, que solo se realiza en el rango de fechas especificado, lo que controla la frecuencia de operaciones de la estrategia. Al mismo tiempo, la configuración de stop loss también reduce el riesgo, ya que la opción de stop loss detendrá las pérdidas cuando el precio se ejecute en una dirección desfavorable.
El riesgo puede ser mejorado y controlado mediante la modificación de los parámetros del indicador de una nube, la optimización del rango de fechas y la corrección de los puntos de parada.
El uso integral de un indicador de una nube, la identificación de la línea K, el filtrado de rango y otros métodos para determinar el movimiento del mercado, puede capturar la dirección de la tendencia con mayor claridad. A través de ajustes de parámetros, control de riesgos y otros medios, se puede obtener un mejor efecto de la estrategia. Pero aún así, debe tener en cuenta el retraso del indicador de una nube y realizar un ajuste de optimización continuo.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)
xlowest_(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := min(x, v)
x
xlowest(src, len) =>
na(src[len]) ? xlowest_(src, len) : lowest(src, len)
xhighest_(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := max(x, v)
x
xhighest(src, len) =>
na(src[len]) ? xhighest_(src, len) : highest(src, len)
dropn(src, n) =>
na(src[n]) ? na : src
ichiConversionPeriods(presets) =>
if presets == "Cpt 20 60 120 30"
20
else
if presets == "Cpt 10 30 60 30"
10
else
if presets == "Std 18 52 104 26"
18
else
9
ichiBasePeriods(presets) =>
if presets == "Cpt 20 60 120 30"
60
else
if presets == "Cpt 10 30 60 30"
30
else
if presets == "Std 18 52 104 26"
52
else
26
ichiLaggingSpan2Periods(presets) =>
if presets == "Cpt 20 60 120 30"
120
else
if presets == "Cpt 10 30 60 30"
60
else
if presets == "Std 18 52 104 26"
104
else
52
ichiDisplacement(presets) =>
if presets == "Cpt 20 60 120 30"
30
else
if presets == "Cpt 10 30 60 30"
30
else
if presets == "Std 18 52 104 26"
26
else
26
scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets", options=["Cpt 20 60 120 30", "Cpt 10 30 60 30", "Std 18 52 104 26", "Std 9 26 52 26"], defval="Cpt 20 60 120 30")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")
conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"
lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)
lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs
donchian(len) =>
avg(xlowest(lowsp, len), xhighest(highsp, len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay = input(defval = 3, title = "From Day", minval = 1)
FromYear = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth = input(defval = 1, title = "To Month", minval = 1)
ToDay = input(defval = 1, title = "To Day", minval = 1)
ToYear = input(defval = 9999, title = "To Year", minval = 2014)
golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)
strategy.entry("Buy", strategy.long, when=(golong and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.entry("Sell", strategy.short, when=(goshort and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2
plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")
p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)