En la carga de los recursos... Cargando...

La estrategia mágica de doble EMA de la línea uniforme de YouTube

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2022-10-09 15:56:22, Actualizado: 2024-11-29 18:59:45

img

La estrategia mágica de doble EMA de la línea uniforme de YouTube

En esta edición vamos a explorar una "mágica estrategia de doble EMA lineal" de YouTube, que se conoce como la estrategia de los asesinos de las acciones y las criptomonedas. Vi el video y me enteré de que esta estrategia es una estrategia de lenguaje pine de trading view, que utiliza dos indicadores de trading view. Viendo que el efecto de repetición en el video es muy bueno, FMZ también apoya el lenguaje Pine de Trading View, así que no puedo resistirme a querer revisar, probar y analizar por mí mismo.

Indicadores utilizados en la estrategia

Indicadores de EMA de las empresas

Para simplificar el diseño, no usamos el Moving Average Exponential mencionado en el video. Usamos ta.ema incorporado en Trading View en su lugar (en realidad, todo es lo mismo).

2 Vu Man Chu Swing Free Indicador

Este es un indicador en Trading View, y tenemos que ir a Trading View y descargar el código fuente.

img

El código VuManChu Swing Free es:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")

La lógica estratégica

Indicadores de EMA: la estrategia utiliza dos EMA, una línea rápida (parámetro de ciclo pequeño) y una línea lenta (parámetro de ciclo grande).

  • Las filas múltiples La línea rápida está por encima de la línea lenta.

  • La línea en blanco La línea rápida está debajo de la línea lenta.

Indicadores VuManChu Swing Free: Los indicadores VuManChu Swing Free se utilizan para emitir señales y, en combinación con otras condiciones, para determinar si se realiza o no un pedido de compra. Se puede ver en el código fuente del indicador VuManChu Swing Free: la variable LongCondition representa una señal de compra y la variable ShortCondition representa una señal de venta.

Ahora vamos a hablar de las condiciones de activación de señales comerciales estratégicas específicas:

1, Reglas para ingresar con varios nombres: El precio de cierre de la línea K debe estar por encima de la línea rápida de la EMA, las dos líneas medias de la EMA deben presentar una serie de cabezas (la línea rápida está por encima de la línea lenta) y el indicador VuManChu Swing Free debe mostrar una señal de compra (la condición larga es verdadera). Se cumplen tres condiciones: la línea K es la línea K clave para hacer muchas entradas, y el precio de cierre de la línea K es la posición de entrada.

2, las reglas para entrar en blanco (así como para entrar en plural): El precio de cierre de la línea K debe estar por debajo de la línea rápida de la EMA, las dos líneas medias de la EMA deben presentar una fila de cabezas vacías (la línea rápida está por debajo de la línea lenta) y el indicador VuManChu Swing Free debe mostrar una señal de venta (la condición corta es verdadera). Tres condiciones se cumplen: el precio de cierre de la línea K es hacer una posición de entrada vacía.

La lógica de la negociación es muy simple, ya que no hay una descripción específica de stop loss en el video que aparece, el editor está libre de jugar aquí usando un método de stop loss de comparación, usando un número de puntos fijos de stop loss, seguimiento de stop loss.

Diseño de código

El código del indicador VuManChu Swing Free, que hemos incluido directamente en nuestro código estratégico.

img

Después escribimos un código en el lenguaje Pine para implementar la función de transacción:

// extend
fastEmaPeriod = input(50, "fastEmaPeriod")         // 快线周期
slowEmaPeriod = input(200, "slowEmaPeriod")        // 慢线周期
loss = input(30, "loss")                           // 止损点数
trailPoints = input(30, "trailPoints")             // 移动止盈触发点数
trailOffset = input(30, "trailOffset")             // 移动止盈偏移量(点数)
amount = input(1, "amount")                        // 下单量

emaFast = ta.ema(close, fastEmaPeriod)             // 计算快线EMA
emaSlow = ta.ema(close, slowEmaPeriod)             // 计算慢线EMA

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast         // 做多入场条件
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast       // 做空入场条件

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

A.可以看到,当buyCondition为真时即:

1, la variable LongCondition es verdadera (el indicador VuManChu Swing Free emite más señales). 2, emaFast > emaSlow (EMA con varios encabezados). 3, close > open (indica que el BAR actual es la línea de la luz solar), close > emaFast (indica que el precio de cierre está por encima de la línea rápida de la EMA).

El hecho de que el número de víctimas sea mayor es una de las tres condiciones para que se cumpla.

B.当sellCondition为真时,则做空的三个条件成立(这里不再赘述)。

Luego, en caso de que se active la señal de determinación de la condición de si, se abre la posición con la función de entrada de estrategia.entry y se establece la función de salida de estrategia.

Código completo

/*backtest
start: 2022-01-01 00:00:00
end: 2022-10-08 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
args: [["ZPrecision",0,358374]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=4
study(title="Range Filter - B&S Signals", shorttitle="RF - B&S Signals", overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Size Function
rng_size(x, qty, n)=> 
//    AC       = Cond_EMA(abs(x - x[1]), 1, n)
    wper      = (n*2) - 1
    avrng     = ema(abs(x - x[1]), n)
    AC = ema(avrng, wper)*qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n)=>
    r          = rng_
    var rfilt  = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)
    
    hi_band   = rng_filt1 + r
    lo_band   = rng_filt1 - r
    rng_filt  = rng_filt1
    [hi_band, lo_band, rng_filt]
 
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, type=input.source, title="Swing Source")

//Range Period
rng_per = input(defval=20, minval=1, title="Swing Period")

//Range Size Inputs
rng_qty   = input(defval=3.5, minval=0.0000001, title="Swing Multiplier")

//Bar Colors
use_barcolor = input(defval=false, type=input.bool, title="Bar Colors On/Off")

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir    := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward   = fdir==1 ? 1 : 0
downward = fdir==-1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0 
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color  = upward and (rng_src > filt) ? (rng_src > rng_src[1] ? #05ff9b : #00b36b) :
             downward and (rng_src < filt) ? (rng_src < rng_src[1] ? #ff0583 : #b8005d) : #cccccc

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Filter Plot
filt_plot = plot(filt, color=filt_color, transp=67, linewidth=3, title="Filter")

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title="High Band")
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title="Low Band")

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title="High Band Fill")
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title="Low Band Fill")

//Bar Color
barcolor(use_barcolor ? bar_color : na)

//Plot Buy and Sell Labels
plotshape(longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0))
plotshape(shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title="Buy Alert", message = "BUY")
alertcondition(shortCondition, title="Sell Alert", message = "SELL")


// extend
fastEmaPeriod = input(50, "fastEmaPeriod")
slowEmaPeriod = input(200, "slowEmaPeriod")
loss = input(30, "loss")
trailPoints = input(30, "trailPoints")
trailOffset = input(30, "trailOffset")
amount = input(1, "amount")

emaFast = ta.ema(close, fastEmaPeriod)
emaSlow = ta.ema(close, slowEmaPeriod)

buyCondition = longCondition and emaFast > emaSlow and close > open and close > emaFast
sellCondition = shortCondition and emaFast < emaSlow and close < open and close < emaFast

if buyCondition and strategy.position_size == 0
    strategy.entry("long", strategy.long, amount)
    strategy.exit("exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)
if sellCondition and strategy.position_size == 0
    strategy.entry("short", strategy.short, amount)
    strategy.exit("exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset)

Pruebas de repetición

El rango de tiempo de prueba de repetición se selecciona desde enero de 2022 hasta octubre de 2022, el ciclo de la línea K es de 15 minutos y se repite utilizando el modelo de precio de cierre. El mercado elige el contrato perpetuo ETH_USDT de Binance. Los parámetros se establecen según los parámetros de la línea rápida de 50 ciclos, la línea lenta de 200 ciclos, y otros parámetros no cambian por defecto.

img

img

Los resultados de los retrospectivos de los resultados de los retrospectivos de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los parámetros de los parámetros de los parámetros de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de los resultados de

En este caso, el precio de la moneda es el mismo que el precio de la moneda.

img

El resultado en BTC también fue explosivo:

img

img

La dirección de la estrategia:https://www.fmz.com/strategy/385745

Parece que este método de negociación es más confiable para la captura de tendencias, y se puede seguir optimizando el diseño en función de esta idea. En este artículo, no solo aprendemos la idea de una estrategia de doble línea recta, sino también cómo usar la estrategia de los jefes de la petrolera para procesar y aprender.


Relacionados

Más.

Muñecas de heladoEn este sentido, el ministro de Relaciones Exteriores de la República de Myanmar, Shinzo Abe, ha manifestado su preocupación por la situación en el país y ha pedido a los gobiernos de los países en desarrollo que no hagan ningún tipo de transacción después del 3 de enero de 2022.

el fantasma¿Podría ser que esta estrategia también sea un parámetro de acoplamiento?

Hyc1743Dream Big, ¿por qué el icono muestra la señal pero el disco no está abierto? /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cc031609caa7a896da3.jpg /upload/asset/23cc031609caa7a896da3.jpg - ¿Qué quieres decir con eso? - ¿Qué quieres decir con eso? En la actualidad, el sitio web de la compañía es el más visitado por los visitantes.

Nube ligeraEn la actualidad, la mayoría de los tutoriales están diseñados para crear una serie de estrategias de mayor dificultad, funciones, parámetros y métodos de cálculo, por ejemplo, con una versión similar a la de line.delete. Ahora, con esta estrategia de doble línea recta, he aprendido a cambiar algunas estrategias de combinación no muy complejas, he cambiado una docena de estrategias de combinación, una o dos de ellas son realmente 21 años 22 años de datos de retrospección de resultados muy buenos, también han sido probados en un disco real, pero se encuentran con complejos parámetros de función de operaciones como este: Gracias a todos los que han participado.

Haygo.El tiempo ha cambiado desde el 21 de abril hasta el 10 de octubre, y el BTC es peor.

¿Qué quieres decir?¿Puedes explicarme? ¿Por ejemplo, el valor predeterminado de 30 significa que el BTC ha caído 30 cuadrados?

Nube ligera¿Puede PINE escribir un método de bloqueo un poco más complejo, por ejemplo, un bloqueo por niveles? Si PINE puede combinarse con JS, por ejemplo, escribir indicadores con PINE, es más conveniente escribir transacciones en JS.

¿Qué quieres decir?El disco físico tendrá errores en 2022

No hay nada.La estrategia de conservación sugiere esta broma. REST: no hay filas en el conjunto de resultados

No hay nada.Los sueños son duros.

Los inventores cuantifican - sueños pequeñosBien, prueba aquí.

Muñecas de heladoSí /upload/asset/101a198b65be7e8fe8487.png Sí /upload/asset/101a198b65be7e8fe8487.png Sí /upload/asset/101a198b65be7e8fe8487.png Sí /upload/asset/101a198b65be7e8fe8487.png Sí /upload/asset/101a198b65be7e8fe8487.png

Los inventores cuantifican - sueños pequeños¿Es esta la estrategia de la que hablas?

Los inventores cuantifican - sueños pequeñosHa-ha, la estrategia de tendencia en sí misma es decir, bueno, bueno, si el mercado tiene tendencias en el futuro, entonces es una estrategia de conmoción.

Los inventores cuantifican - sueños pequeñosNo es muy amable.

Hyc1743Muchas gracias.

Los inventores cuantifican - sueños pequeñosHola, esto se debe a que la marca BUY que se muestra en el gráfico es solo una señal de indicadores en el artículo, con una línea uniforme detrás. ¿Qué quieres decir? Las etiquetas de compra y venta. plotshape ((longCondition, title = "Buy Signal", text ="BUY", textcolor = color.white, style=shape.labelup, size = size.normal, location=location.belowbar, color = color.new(color.green, 0)) plotshape ((shortCondition, title = "Sell Signal", text ="SELL", textcolor = color.white, style=shape.labeldown, size = size.normal, location=location.abovebar, color = color.new(color.red, 0)) ¿Qué quieres decir? plotshape ((longCondition, title = "Buy Signal", text ="BUY Cuando se muestra el gráfico, solo se cumplen las condiciones de longCondition. En este apartado se incluyen las siguientes condiciones: ¿Qué quieres decir? Si compra Condición y estrategia. posición_tamaño == 0 La estrategia.entry (("largo", estrategia.largo, cantidad) "exit_long", "long", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) y el resultado final es el siguiente: Si vendemos Condición y estrategia. posición_tamaño == 0 La estrategia.entry (("short", estrategia.short, cantidad) "exit_short", "short", amount, loss=loss, trail_points=trailPoints, trail_offset=trailOffset) y también puede ser utilizado para la búsqueda de estrategias. ¿Qué quieres decir?

Nube ligeraNo es de extrañar, lo entiendo, gracias.

Los inventores cuantifican - sueños pequeñosline Este objeto no está soportado en FMZ por el momento, por lo que es posible que no se pueda cambiar. Algunas políticas utilizan este objeto para participar en los cálculos.

Los inventores cuantifican - sueños pequeñosEl tiempo de retrospección es demasiado largo y el exceso de datos debe ser el causante.

Los inventores cuantifican - sueños pequeñosHay capítulos con descripciones en el tutorial de la lengua pine, que puedes ver en: https://www.fmz.com/bbs-topic/9390#%E5%B8%A6%E8%B7%9F%E8%B8%AA%E6%AD%A2%E6%8D%9F%E6%AD%A2%E7%9B%88%E7%9A%84%E8%B6%85%E7%BA%A7%E8%B6%8B%E5%8A%BF%E7%AD%96%E7%95%A5

Nube ligeraBueno, si lo establezco en un año o 10 meses, básicamente lo puedo hacer, y después de un año tendré este consejo o un montón de otros.

Los inventores cuantifican - sueños pequeñosSin restricciones, este error debería ser demasiado largo para el tiempo de revisión.

Nube ligeraBueno, gracias, pero también, ¿hay un límite de tiempo para revisar el PINE? RuntimeError: abort(undefined) at Error at jsStackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:1:147), :1:2096171) at stackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:1:147), :1:2096345) at abort (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:147), :192x:1408) at stackTrace (eval at self.onmessage (https://www.fmz.com/scripts/worker_detours.393054f7.js:147), :2096171> at abort (eval at self.onmessage (https://www.fmz.fmz.com Sin embargo, si no se cambia el intervalo de tiempo, se vuelve a medir normalmente............................................................................................................................................................................................................................................

Los inventores cuantifican - sueños pequeñosPine debería ser capaz de diseñar un bloqueo más complejo, que no está disponible en el código de JS.

Los inventores cuantifican - sueños pequeñosEn la página web de la organización, se puede enviar una captura de imagen para ver los errores reportados.

Los inventores cuantifican - sueños pequeñosOh, lo siento, la dirección de la política está equivocada, se ha modificado.