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

El autor:Un sueño pequeño., Creado: 2022-10-09 15:56:22, Actualizado: 2023-09-15 20:50:38

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.

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.

Un sueño pequeño.Ha-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.

Un sueño pequeño.No es muy amable.

Hyc1743Muchas gracias.

Un sueño pequeño.Hola, 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.

Un sueño pequeño.line 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.

Un sueño pequeño.El tiempo de retrospección es demasiado largo y el exceso de datos debe ser el causante.

Un sueño pequeño.Hay 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.

Un sueño pequeño.Sin 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............................................................................................................................................................................................................................................

Un sueño pequeño.Pine debería ser capaz de diseñar un bloqueo más complejo, que no está disponible en el código de JS.

Un sueño pequeño.En la página web de la organización, se puede enviar una captura de imagen para ver los errores reportados.

Un sueño pequeño.Oh, lo siento, la dirección de la política está equivocada, se ha modificado.