
La estrategia utiliza el principio de la cruz de doble equilátero, combinado con el indicador ATR para establecer el stop loss, complementado con el control del tiempo de negociación, para diseñar un conjunto de estrategias adecuadas para los contratos de futuros de comercio diario. La estrategia es simple, clara, fácil de dominar y adecuada para el uso de los principiantes.
La estrategia utiliza el cruce de la línea media de WMA de 5 y 20 períodos como señal de entrada. Cuando la línea media de 5 períodos rompe la línea media de 20 períodos desde la parte inferior, hace más; cuando la línea media de 5 períodos cae desde la parte superior, hace vacío.
Además, la estrategia también utiliza el indicador ATR para establecer la posición de parada de pérdidas. El indicador ATR puede reflejar dinámicamente la amplitud de las fluctuaciones del mercado. La estrategia determina la posición de parada de pérdidas multiplicando el valor del indicador ATR por un múltiplo (por ejemplo, 3 veces) para controlar las pérdidas individuales.
Finalmente, la estrategia se limita a activar la señal de negociación solo en el horario de negociación estadounidense (09:00-14:30 CST). Esto evita la negociación en el horario de apertura y cierre, ya que estos dos períodos son más volátiles y propensos a la formación de señales falsas.
La estrategia tiene las siguientes ventajas:
El uso de un cruce de dos líneas equidistantes permite capturar con eficacia los puntos de inflexión de la tendencia y entrar en juego a tiempo.
Utilice las grandes tendencias para filtrar parte del ruido de las señales comerciales y evitar operaciones de contracorriente.
Aplicación de indicadores ATR para ajustar dinámicamente la posición de la parada de pérdidas y controlar eficazmente la pérdida individual.
Limitar el tiempo de negociación para evitar las fuertes fluctuaciones en los mercados de apertura y cierre.
Las reglas de la estrategia son sencillas, claras, fáciles de entender e implementar y son adecuadas para los principiantes.
Los parámetros personalizados, como el ciclo de la línea media, el multiplicador ATR, el período de negociación, etc., optimizan la estrategia.
La estrategia también tiene los siguientes riesgos:
En caso de temblor, puede haber más pérdidas.
El cruce de dos líneas equidistantes tendrá un cierto retraso, y puede que se pierda la brecha de la línea corta.
La configuración incorrecta de los parámetros de ATR puede causar pérdidas demasiado grandes o demasiado pequeñas.
La información básica es ignorada por los indicadores técnicos.
La estrategia se ve afectada por el tipo de transacción y el ciclo inapropiado.
Los sistemas de comercio automático corren el riesgo de ser objeto de arbitraje.
Los parámetros de los diferentes períodos de negociación necesitan ser ajustados.
Esto requiere mejoras mediante métodos como optimización de parámetros, combinación de indicadores e intervención manual adecuada.
La estrategia puede ser optimizada en los siguientes aspectos:
Pruebe con diferentes sistemas de línea uniforme, como EMA, DMA, etc.
Añadir filtros para otros indicadores técnicos, como MACD, RSI, etc.
Optimización de los parámetros ATR para hacer más razonable el stop loss.
Buscar puntos de entrada eficientes en combinación con los indicadores de volumen de operaciones.
Ajuste los parámetros según las características de las diferentes variedades.
Combinando los factores básicos, evitar las operaciones contrarias al mercado.
El uso de redes neuronales para la modelación de datos.
En este caso, la combinación de varios ciclos puede ser útil para explorar más oportunidades de comercio.
Construir una cartera de estrategias para mejorar la estabilidad.
La estrategia en su conjunto es bastante sencilla y convencional, adecuada para los principiantes en la práctica. Al mismo tiempo, hay mucho espacio para la optimización, se pueden introducir más indicadores técnicos o métodos de aprendizaje automático para perfeccionar. Además, los parámetros de ajuste de acuerdo con las diferentes características de la variedad de operaciones y el entorno del mercado también son fundamentales. En resumen, la estrategia proporciona un marco de referencia para los principiantes en el comercio cuantitativo, pero también requiere pruebas y optimización continuas en función de la situación real para obtener ganancias estables.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 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/
// © james4392010
//@version=4
strategy(title="DayTradingFutures Cross-Strategy", overlay=true)
// === GENERAL INPUTS ===
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
//highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
wmaFastSource = input(defval = close, title = "Fast WMA Source")
wmaFastLength = input(defval = 5, title = "Fast WMA Period")
wmaSlowSource = input(defval = close, title = "Slow WMA Source")
wmaSlowLength = input(defval = 20, title = "Slow WMA Period")
wmaDirectionSource = input(defval = close, title = "Trend 50 Period Source")
wmaDirectionLength = input(defval = 50, title = "Trend 50 Period")
timeinrange(res, sess) => time(res, sess) != 0
// === SERIES SETUP ===
/// a couple of ma's..
wmaFast = wma(close, 5)
wmaSlow = wma(close, 20)
wmaDirection = wma(close, 50)
// === PLOTTING ===
fast = plot(series=wmaFast, color=color.white, linewidth=2)
slow = plot(series=wmaSlow, color=color.yellow, linewidth=2)
direction = plot(series=wmaDirection, color=color.red, linewidth=2)
// === INPUT BACKTEST RANGE ===
//fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
//fromYear = input(defval = 2022, title = "From Year", minval = 2022)
// To Date Inputs
//toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//toYear = input(defval = 2022, title = "To Year", minval = 2022)
//startDate = timestamp(fromYear, fromMonth, fromDay)
//finishDate = timestamp(toYear, toMonth, toDay)
//inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear)
// === FUNCTION EXAMPLE ===
//inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear)
// === LOGIC ===
enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430")
enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430")
//trend := nz(trend[1], trend)
//trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
//upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = enterLong
//plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green)
plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)
//dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = enterShort
//plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red)
plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)
//mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
//longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
//shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
//fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
//fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="Buy", message="Buy!")
alertcondition(sellSignal, title="Sell", message="Sell!")
//changeCond = trend != trend[1]
//alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")
// Entry for strategy //
//tp=input(25,title="TakeProfit")
//sl=input(40,title="StopLoss")
strategy.entry("Long",1, when=buySignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
strategy.entry("Short",1, when=sellSignal)
//strategy.exit("Exit",profit=tp,loss=sl)
//strategy.exit("TakeProfit",profit=tp)
//strategy.exit("StopLoss",loss=sl)
//strategy.exit("Exit", wmaFastwmaSlow)
//Buy and Sell Signals
//strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430"))
// === FILL ====
fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red)
//fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area")
//fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area")
//fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")