En la carga de los recursos... Cargando...

Modelo de tres factores para la detección de oscilaciones de precios

El autor:¿ Qué pasa?, fecha: 2024-02-26 15:32:27
Las etiquetas:

img

Resumen general

El modelo de tres factores para la detección de oscilaciones de precios es una estrategia de negociación a corto plazo que integra múltiples factores para el juicio.

Estrategia lógica

La lógica central de esta estrategia es la siguiente:

  1. Calcular indicadores técnicos como el MA rápido, el MA lento, el MACD y la línea de señal;

  2. Juzgar las condiciones de múltiples factores, incluida la relación de volumen, el RSI, el MACD y la línea de señal;

  3. Confirmar la fase actual de oscilación de precios y las oportunidades de compra/venta basadas en el análisis de múltiples factores;

  4. Posiciones LONG o SHORT y establecimiento de operaciones de toma de ganancias y stop loss;

  5. Cierre las posiciones cuando el precio alcanza el take profit o stop loss.

Esta estrategia utiliza de manera flexible factores como la relación de volumen, el RSI, el MACD y la línea de señal para detectar oscilaciones de precios y capturar oportunidades a corto plazo.

Análisis de ventajas

Las ventajas de esta estrategia:

  1. La precisión se mejora gracias a múltiples factores y se evitan las falsas señales.
  2. Captar oportunidades a corto plazo de las oscilaciones de precios con un amplio margen de beneficio;
  3. Se establecerán automáticamente las operaciones de toma de ganancias y parada de pérdidas para controlar los riesgos;
  4. Lógica simple y clara, fácil de implementar.

Análisis de riesgos

Los riesgos de esta estrategia:

  1. El algoritmo se basa demasiado en datos históricos, sensibles a los cambios del mercado;
  2. El enfoque combinado de múltiples factores puede necesitar una mayor optimización, con posibilidad de error de juicio;
  3. El punto de stop loss afecta directamente a la estabilidad de la estrategia.

Para hacer frente a los riesgos anteriores, se pueden realizar optimizaciones en:

  1. Ampliar el ciclo de muestreo para reducir el impacto de los cambios en los datos de mercado;
  2. Ajustar los pesos entre los factores para lograr la optimización adaptativa;
  3. Prueba diferentes puntos de stop loss para encontrar la posición óptima.

Direcciones de optimización

Las principales direcciones de optimización:

  1. Optimizar dinámicamente las ponderaciones de los factores, que pueden ajustarse en función de las condiciones del mercado para mejorar la adaptabilidad;

  2. Introducir algoritmos de aprendizaje automático para lograr la optimización adaptativa de los factores.

  3. Optimizar las estrategias de stop loss. Se pueden probar diferentes combinaciones de seguimiento de stop loss y movimiento de stop loss para encontrar la mejor solución;

  4. Incorporar indicadores técnicos avanzados. Más indicadores como oscilación de volatilidad y oscilación de impulso pueden enriquecer los factores.

Conclusión

El modelo de tres factores para la detección de oscilaciones de precios utiliza plenamente las características de las oscilaciones de precios para implementar una estrategia comercial eficiente a corto plazo. Juzga los mejores puntos de entrada y salida basados en múltiples factores como volumen, RSI, MACD y línea de señal. Los múltiples factores mejoran la precisión y conducen a retornos constantes.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1.0)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1.0)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1.0)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Más.