Stratégie EMA adaptative à retard zéro

Auteur:ChaoZhang est là., Date: 2023-09-08 16h24:02
Les étiquettes:

Le script que vous avez fourni est basé sur la stratégie Adaptive Zero Lag EMA (AZLEMA). Ce script utilise les principes de la recherche sur le traitement des signaux de John Ehlers et une méthode connue sous le nom de Cosine Instantaneous Frequency Measurement (IFM) pour déterminer la période de cycle dominante, c'est-à-dire la durée entre deux points identiques dans des cycles successifs dans vos données de trading.

Voici un bref aperçu de ce que fait le script de trading:

  1. Au début, il définit la stratégie en utilisant une configuration d'entrées par défaut telles que la période, le mode adaptatif, la limite de gain, le seuil, les points de stop-loss et les points de profit.

  2. Il établit ensuite des calculs pour le mode adaptatif en utilisant une combinaison d'équations différentielles et de la méthode Ehlers (utilisée lorsque le paramètre Adaptive? est réglé sur vrai).

  3. Il calcule la valeur moyenne (EMA) de la source de données sélectionnée sur la période sélectionnée.

  4. Il effectue une opération de boucle pour trouver les valeurs de corrélation de gain et d'erreur (EC) qui minimisent l'erreur absolue.

  5. À l'aide de ces valeurs, il calcule la valeur EC finale et trace sur le graphique la valeur EC et EMA.

  6. Il crée des conditions d'achat et de vente potentielles basées sur le croisement entre la CE et l'EMA au-dessus d'un certain seuil défini.

  7. Il établit des règles pour entrer et sortir des positions longues et courtes en fonction des conditions d'achat et de vente déterminées précédemment. Pour chaque position, il calcule la taille du lot et entre dans une position lorsque la condition respective (achat / vente) est vraie. Il définit un stop loss et un profit de suivi pour chaque position.

Ce script semble assez complet et polyvalent car il vous permet de modifier plusieurs paramètres pour vous adapter à différents styles de trading et conditions de marché.


/*backtest
start: 2023-08-08 00:00:00
end: 2023-09-07 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA", shorttitle="AZLEMA", overlay = true, initial_capital=1000, currency="USD", commission_type=strategy.commission.cash_per_contract, commission_value=0.000005, slippage = 5, pyramiding=1, calc_on_every_tick=true)

src = input(title="Source",  defval=close)
Period = input(title="Period", defval = 20)
adaptive = input(title="Adaptive?", defval=true)
GainLimit = input(title="Gain Limit",  defval = 15)
Threshold = input(title="Threshold",  defval=0.03, step=0.01)
fixedSL = input(title="SL Points", defval=50)
fixedTP = input(title="TP Points", defval=10)
risk = input(title='Risk', defval=0.01, step=0.01)

PI = 3.14159265359
s2 = 0.0
s3 = 0.0
delta = 0.0
inst = 0.0
len = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

//IF adaptive is true, use the Cosine IFM strategy for determining the dominant
//cycle period
if(adaptive)
    v1 := src - src[7]
    s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
    s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
    if (s2 != 0)
        v2 := sqrt(s3/s2)
    if (s3 != 0)
        delta := 2*atan(v2)
    for i = 0 to 100
        v4 := v4 + delta[i]
        if (v4 > 2*PI and inst == 0.0)
            inst := i - 1
    if (inst == 0.0)
        inst := inst[1]
    len := 0.25*inst + 0.75*nz(len[1])
    Period := round(len)

LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold

if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

Plus de