Estrategia de negociación de reversión de impulso

El autor:¿ Qué pasa?, fecha: 2023-10-07 16:52:05
Las etiquetas:

Resumen general

Esta estrategia se basa en el concepto de negociación de inversión de impulso. Utiliza RSI, Stoch y MACD para determinar la dirección de la tendencia actual, y establece stop loss y take profit basados en ATR, para implementar una estrategia de negociación automatizada que puede capturar eficientemente las inversiones de tendencia.

La lógica de la negociación

La estrategia utiliza RSI, Stoch y MACD como tres indicadores para determinar la dirección de la tendencia actual.

  • RSI(7): RSI por encima de 50 indica una tendencia alcista, mientras que por debajo de 50 una tendencia bajista
  • Stoch ((%K, 14, 3, 3): %K por encima de 50 es tendencia alcista, por debajo de 50 es tendencia bajista
  • MACD ((12, 26, 9): MACD por encima de la línea de señal es tendencia alcista, por debajo es tendencia bajista

Cuando los tres indicadores son alcistas, el color de la barra se establece en verde. Cuando todos son bajistas, el color de la barra se establece en rojo. Si hay divergencia entre los indicadores, el color de la barra se establece en negro.

Las reglas del comercio son:

  • Cuando la barra actual es verde, y la barra anterior es negra o roja, ir largo.
  • Cuando la barra actual es roja y la barra anterior es negra o verde, corta. El precio de entrada está 0.01 por debajo del mínimo de la barra.
  • Si la barra se vuelve roja o negra durante una posición larga, cierre la operación larga.
  • Si la barra se vuelve verde o negra durante una posición corta, cierre la operación corta.

La estrategia también utiliza ATR (7). para establecer el stop loss y tomar ganancias.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El uso de múltiples indicadores para determinar la tendencia puede filtrar de manera efectiva las fallas falsas.

  2. Los paros y objetivos de ATR pueden ajustarse dinámicamente en función de las condiciones del mercado.

  3. Lógica simple y clara, fácil de entender y automatizar.

Análisis de riesgos

Los riesgos de esta estrategia incluyen:

  1. Los errores en los indicadores individuales pueden afectar el tiempo de entrada. Puede considerar ajustar parámetros o agregar más indicadores de confirmación para reducir errores.

  2. El tamaño del ATR afecta significativamente las paradas y los objetivos. El cálculo incorrecto del ATR puede resultar en paradas demasiado anchas o objetivos demasiado apretados. Puede agregar indicadores adicionales para confirmar el ATR.

  3. Falta de determinación de tendencias. Enfocado en la negociación de inversión, el análisis de tendencias insuficiente puede conducir a problemas en los mercados variados. Puede agregar indicadores de tendencias.

  4. Riesgo de sobreajuste: requiere una prueba posterior exhaustiva para verificar la robustez de los parámetros y las reglas.

Direcciones de mejora

Posibles mejoras para esta estrategia:

  1. Ajuste o adición de indicadores para mejorar la precisión en la determinación de los puntos de reversión, por ejemplo, añadir bandas de Bollinger para comprobar los niveles de sobrecompra/sobreventa.

  2. Optimización del cálculo del ATR para realizar un mejor seguimiento de la volatilidad, por ejemplo, utilizando ratios ATR/precio.

  3. Añadir indicadores de tendencia para evitar cambios en los mercados variables, por ejemplo, medias móviles.

  4. Optimización de la gestión del dinero, por ejemplo, ajuste del tamaño de las posiciones en función de la absorción.

  5. Optimización del período para probar la robustez en los marcos de tiempo.

  6. Más pruebas de retroceso en varios productos y períodos de tiempo para verificar la confiabilidad.

Resumen de las actividades

Esta estrategia está diseñada sobre la base de conceptos de reversión de impulso, utilizando el RSI, Stoch y MACD combo para identificar reversiones, con paradas y objetivos dinámicos de ATR. Forma un sistema de reversión de tendencia relativamente completo. Las ventajas incluyen lógica clara y paradas / objetivos razonables. Las deficiencias incluyen errores de señal y falta de filtros de tendencia. Se pueden hacer mejoras optimizando indicadores, agregando tendencias y ajustando el tamaño de la posición. Esto puede hacer que la estrategia sea más robusta.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © jwitt98
//The PowerX strategy - based on the rules outlined in the book "The PowerX Strategy: How to Trade Stocks and Options in Only 15 Minutes a Day" by Markus Heitkoetter

//@version=5
strategy("PowerX", overlay=true)
strategy.initial_capital = 50000
longEntry = "Enter long"
shortEntry = "Enter short"
longExit = "Exit long"
shortExit = "Exit short"

//*********************************Begin inputs*********************************

//get time range inputs and set time range bool
timeRangeGroup = "Select the trading range"
startDate = input(timestamp("1 Jan 2021 00:00 +0000"), "Start date", "Select the start date for the trading range", "", timeRangeGroup)
endDate = input(timestamp("1 Jan 2050 00:00 +0000"), "End date", "Select the end date for the trading range", "", timeRangeGroup)
isInTimeRange = true

//get long/short inputs
positionsAllowedGroup = "Select the direction(s) of trades to allow"
isLongsAllowed = input.bool(true, "Allow long positions", "Check the box if you want to allow long positions", "", positionsAllowedGroup)
isShortsAllowed = input.bool(true, "Allow short positions", "Check the box if you want to allow short positions", "", positionsAllowedGroup)

//get the stop loss and profit target multiples.  Per the PowerX rules the ratio shoud be 1:2.  1.5 and 3 are defaults
adrMultuplesGroup="Select the multipliers for the stop loss and profit targets"
stopLossMultiple = input.float(1.5, "Stop loss multiple", 0.1, 10, 0.1, "The ADR is multiplied by the stop loss multiple to calculate the stop loss", group=adrMultuplesGroup)
profitTargetMultiple=input.float(3.0, "Profit target multiple", 0.1, 10, 0.1, "The ADR is multiplied by the profit target multiple to calculate the profit target", group=adrMultuplesGroup)

//get the option to use the money management stategy or not.  This is a fixed ratio type management system
moneyManagementGroup="Money management"
isUsingMoneyManagement=input.bool(false, "Use money management", "Check the box if you want to use a fixed ratio type money management system, such as the type described in PowerX", group=moneyManagementGroup)
initial_riskPercent=input.float(2.0, "Percent risk per trade", .1, 100, .1, "The percentage of capital you want to risk when starting out.  This will increase or decrease base on the money management rules.  Only applicable if money managent is used", group=moneyManagementGroup)/100
isRiskDowsideLimited=input.bool(false, "Keep risk at or above the set point", "Check the box if you don't want the risk to fall below the set \"risk per trade\" percentage, for example, when your equity is underwater. Only applicable if money management is used", "", moneyManagementGroup)
initial_riskPerTrade=initial_riskPercent * strategy.initial_capital 
riskFactor = 0.0
currentProfit = 0.0
currentRisk = 0.0

//*********************************End inputs*********************************

//*********************************Begin money management*********************************

if(isUsingMoneyManagement)
    currentProfit := strategy.equity - strategy.initial_capital
    if(currentProfit < 0)
        currentProfit:=math.abs(currentProfit)
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := 1/riskFactor * initial_riskPercent * strategy.initial_capital
        if(isRiskDowsideLimited)
            currentRisk := initial_riskPerTrade
    else
        riskFactor := 0.5*(math.pow(1+8*currentProfit/(2*initial_riskPerTrade), 0.5)+1)
        currentRisk := riskFactor * initial_riskPercent * strategy.initial_capital
        
plot(strategy.equity, "Strategy equity")
plot(currentRisk, "Current risk")
plot(riskFactor, "Risk Factor")

//*********************************End money management*********************************


//*********************************Begin indicators*********************************
//4 indicators are used in this strategy, RSI(7), Stochastics(14, 3, 3), MACD(12, 26, 9), and ADR(7)

rsiVal = ta.rsi(close, 7)//this checks out
plot(rsiVal, "RSI(7)", color.lime)

stochKVal = ta.sma(ta.sma(ta.stoch(close, high, low, 14),3),3)//this formula checks out
plot(stochKVal, "Stoch %K", color.lime)

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(histLine, "MACD Hist", color.lime)

adr = ta.sma(high, 7) - ta.sma(low, 7)
plot(adr, "Average daily range", color.orange)


//*********************************End indicators*********************************

//*********************************Define the bar colors*********************************

greenBar = rsiVal > 50 and stochKVal > 50 and histLine > 0
redBar = rsiVal < 50 and stochKVal < 50 and histLine < 0
blackBar = not greenBar and not redBar

color currentBarColor = switch
    greenBar => color.green
    redBar => color.red
    blackBar => color.gray //because black is too hard to see in dark mmode
    => color.yellow
    
barcolor(currentBarColor)

//*********************************End defining the bar colors*********************************

//*********************************Define the entry, stop loss and profit target*********************************

longStopLimit = high + .01
longProfitTarget = high + (profitTargetMultiple * adr)
longStopLoss = high - (stopLossMultiple * adr)

shortStopLimit = low - .01
shortProfitTarget = low - (profitTargetMultiple * adr)
shortStopLoss = low + (stopLossMultiple * adr)

qtyToTrade= math.floor(currentRisk / (stopLossMultiple * adr))//only if using money management
if(qtyToTrade * high > strategy.equity)
    qtyToTrade := math.floor(strategy.equity / high)

//*********************************End defining stop loss and profit targets*********************************

//*********************************Execute trades, set rules, stop loss and profit targets*********************************

if (greenBar and not greenBar[1] and isInTimeRange and isLongsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(longEntry, strategy.long, qtyToTrade, limit=longStopLimit, stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, qtyToTrade, stop=longStopLimit)
    else
        strategy.order(longEntry, strategy.long, limit=longStopLimit,stop=longStopLimit)
        //strategy.order(longEntry, strategy.long, stop=longStopLimit)
    strategy.exit("Long limit/stop", from_entry=longEntry, limit=longProfitTarget, stop=longStopLoss)
    

if(blackBar or redBar)
    strategy.cancel(longEntry)
    strategy.close(longEntry, longExit)
    

if (redBar and not redBar[1] and isInTimeRange and isShortsAllowed)
    if(isUsingMoneyManagement)
        strategy.order(shortEntry, strategy.short, qtyToTrade, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, qtyToTrade, stop=shortStopLimit)
    else
        strategy.order(shortEntry, strategy.short, limit=shortStopLimit, stop=shortStopLimit)
        //strategy.order(shortEntry, strategy.short, stop=shortStopLimit)
    strategy.exit("Short limit/stop", from_entry=shortEntry, limit=shortProfitTarget, stop=shortStopLoss)

if(blackBar or greenBar)
    strategy.cancel(shortEntry)
    strategy.close(shortEntry, shortExit)
    

//*********************************End execute trades, set rules, stop loss and profit targets*********************************






















Más.