
El modelo de tres factores para determinar la oscilación de los precios es una estrategia de negociación de corto plazo que combina varios factores. La estrategia toma en cuenta los factores de la relación de volumen de transacción, el indicador RSI, el indicador MACD y el indicador de la línea de señal para juzgar el comportamiento de la oscilación de los precios y descubrir oportunidades de negociación de corto plazo.
La lógica central de esta estrategia es la siguiente:
Calcular indicadores técnicos como promedios rápidos y promedios lentos, curvas MACD y líneas de señal;
Para determinar el ratio de transacción, el RSI, el MACD y el indicador de la línea de señal, se utilizarán los siguientes factores:
La evaluación de múltiples factores, que confirman que el momento actual es un período de fluctuación de los precios y que existen oportunidades de compra y venta;
Entra en una posición LONG o SHORT y establece un stop loss.
Cuando el precio alcanza el punto de parada o el punto de pérdida, se cierra la posición.
La estrategia utiliza la flexibilidad de la medición de múltiples factores, como el índice de fluctuación, el indicador RSI, el indicador MACD y el indicador de la línea de señal, para juzgar el comportamiento de la oscilación de los precios y capturar oportunidades de negociación en la línea corta. La combinación de varios factores evita las señales erróneas causadas por un solo factor y mejora la precisión de la señal.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene los siguientes riesgos:
Los riesgos mencionados pueden ser optimizados en los siguientes aspectos:
La estrategia se puede optimizar principalmente en los siguientes aspectos:
Optimización de la ponderación de múltiples factores, para lograr un ajuste dinámico. Se puede ajustar la ponderación de los juicios de múltiples factores en función de diferentes situaciones, para mejorar la adaptabilidad;
En combinación con algoritmos de aprendizaje automático, para lograr la optimización de la adaptación de múltiples factores. El uso de redes neuronales, algoritmos genéticos y otros algoritmos para entrenar modelos de múltiples factores, para lograr la optimización autónoma de los parámetros;
Optimización de la estrategia de detención de pérdidas. Puede probar diferentes combinaciones de seguimiento de pérdidas y movimiento de pérdidas para encontrar la mejor solución de detención de pérdidas.
Combinado con indicadores de alta tecnología, se pueden probar más indicadores como la oscilación de la tasa de fluctuación, la vibración de la dinámica y una combinación rica de múltiples factores.
La estrategia de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara de la cuchara
/*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)