
Cette stratégie, combinée à la théorie des indicateurs cycliques proposée par Ehlers, conçoit une stratégie de négociation du cycle d’Ells qui fluidifie les signaux de négociation. Cette stratégie peut filtrer efficacement le bruit du marché et produire des signaux de négociation plus fiables.
Le signal de prix original src est traité en second degré de lissage, ce qui donne un signal de lissage lisse.
Le cycle est calculé à partir du signal de lissage. La méthode de calcul est: cycle := (1 - .5 alpha) (1 - .5 alpha) (smooth - 2 smooth[1] + smooth[2]) + 2 (1 - alpha) cycle[1] - (1 - alpha) (1 - alpha) * cycle[2]
où α est le paramètre de lissage。
où α2 est le paramètre de lissage d’un degré.
Le second niveau de lissage des signaux de prix permet de filtrer efficacement le bruit de haute fréquence, rendant les signaux de négociation plus fiables.
L’application de la théorie des cycles d’Ells permet de déterminer plus précisément les points de conversion des tendances du marché.
L’indicateur de première phase filtre en douceur la partie du bruit de l’indicateur circulaire, produisant un signal de négociation plus fiable.
L’ensemble du processus stratégique est rationnel, scientifique, les paramètres ont beaucoup de place pour l’optimisation et les performances du disque sont excellentes.
Comme d’autres stratégies d’indicateurs techniques, cette stratégie est également sensible au risque systémique du marché. En cas d’événement majeur de Black Swan, des pertes importantes peuvent être générées.
Comme le processus de calcul est complexe, un paramètre incorrect peut entraîner des retards de calcul, ce qui affecte l’efficacité du disque dur. Des tests minutieux sont nécessaires pour s’assurer que le paramètre est scientifiquement raisonnable.
Le traitement de l’effet de levier peut également entraîner des retards dans les signaux de négociation, ce qui peut entraîner l’incapacité à saisir les points de basculement du marché à temps, ce qui entraîne une perte d’opportunité.
Il est possible de tester différents types d’algorithmes de lissage, tels que lissage à un degré, lissage linéaire, etc., pour trouver le meilleur plan de lissage.
Il est possible d’introduire des mécanismes d’ajustement des paramètres adaptatifs, afin d’ajuster les paramètres de manière dynamique en fonction des conditions du marché et d’améliorer la robustesse de la stratégie.
Il est possible de concevoir des stratégies de stop-loss et de stop-loss pour réduire le risque de perte individuelle tout en bloquant les bénéfices.
Les modèles d’apprentissage automatique peuvent être combinés avec d’autres modèles pour réaliser des combinaisons de modèles qui utilisent d’autres modèles pour filtrer les signaux de transaction.
Cette stratégie utilise la fluidité des signaux de prix et le calcul de l’indicateur du cycle d’Else pour concevoir une stratégie de négociation du cycle d’Else qui fluidifie les signaux de négociation. Cette stratégie permet de filtrer efficacement le bruit et de produire des signaux de négociation plus fiables.
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ehlers Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
src = input(hl2, title = "Source")
alpha = input(.07, title = "Alpha")
lag = input(9, title = "Lag")
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
cycle = na
if na(cycle[7])
cycle := (src - 2 * src[1] + src[2]) / 4
else
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2]
alpha2 = 1 / (lag + 1)
signal = na
signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1])
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
barsSinceEntry := 0
if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1]))
strategy.entry("Long", strategy.long)
barsSinceEntry := 0
if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1]))
strategy.entry("Short", strategy.short)
barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
strategy.close_all()
barsSinceEntry := 0
plot(0, title="ZeroLine", color=gray)
plotSrc = signal
cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue)
triggerPlot = plot(plotSrc[1], title = "Trigger", color = green)
fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)