Estrategia MACD de fuerza relativa


Fecha de creación: 2023-12-21 12:01:01 Última modificación: 2023-12-21 12:01:01
Copiar: 0 Número de Visitas: 633
1
Seguir
1623
Seguidores

Estrategia MACD de fuerza relativa

Descripción general

Esta estrategia se basa en dos indicadores famosos: el MACD y la fuerza relativa (RS). Al combinarlos, obtenemos una fuerte señal de compra. De hecho, lo especial de la estrategia es que deriva de un indicador a otro. Por lo tanto, construimos un MACD, cuya fuente es el valor de RS.

Principio de estrategia

El RS es un indicador que mide la diferencia entre la dinámica y la hipótesis de la eficiencia del mercado. Es usado por profesionales y es uno de los más robustos. Su idea es mantener activos que funcionan mejor que el promedio, en función de su rendimiento pasado.

RS = precio actual / precio más alto en la longitud RS

Por lo tanto, podemos comparar el precio actual con el precio más alto en el período definido por el usuario.

El MACD es uno de los indicadores más conocidos, y mide la distancia entre dos promedios móviles exponenciales: una línea rápida y otra más lenta. La mayor distancia representa mayor movimiento y viceversa.

Hay que tener en cuenta que las dos primeras medias móviles se construyeron usando los valores RS como sus fuentes. Por lo tanto, acabamos de construir otro indicador a partir de un indicador. Este método es muy poderoso porque se usa muy raramente y aporta valor a la estrategia.

Análisis de las ventajas

Esta estrategia combina los indicadores MACD y RS, que son muy fuertes por separado. El MACD es capaz de capturar tendencias y cambios de dinámica a corto plazo, mientras que el RS refleja la solidez de las tendencias a medio y largo plazo.

Además, la estrategia es muy única, ya que se ha mejorado creativamente la eficacia de la estrategia derivando el indicador MACD del indicador RS. Es muy probable que este diseño innovador genere ganancias adicionales, ya que pocos lo hacen.

Finalmente, la estrategia tiene un mecanismo de gestión de fondos y de alto riesgo que permite controlar el riesgo de manera efectiva y limitar las pérdidas de las transacciones individuales.

Análisis de riesgos

El mayor riesgo de esta estrategia reside en la posibilidad de que los indicadores RS y MACD emitan una señal errónea. A pesar de que ambos indicadores son sólidos, ningún indicador técnico puede predecir el futuro al 100%, y la señal puede fallar ocasionalmente. Además, el indicador RS en sí mismo prefiere el juicio de tendencias a mediano y largo plazo, y puede emitir señales engañosas en el corto plazo.

Para reducir el riesgo, se pueden ajustar los parámetros de RS y MACD para que se ajusten mejor a la variedad de transacciones y al entorno del mercado. También se pueden establecer límites de stop loss más estrictos. En general, el uso de stop loss para controlar las pérdidas individuales es la mejor manera de responder al riesgo de la estrategia.

Dirección de optimización

Primero, se puede probar en diferentes mercados (como acciones, divisas, criptomonedas, etc.) qué variedad de estrategia funciona mejor, y luego centrarse en la mejor variedad.

En segundo lugar, se puede intentar optimizar automáticamente los parámetros RS y MACD utilizando algoritmos de aprendizaje automático, en lugar de seleccionar manualmente los valores fijos. Esto podría mejorar considerablemente la adaptabilidad de los parámetros.

En tercer lugar, se puede considerar la posibilidad de agregar otros indicadores que participen en la creación de señales de transacción, la formación de modelos multifactoriales y la mejora de la precisión de la señal. Por ejemplo, la inclusión de indicadores de volumen de transacción.

Resumir

Esta estrategia utiliza MACD y RS para proporcionar una fuerte señal de compra. Lo innovador de esta estrategia es que se deriva de los indicadores MACD de los indicadores RS para lograr una combinación de indicadores y indicadores para mejorar la eficacia. La estrategia tiene un mecanismo claro de entrada, parada y administración de fondos que permite controlar el riesgo de manera efectiva.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © gsanson66


//This strategy calculates the Relative Strength and plot the MACD of this Relative Strenght
//We take only buy signals send by MACD
//@version=5
strategy("MACD OF RELATIVE STRENGHT STRATEGY", shorttitle="MACD RS STRATEGY", precision=4, overlay=false, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18, slippage=3)


//------------------------------TOOL TIPS--------------------------------//

t1 = "Relative Strength length i.e. number of candles back to find the highest high and compare the current price with this high."
t2 = "Relative Strength fast EMA length used to plot the MACD."
t3 = "Relative Strength slow EMA length used to plot the MACD."
t4 = "Macdline SMA length used to plot the MACD."
t5 = "The maximum loss a trade can incur (in percentage of the trade value)"
t6 = "Each gain or losse (relative to the previous reference) in an amount equal to this fixed ratio will change quantity of orders."
t7 = "The amount of money to be added to or subtracted from orders once the fixed ratio has been reached."


//----------------------------------------FUNCTIONS---------------------------------------//

//@function Displays text passed to `txt` when called.
debugLabel(txt, color, loc) =>
    label.new(bar_index, loc, text=txt, color=color, style=label.style_label_lower_right, textcolor=color.black, size=size.small)

//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)


//---------------------------------------USER INPUTS--------------------------------------//

//Technical parameters
rs_lenght = input.int(defval=300, minval=1, title="RS Length", group="Technical parameters", tooltip=t1)
fast_length = input(title="MACD Fast Length", defval=14, group="Technical parameters", tooltip=t2)
slow_length = input(title="MACD Slow Length", defval=26, group="Technical parameters", tooltip=t3)
signal_length = input.int(title="MACD Signal Smoothing",  minval=1, maxval=50, defval=10, group="Technical parameters", tooltip=t4)
//Risk Management
slMax = input.float(8, "Max risk per trade (in %)", minval=0, group="Risk Management", tooltip=t5)
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management", tooltip=t6)
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management", tooltip=t7)
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")


//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Relative Strenght Calculation
rs = close/ta.highest(high, rs_lenght)
//MACD of RS Calculation
[macdLine, signalLine, histLine] = ta.macd(rs, fast_length, slow_length, signal_length)
//Money management
equity = math.abs(strategy.equity - strategy.openprofit)
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na


//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//

//Checking if the date belong to the range
inRange := true

//Checking performances of the strategy
if equity > capital_ref + fixedRatio
    spread = (equity - capital_ref)/fixedRatio
    nb_level = int(spread)
    increasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder + increasingOrder
    capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
    spread = (capital_ref - equity)/fixedRatio
    nb_level = int(spread)
    decreasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder - decreasingOrder
    capital_ref := capital_ref - nb_level*fixedRatio

//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
    strategy.close_all()
    debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116), loc=macdLine)


//-----------------------------------EXIT SIGNAL------------------------------//

if strategy.position_size>0 and histLine<0
    strategy.close("Long")


//-------------------------------BUY CONDITION-------------------------------------//

if histLine>0 and not (strategy.position_size>0) and inRange
    qty = cashOrder/close
    stopLoss = close*(1-slMax/100)
    strategy.entry("Long", strategy.long, qty)
    strategy.exit("Exit Long", "Long", stop=stopLoss)


//---------------------------------PLOTTING ELEMENT----------------------------------//

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macdLine, title="MACD", color=color.blue)
plot(signalLine, title="Signal", color=color.orange)
plot(histLine, title="Histogram", style=plot.style_columns, color=(histLine>=0 ? (histLine[1] < histLine ? #26A69A : #B2DFDB) : (histLine[1] < histLine ? #FFCDD2 : #FF5252)))
plotchar(rs, "Relative Strenght", "", location.top, color=color.yellow)