
Esta estrategia se llama estrategia de fluctuación de ATR de DEMA y EMA de corto plazo. La estrategia realiza una estrategia de negociación de línea corta eficiente mediante el cálculo de la señal de cruce de DEMA y EMA, combinada con el indicador de fluctuación de ATR.
Calcular el indicador DEMA. DEMA es el promedio móvil de doble EMA, que se puede filtrar eficazmente el ruido del mercado a corto plazo y mejorar la precisión de la señal mediante el cálculo de doble EMA en un período determinado.
El EMA es un índice de media móvil que permite reaccionar más rápidamente a los cambios en los precios.
El ATR es un indicador de la amplitud de fluctuación real, que puede reflejar la volatilidad del mercado y el nivel de riesgo. Cuando el ATR sube, representa una mayor volatilidad del mercado y es fácil que se forme un ajuste de línea corta.
Cuando DEMA se desvía por debajo de EMA, y la tasa de fluctuación ATR es mayor que el parámetro establecido, indica que el precio de las acciones comienza a caer, el mercado se extingue, y en este momento está en blanco.
Cuando el DEMA vuelve a pasar por el EMA, indica que el precio forma soporte y comienza a rebotar hacia arriba.
La combinación de doble EMA y EMA puede mejorar la precisión de la señal.
El índice de fluctuación ATR puede excluir señales de whipsaw de bajo riesgo.
La operación a corto plazo, adecuada para el seguimiento de líneas cortas, evita la cobertura a largo plazo.
La lógica de las transacciones es simple, clara, fácil de entender y de implementar.
Si no se ajusta correctamente el parámetro ATR, se puede perder la oportunidad de negociar.
Se debe prestar atención a las señales de ambos lados del aire libre, lo que dificulta la operación.
ffected by short-term market volatility.
Solución: Optimización de parámetros de prueba, ajuste de parámetros; simplificación de la lógica de negociación, centrándose sólo en señales unilaterales; ampliación adecuada de los límites de pérdida.
Optimizar los parámetros de DEMA y EMA para encontrar la combinación óptima de parámetros.
Optimización de los parámetros periódicos del ATR para determinar la mejor medida de la volatilidad del mercado.
La adición de otros indicadores auxiliares, como el canal BOLL, mejora la precisión de la señal.
Aumentar las reglas de stop loss y stop loss para asegurar ganancias más estables.
Esta estrategia utiliza los indicadores de volatilidad DEMA, EMA cruzado y ATR para construir una estrategia de negociación a corto plazo simple y eficiente. La lógica de negociación de la estrategia es clara, fácil de operar y se puede adaptar a la negociación de líneas cortas de alta frecuencia. El siguiente paso es la optimización de parámetros y la optimización de reglas, con la esperanza de obtener ganancias extras más estables.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
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/
// © Qorbanjf
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Qorbanjf
//@version=4
strategy("Qorban: DEMA/EMA & VOL Short ONLY", shorttitle="DEMA/EMA & VOL SHORT", overlay=true)
// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)
//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)
// get ATR VALUE
atr = atr(14)
//ATRP (Average True Price in precentage)
// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
slType = input(title="Stop Loss ATR / %", type=input.float, defval=5.0, step=0.1)
slMulti = input(title="SL Multiplier", type=input.float, defval=1.0, step=0.1)
minimumProfitPercent = input(title="Minimum profit %", type=input.float, defval=20.00)
// ATR Logic
// atrValue = atr(atrLookback)
// atrp = (atrValue/close)*100
// plot(atrp, color=color.white, linewidth=2, transp = 30)
atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100
// Moving Average Logic
ma(maType, src, length) =>
maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
// Determine percentage of open profit
var entry = 0.0
distanceProfit = low - entry
distanceProfitPercent = distanceProfit / entry
//Determin if we have a long entry signal OR a sell position signal
profitSignal = minimumProfitPercent == 0.0 or distanceProfitPercent >= minimumProfitPercent
shortSignal = crossunder(dema1, ema1) and atrp > maFilter and strategy.position_size == 0 and not na(atr)
exitSignal = profitSignal and strategy.position_size !=0 and crossover(dema1, ema1)
// === INPUT BACKTEST RANGE ===
//FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
//FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//FromYear = input(defval = 2017, title = "From Year", minval = 2000)
//ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//ToYear = input(defval = 9999, title = "To Year", minval = 2017)
//Invert trade direction & flipping
//tradInvert = input(defval = false, title = "invert trade direction")
//MOM_MR = input(defval=1, title = "MOM = 1 / MR = -1", minval=-1, maxval=1)
//plots=input(false, title="Show plots?")
// Get stop loss (in pips AND percentage distance)
shortStop = highest(high, 4) - (atr * slMulti)
shortStopPercent = close - (close * slMulti)
// Save long stop & target prices (used for drawing data to the chart & deetermining profit)
var shortStopSaved = 0.0
var shortTargetSaved = 0.0
enterShort = false
if shortSignal
shortStopSaved := slType ? shortStop : shortStopPercent
enterShort:= true
entry := close
// long conditions
//enterLong = crossover(dema1, ema1) and atrp < maFilter
//exitSignal => crossunder(dema1, ema1)
//Enter trades when conditions are met
strategy.entry("short", strategy.short, when=enterShort, comment="SHORT")
//place exit orders (only executed after trades are active)
strategy.exit(id="Short exit",
from_entry="short",
limit=exitSignal ? close : na,
stop=shortStopSaved,
when=strategy.position_size > 0,
comment="end short")
//short strategy
//goShort() => crossunder(dema1, ema1) and atrp > maFilter
//KillShort() => crossover(dema1, ema1)
//strategy.entry("SHORT", strategy.short, when = goShort())
//strategy.close("COVER", when = KillShort())