Estratégia MACD de Força Relativa


Data de criação: 2023-12-21 12:01:01 última modificação: 2023-12-21 12:01:01
cópia: 0 Cliques: 633
1
focar em
1623
Seguidores

Estratégia MACD de Força Relativa

Visão geral

Esta estratégia é baseada em dois indicadores famosos: MACD e força relativa ((RS)). Ao combiná-los, obtemos um forte sinal de compra. Na verdade, a peculiaridade da estratégia é que ela deriva outro indicador de um indicador.

Princípio da estratégia

O RS é um indicador que mede a diferença entre a dinâmica e a eficácia do mercado. É usado por profissionais e é um dos indicadores mais robustos. A ideia é manter ativos que tenham um desempenho superior à média, com base no seu desempenho no passado.

RS = preço atual / preço mais alto em RS

Assim, podemos comparar o preço atual com o preço mais alto no período definido pelo usuário.

O MACD é um dos indicadores mais conhecidos, que mede a distância entre duas médias móveis exponenciais: uma linha rápida e uma linha mais lenta. Quanto mais larga a distância, maior a quantidade de movimento, e vice-versa. Vamos traçar o valor dessa linha de distância e chamá-lo de linha macd. O MACD usa uma terceira média móvel menor que as duas anteriores.

Note-se que as duas primeiras médias móveis foram construídas usando o valor RS como sua fonte. Assim, acabamos de construir outro indicador a partir de um indicador. Esta abordagem é muito poderosa, pois raramente é usada e traz valor para a estratégia.

Análise de vantagens

Esta estratégia combina MACD e RS, dois indicadores que são muito fortes separadamente. O MACD é capaz de capturar tendências de curto prazo e mudanças de dinâmica, enquanto o RS reflete a solidez de tendências de médio e longo prazo. Usá-los em combinação, levando em consideração fatores de curto prazo e de longo prazo, torna os sinais de compra mais confiáveis.

Além disso, a estratégia é muito única, criativamente aumentando a eficácia da estratégia derivando o indicador MACD do indicador RS. Esse design inovador provavelmente trará lucros extras, pois poucas pessoas fazem isso.

Finalmente, a estratégia possui um mecanismo de gestão de fundos e de stop loss que permite controlar eficazmente o risco e limitar as perdas de cada transação.

Análise de Riscos

O maior risco da estratégia é a possibilidade de que os indicadores RS e MACD emitam sinais errados. Embora ambos sejam robustos, nenhum indicador técnico pode prever o futuro a 100% e os sinais podem falhar ocasionalmente. Além disso, o indicador RS, por si só, é mais propenso a julgar tendências de médio e longo prazo e pode apresentar sinais enganosos no curto prazo.

Para reduzir o risco, os parâmetros do RS e do MACD podem ser adequadamente ajustados para que sejam mais adequados para a variedade de negociação específica e o ambiente do mercado. Além disso, pode-se definir um limite de perda mais rigoroso. Em geral, o uso de stop loss para controlar os perdas individuais é a melhor maneira de lidar com o risco dessa estratégia.

Direção de otimização

Em primeiro lugar, é possível testar em diferentes mercados (como ações, divisas, criptomoedas, etc.) qual a variedade que melhor funciona com a estratégia e, em seguida, concentrar-se na melhor variedade.

Em segundo lugar, pode-se tentar otimizar automaticamente os parâmetros RS e MACD usando algoritmos de aprendizagem de máquina, em vez de selecionar manualmente valores fixos. Isso pode aumentar consideravelmente a adaptabilidade dos parâmetros.

Em terceiro lugar, pode-se considerar a adição de outros indicadores para a construção de sinais de transação, a formação de modelos multifatores e a melhoria da precisão dos sinais. Por exemplo, a adição de indicadores de volume de transação.

Resumir

Esta estratégia combina MACD e RS para fornecer um forte sinal de compra. Sua inovação é derivar o indicador MACD do indicador RS, combinando o indicador com o indicador, aumentando a eficácia. A estratégia possui um mecanismo de entrada, parada e gerenciamento de fundos claro, que pode controlar o risco de forma eficaz.

Código-fonte da estratégia
/*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)