Tendance MACD suivant une stratégie à court terme


Date de création: 2023-12-19 11:16:44 Dernière modification: 2023-12-19 11:16:44
Copier: 0 Nombre de clics: 605
1
Suivre
1621
Abonnés

Tendance MACD suivant une stratégie à court terme

Aperçu

La stratégie de suivi de la tendance de la courte ligne MACD est une stratégie de négociation de courte ligne combinant les moyennes mobiles, l’indicateur MACD et l’indicateur William. La stratégie utilise une combinaison différente de trois indicateurs pour former les conditions d’entrée et de sortie d’une position multi-voie afin de capturer les caractéristiques tendancielles du prix de la courte ligne.

Principe de stratégie

La logique de négociation principale de la stratégie est basée sur les points suivants:

  1. Il est préférable d’être prudent lorsque le prix est en hausse et de ne pas être prudent lorsque le prix est en baisse.

  2. Regardez plus lorsque la ligne rapide du MACD est supérieure à la ligne lente, et regardez moins lorsque la ligne rapide est inférieure à la ligne lente;

  3. L’indicateur William est plus élevé lorsque la moyenne mobile rapide est supérieure à la moyenne mobile lente, et moins élevé lorsque l’indicateur William est supérieur à la moyenne mobile lente.

  4. La combinaison de ces trois facteurs a été utilisée pour juger de l’admission.

  5. Il a été jugé à l’envers.

La combinaison de l’EMA pour déterminer la direction d’une tendance générale et du MACD pour déterminer la dynamique des prix à court terme permet à la stratégie de capturer les caractéristiques de la tendance des prix à de bons points d’entrée et ainsi de réaliser des bénéfices. L’indicateur William peut être utilisé pour vérifier davantage la survente des variétés et éviter les fausses ruptures.

Avantages stratégiques

Cette structure de combinaison multi-indicateurs est une stratégie typique de suivi de tendances en ligne courte, qui présente principalement les avantages suivants:

  1. Les trois indicateurs sont mutuellement vérifiables, ce qui réduit la probabilité de faux signaux.

  2. L’EMA a jugé la direction de la tendance dominante et le MACD a jugé la dynamique de la courte ligne forte et faible.

  3. L’indicateur William a évité de suivre les hauts et les bas lors de fortes fluctuations.

  4. Le jugement de sortie est associé à la gestion des risques.

Risque stratégique

La stratégie présente également les principaux risques suivants:

  1. La structure de la combinaison multi-indicateurs est complexe et les paramètres sont plus difficiles à optimiser.

  2. Les opérations de coupures sont fréquentes et les coûts de transaction peuvent être élevés.

  3. Il y a un risque de perte, car il n’est pas possible de juger correctement le point de basculement de la tendance.

La stratégie consiste principalement à rechercher la combinaison optimale de paramètres d’optimisation et de stop-loss, et à définir le niveau de stop-loss approprié pour contrôler la perte maximale d’une seule transaction.

Orientation de l’optimisation de la stratégie

La stratégie peut être optimisée principalement dans les domaines suivants:

  1. Il est possible de tester plus de combinaisons de paramètres d’indicateurs pour trouver les paramètres optimaux.

  2. En ajoutant d’autres sources de données, telles que le volume des transactions, pour aider à la prise de décision.

  3. mettre en place un arrêt dynamique ou un arrêt suivi pour renforcer la maîtrise des risques;

  4. Les modèles d’apprentissage automatique ont été utilisés pour déterminer le véritable point de basculement.

Résumer

La stratégie de suivi de courte ligne du MACD utilise plusieurs indicateurs pour déterminer la tendance de la courte ligne et contrôler les risques. Grâce à l’optimisation des paramètres, à la définition des niveaux d’arrêt et à l’introduction de plus de sources de données, il est possible d’améliorer encore la victoire de la stratégie et le niveau de rentabilité.

Code source de la stratégie
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
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/
// © platsn

//@version=5
strategy("MACD Willy Strategy", overlay=true, pyramiding=1, initial_capital=10000) 

// ******************** Trade Period **************************************
startY = input(title='Start Year', defval=2011, group = "Trading window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Trading window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Trading window")
finishY = input(title='Finish Year', defval=2050, group = "Trading window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Trading window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Trading window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
// t1 = time(timeframe.period, "0945-1545:23456") 
// window = time >= timestart and time <= timefinish and t1 ? true : false 
// t2 = time(timeframe.period, "0930-1555:23456")
// window2 = time >= timestart and time <= timefinish and t2 ? true : false 

leverage = input.float(1, title="Leverage (if applicable)", step=0.1, group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=20, title = "Reinvest percentage", group="Trading Options")
// entry_lookback = input.int(defval=10, title="Lookback period for entry condition", group = "Trading Options")

// -------------------------------------------- Data Source --------------------------------------------

src = input(title="Source", defval=close)

// ***************************************************************************************************** Daily ATR *****************************************************
atrlen = input.int(14, minval=1, title="ATR period", group = "Daily ATR")
iPercent = input.float(5, minval=1, maxval=100, step=0.1, title="% ATR to use for SL / PT", group = "Daily ATR")
 
percentage = iPercent * 0.01
datr = request.security(syminfo.tickerid, "1D", ta.rma(ta.tr, atrlen))
datrp = datr * percentage

// plot(datr,"Daily ATR")
// plot(datrp, "Daily % ATR")

//*********************************************************** VIX volatility index ****************************************

VIX = request.security("BTC_USDT:swap", timeframe.period, close)
vix_thres = input.float(20.0, "VIX Threshold for entry", step=0.5, group="VIX Volatility Index")

// ************************************************ Volume ******************************************************

vol_len = input(50, 'Volume MA Period')
avg_vol = ta.sma(volume, vol_len)

//-------------------------------------------------------- Moving Average ------------------------------------

emalen1 = input.int(200, minval=1, title='EMA', group= "Moving Averages")
ema1 = ta.ema(src, emalen1)

// ------------------------------------------ MACD ------------------------------------------
// Getting inputs
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// ---------------------------------------- William %R --------------------------------------
w_length = input.int(defval=34, minval=1)
w_upper = ta.highest(w_length)
w_lower = ta.lowest(w_length)

w_output = 100 * (close - w_upper) / (w_upper - w_lower)

fast_period = input(defval=5, title='Smoothed %R Length')
slow_period = input(defval=13, title='Slow EMA Length')

w_fast_ma = ta.wma(w_output,fast_period)
w_slow_ma = ta.ema(w_output,slow_period)



// ------------------------------------------------ Entry Conditions ----------------------------------------

L_entry1 = close > ema1 and hist > 0 and w_fast_ma > w_slow_ma 
S_entry1 = close < ema1 and hist < 0 and w_fast_ma < w_slow_ma 

// -------------------------------------------------- Entry -----------------------------------------------
strategy.initial_capital = 50000
profit = strategy.netprofit
trade_amount = math.floor(strategy.initial_capital*leverage / close) 

if strategy.netprofit > 0 and reinvest
    trade_amount := math.floor((strategy.initial_capital+(profit*reinvest_percent*0.01))*leverage / close) 
else
    trade_amount := math.floor(strategy.initial_capital*leverage/ close) 


if L_entry1 //and window
    strategy.entry("Long", strategy.long, trade_amount)

if S_entry1 //and window
    strategy.entry("Short", strategy.short, trade_amount)

// --------------------------------------------------- Exit Conditions -------------------------------------

L_exit1 = hist < 0 and w_fast_ma < w_slow_ma and w_fast_ma < -20
S_exit1 = hist > 0 and w_fast_ma > w_slow_ma and w_fast_ma > -80

// ----------------------------------------------------- Exit ---------------------------------------------

if L_exit1 //and window2
    strategy.close("Long")
    
if S_exit1 //and window2
    strategy.close("Short")

// if time(timeframe.period, "1530-1600:23456")
//     strategy.close_all()