MACD de la stratégie de résistance relative

Auteur:ChaoZhang est là., Date: 2023-12-21 12:01:01 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie est basée sur deux indicateurs bien connus: le MACD et la force relative (RS). En les couplant, nous obtenons des signaux d'achat puissants. En fait, la particularité de cette stratégie est qu'elle crée un indicateur à partir d'un indicateur. Ainsi, nous construisons un MACD dont la source est la valeur du RS. La stratégie ne prend que des signaux d'achat, ignorant les signaux de vente car ils sont principalement des perdants. Il existe également une méthode de gestion de l'argent qui nous permet de réinvestir une partie des profits ou de réduire la taille des ordres en cas de pertes substantielles.

La logique de la stratégie

RS est un indicateur qui mesure l'anomalie entre l'élan et l'hypothèse d'efficacité du marché. Il est utilisé par les professionnels et est l'un des indicateurs les plus robustes. L'idée est de posséder des actifs qui font mieux que la moyenne, en fonction de leur performance passée. Nous calculons RS en utilisant cette formule:

RS = Prix actuel / Prix le plus élevé au cours de la période de RS

Nous pouvons ainsi situer le prix actuel par rapport à son prix le plus élevé sur cette période définie par l'utilisateur.

Le MACD est l'un des indicateurs les plus connus, mesurant la distance entre deux moyennes mobiles exponentielles: l'une rapide et l'autre plus lente. Une distance large indique une dynamique rapide et vice versa. Nous tracerons la valeur de cette distance et appellerons cette ligne macdline. Le MACD utilise une troisième moyenne mobile avec une période inférieure aux deux premières. Cette dernière moyenne mobile donnera un signal lorsqu'elle traverse la macdline. Elle est donc construite en utilisant les valeurs de la macdline comme source.

Il est important de noter que les deux premières MAs sont construites en utilisant les valeurs RS comme source. Nous venons donc de construire un indicateur d'un indicateur.

Analyse des avantages

Cette stratégie combine deux indicateurs individuellement très puissants: MACD et RS. MACD est capable de capturer les tendances à court terme et les changements de momentum tandis que RS reflète la robustesse des tendances à moyen et long terme.

En outre, la stratégie est très unique en dérivant le MACD de l'indicateur RS, renforçant de manière créative l'effet de la stratégie.

Enfin, la stratégie comporte des mécanismes de gestion des risques et de stop loss qui contrôlent efficacement les risques et limitent les pertes par transaction.

Analyse des risques

Le plus grand risque de cette stratégie est la possibilité que les indicateurs RS et MACD donnent de mauvais signaux. Même si les deux indicateurs sont robustes, aucun indicateur technique ne peut prédire à 100% l'avenir et les signaux peuvent parfois échouer.

Pour réduire les risques, les paramètres de RS et MACD peuvent être ajustés pour mieux s'adapter à des instruments de trading spécifiques et à des environnements de marché.

Directions de renforcement

Tout d'abord, testez quel marché (par exemple, actions, forex, crypto, etc.) donne le meilleur effet de cette stratégie, puis concentrez-vous sur cet actif optimal.

Deuxièmement, essayez d'utiliser des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres RS et MACD au lieu de les fixer manuellement.

Troisièmement, envisager d'intégrer d'autres indicateurs pour établir des signaux de négociation, en formant un modèle multifactoriel pour améliorer la précision du signal.

Conclusion

Cette stratégie exploite les indicateurs MACD et RS de manière synergique pour fournir de forts signaux d'achat. Sa nouveauté réside dans la dérivation du MACD de l'indicateur RS, réalisant un couplage entre les indicateurs pour améliorer l'efficacité. La stratégie dispose de mécanismes d'entrée, de stop loss et de gestion de l'argent clairs qui contrôlent efficacement les risques. Les prochaines étapes pourraient être d'améliorer davantage la stratégie via l'optimisation des paramètres, le raffinement de la génération de signaux, l'ajout d'autres facteurs, etc.


/*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)

Plus de