Stratégie MACD de force relative


Date de création: 2023-12-21 12:01:01 Dernière modification: 2023-12-21 12:01:01
Copier: 0 Nombre de clics: 633
1
Suivre
1623
Abonnés

Stratégie MACD de force relative

Aperçu

Cette stratégie est basée sur deux indicateurs bien connus: le MACD et la force relative (RS). En les combinant, nous obtenons un signal de vente fort. En fait, la particularité de cette stratégie est qu’elle dérive d’un indicateur à un autre.

Principe de stratégie

RS est un indicateur de mesure de la dynamique et de l’anomalie entre les hypothèses d’efficacité du marché. Il est utilisé par les professionnels et est l’un des indicateurs les plus robustes. L’idée est de détenir des actifs qui ont une performance supérieure à la moyenne, en fonction de leur performance passée.

RS = prix actuel / prix le plus élevé sur la longueur de RS

Ainsi, nous pouvons comparer le prix actuel avec le prix le plus élevé de la période définie par l’utilisateur.

Le MACD est l’un des indicateurs les plus connus, il mesure la distance entre deux moyennes mobiles indicielles: une ligne rapide et une ligne plus lente. Plus la distance est large, plus le mouvement est grand, et vice versa. Nous tracerons la valeur de cette ligne de distance et l’appellerons la ligne macd.

Il est à noter que les deux premières moyennes mobiles ont été construites en utilisant les valeurs RS comme sources. Donc, nous venons de construire un indicateur à partir d’un autre. Cette méthode est très puissante car elle est rarement utilisée et apporte de la valeur à la stratégie.

Analyse des avantages

Cette stratégie combine les indicateurs MACD et RS, qui sont très puissants à eux seuls. Le MACD est capable de capturer les tendances et les changements de dynamique à court terme, tandis que le RS reflète la solidité des tendances à moyen et long terme. Leur utilisation en combinaison prend en compte à la fois des facteurs à court terme et des facteurs à long terme, ce qui rend les signaux d’achat plus fiables.

En outre, la stratégie est unique en ce qu’elle améliore de manière créative l’efficacité de la stratégie en dérivant l’indicateur MACD de l’indicateur RS. Cette conception innovante est susceptible d’apporter des gains supplémentaires, car peu de personnes le font.

Enfin, la stratégie a une gestion des fonds et un mécanisme de stop-loss qui permet de contrôler efficacement le risque et de limiter les pertes de transactions individuelles.

Analyse des risques

Le plus grand risque de cette stratégie réside dans la possibilité que les indicateurs RS et MACD émettent des signaux erronés. Bien que ces deux indicateurs soient solides, aucun indicateur technique ne peut prédire l’avenir à 100%, et les signaux peuvent parfois être inefficaces. De plus, l’indicateur RS lui-même est plus enclin à juger les tendances à moyen et long terme, et des signaux trompeurs peuvent apparaître à court terme.

Pour réduire le risque, il est possible d’ajuster les paramètres du RS et du MACD de manière à les rendre plus adaptés à la variété de transactions et à l’environnement du marché. Il est également possible de définir des marges d’arrêt plus strictes. En général, l’utilisation de l’arrêt pour contrôler les pertes simples est la meilleure façon de gérer le risque de la stratégie.

Direction d’optimisation

Tout d’abord, on peut tester différents marchés (comme les actions, les devises, les crypto-monnaies, etc.) pour voir quelles variétés de la stratégie fonctionnent le mieux, puis se concentrer sur les meilleures variétés.

Deuxièmement, il est possible d’essayer d’optimiser automatiquement les paramètres RS et MACD à l’aide d’algorithmes d’apprentissage automatique, plutôt que de choisir manuellement des valeurs fixes. Cela pourrait considérablement améliorer l’adaptabilité des paramètres.

Troisièmement, il est possible d’envisager d’ajouter d’autres indicateurs pour créer des signaux de transaction, de former des modèles multifactoriels et d’améliorer l’exactitude des signaux.

Résumer

Cette stratégie utilise les deux indicateurs MACD et RS pour fournir un signal d’achat puissant. Son innovation réside dans le fait que l’indicateur MACD est dérivé de l’indicateur RS, permettant la combinaison de l’indicateur et de l’indicateur, ce qui améliore l’efficacité. La stratégie dispose d’un mécanisme d’entrée, de stop-loss et de gestion des fonds clairement défini, permettant de contrôler efficacement les risques.

Code source de la stratégie
/*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)