Stratégie de suivi de l'oscillation de la croix dorée à double EMA


Date de création: 2024-01-03 11:38:51 Dernière modification: 2024-01-03 11:38:51
Copier: 0 Nombre de clics: 591
1
Suivre
1621
Abonnés

Stratégie de suivi de l’oscillation de la croix dorée à double EMA

Aperçu

La stratégie de suivi des secousses de la double EMA Gold Cross est une stratégie qui utilise l’indicateur EMA pour identifier les tendances et les suivre dans les événements de secousses. Cette stratégie combine la pensée du suivi de la tendance et de la capture des secousses, en suivant les longues lignes dans les événements de force et en négociant les courtes lignes dans les événements de secousses, dans l’espoir d’obtenir de meilleurs rendements.

Principe de stratégie

La stratégie utilise une EMA de 20 cycles comme indicateur de tendance. Lorsque le prix atteint une EMA, le cours est considéré comme en hausse; lorsque le prix atteint une EMA, le cours est considéré comme en baisse.

Lorsque le prix est en EMA, le prix le plus élevé de 20 périodes plus élevées est utilisé comme arrêt, le prix le plus bas après le passage de l’EMA est utilisé comme arrêt de perte, faire plus d’entrée; lorsque le prix est en EMA, le prix le plus bas de 20 périodes plus bas est utilisé comme arrêt, le prix le plus élevé après le passage de l’EMA est utilisé comme arrêt de perte.

La stratégie détermine également si l’ADX est supérieur à 30. Les transactions ne sont effectuées que lorsque la tendance est suffisamment claire, c’est-à-dire lorsque l’ADX est supérieur à 30. Cela évite les arrêts de perte dans les situations de choc.

Pendant le processus de détention, le trail stop est ajusté en fonction de l’état du marché en temps réel, afin de bloquer plus de bénéfices.

Analyse des avantages

Cette stratégie combine les avantages du suivi des tendances et du trading sur les secousses, permettant d’obtenir des gains plus lucratifs dans des conditions de tendances, mais aussi des gains plus stables dans des conditions de secousses, avec une plus grande adaptabilité.

L’application de l’EMA réduit également les paramètres de la stratégie et réduit le risque de sur-optimisation, garantissant ainsi la stabilité de la stratégie.

Analyse des risques

Le risque principal de cette stratégie est que le stop-loss peut être plus important lorsque les secousses s’intensifient. Le rôle de l’ADX est alors mis en évidence.

En outre, il est essentiel de définir un point de rupture raisonnable. Un point de rupture trop grand peut augmenter les pertes individuelles; un point de rupture trop petit peut être trop sensible et augmenter la probabilité de rupture. Il faut trouver un équilibre entre l’objectif de profit et le risque de rupture.

Direction d’optimisation

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

  1. Sélection des cycles EMA. Vous pouvez tester plus de paramètres de cycle EMA pour trouver la meilleure combinaison de paramètres.

  2. Les paramètres de l’ADX peuvent être optimisés. Les cycles d’ADX et les seuils d’ADX peuvent être essayés avec différents paramètres.

  3. L’algorithme de stop-loss peut être amélioré par l’introduction de stop-loss dynamique.

  4. On peut envisager d’ajouter d’autres indicateurs, tels que KDJ, MACD, etc., pour former une stratégie de vérification multi-indicateurs.

Résumer

La stratégie de suivi des chocs croisés de l’or double EMA est une stratégie très pratique dans l’ensemble. Elle combine les caractéristiques de la stratégie de tendance et de la stratégie de choc et peut être utilisée pour le suivi des lignes longues et pour le trading des lignes courtes.

Code source de la stratégie
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Linda Raschke's Holy Grail", shorttitle="RHG", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
adxlen = input(14, title="ADX period")
adxMin = input(30)
dilen = adxlen
f_highest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] >= _value ? _src[_i] : _value
    _return = _value

f_lowest(_src, _length)=>
    _adjusted_length = _length < 1 ? 1 : _length
    _value = _src
    for _i = 0 to (_adjusted_length-1)
        _value := _src[_i] <= _value ? _src[_i] : _value
    _return = _value

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

emaLength = input(20)
curEma = ema(close, emaLength)
highPeriod = input(20)
d = na

takeProfitLong = highest(high, highPeriod) 
stopLossLong = f_lowest(low, barssince(low >= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or high < curEma 
        strategy.cancel("Long")
    if adx(dilen, adxlen) > adxMin and low < curEma and high > curEma and curEma > curEma[highPeriod / 2] and curEma > curEma[highPeriod] and takeProfitLong > high
        strategy.order("Long", strategy.long, stop = high)
        strategy.exit("Exit", "Long", limit = takeProfitLong, stop = stopLossLong)
        d := high

takeProfitShort = lowest(low, highPeriod) 
stopLossShort = f_highest(high, barssince(high <= curEma))

if strategy.position_size == 0
    if adx(dilen, adxlen) <= adxMin or low > curEma 
        strategy.cancel("Short")
    if adx(dilen, adxlen) > adxMin and high > curEma and low < curEma and curEma < curEma[highPeriod / 2] and curEma < curEma[highPeriod] and takeProfitShort < low
        strategy.order("Short", strategy.short, stop = low)
        strategy.exit("Exit", "Short", limit = takeProfitShort, stop = stopLossShort)
        d := low


strategy.close("Exit")

plot(d == high ? stopLossLong : d == low ? stopLossShort : na, style = circles, linewidth = 4, color = red)
plot(d == high ? takeProfitLong : d == low ? takeProfitShort : na, style = circles, linewidth = 4, color = green)
plot(d, style = circles, linewidth = 4, color = yellow)
plot(curEma, color = black, linewidth = 2)  

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()