Esta estrategia utiliza el cruce de dos promedios móviles exponenciales (EMA) como señales de compra y venta. Cuando la EMA de período más corto cruza por encima de la EMA de período más largo desde abajo, genera una señal de compra; por el contrario, cuando la EMA de período más corto cruza por debajo de la EMA de período más largo desde arriba, genera una señal de venta. Además, la estrategia determina si el punto de cruce es el precio más alto o más bajo dentro de los últimos 10 períodos de negociación para confirmar la fuerza de la tendencia. Si el punto de cruce es el precio más alto, el fondo estará coloreado de verde; si es el precio más bajo, estará coloreado de rojo. Además, la estrategia muestra el precio del punto de cruce en el gráfico.
Esta estrategia utiliza cruces de promedios móviles exponenciales como su lógica central, al tiempo que considera la posición relativa del precio del punto de cruce en el período reciente para determinar la fuerza de la tendencia. En general, la lógica de la estrategia es clara y las ventajas son obvias, pero también tiene ciertas limitaciones y riesgos. Al introducir más indicadores de juicio auxiliares, establecer medidas razonables de control de riesgos y optimizar los parámetros clave, la estabilidad y rentabilidad de esta estrategia pueden mejorarse aún más.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ZenAndTheArtOfTrading // @version=5 strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Get user input emaLength1 = input.int(title="EMA #1 Length", defval=5) emaLength2 = input.int(title="EMA #2 Length", defval=10) // Get MAs ema1 = ta.ema(close, emaLength1) ema2 = ta.ema(close, emaLength2) // Draw MAs plot(ema1, color=color.blue, title="EMA 1") plot(ema2, color=color.red, title="EMA 2") // Detect crossovers bool crossOver = ta.crossover(ema1, ema2) bool crossUnder = ta.crossunder(ema1, ema2) bool cross = crossOver or crossUnder //float crossPrice = ta.valuewhen(cross, close, 0) float crossPrice = cross ? close : na // Check if the crossover price is the highest price over the past 10 bars bool highestPrice = crossOver for i = 1 to 10 if crossPrice <= close[i] highestPrice := false break // Check if the crossover price is the lowest price over the past 10 bars bool lowestPrice = crossUnder for i = 1 to 10 if crossPrice >= close[i] lowestPrice := false break // Flag the bar if it is a high/low close bgcolor(highestPrice ? color.new(color.green, 50) : na) bgcolor(lowestPrice ? color.new(color.red, 50) : na) // Display crossover price if cross highestEmaPrice = ema1 > ema2 ? ema1 : ema2 label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white) if highestPrice and strategy.position_size == 0 strategy.entry(id="Buy", direction=strategy.long) if lowestPrice and strategy.position_size == 0 strategy.entry(id="Sell", direction=strategy.short) // Exit trades when short-term EMA is breached if strategy.position_size > 0 and crossUnder strategy.close("Buy") if strategy.position_size < 0 and crossOver strategy.close("Sell")