
La stratégie de cycle aléatoire d’Ellis est une stratégie de trading quantitative qui utilise l’indicateur de cycle aléatoire d’Ellis pour générer des signaux de négociation. La stratégie combine les avantages des indicateurs aléatoires et des indicateurs cycliques pour saisir les opportunités cycliques du marché.
La stratégie consiste d’abord à construire un indicateur de cycle lissé, puis à construire une valeur d’indicateur aléatoire basée sur cet indicateur. La production d’un signal de transaction est déterminée en fonction du croisement de la moyenne mobile de cette valeur d’indicateur aléatoire.
Plus précisément, le calcul de l’indicateur de la période lisse est le suivant:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
Le src est une donnée de prix entrée, comme le prix de clôture. L’indicateur combine le prix actuel et le prix des 3 périodes précédentes pour créer un signal cyclique lisse.
Sur la base de cet indicateur lissé, on peut alors calculer le cycle de l’indicateur aléatoire:
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *
(smooth - 2 * smooth[1] + smooth[2]) +
2 * (1 - alpha) * cycle[1] -
(1 - alpha) * (1 - alpha) * cycle[2]
La formule de calcul contient les différentiels de phase deux du signal périodique après l’aplatissement, ainsi que les valeurs des deux périodes précédentes. α est le facteur d’aplatissement, qui régule le poids de la nouvelle et de l’ancienne valeur périodique.
Finalement, on calcule une valeur aléatoire de 0 à 100 en fonction de cet indicateur de cycle, et on construit une valeur de signal en fonction de la moyenne mobile sur 10 jours de la valeur 1. Le signal de transaction est émis lorsque le signal dépasse ou dépasse la moyenne mobile de la valeur 1.
Cette stratégie combine les avantages de l’indicateur aléatoire et de l’indicateur cyclique. Par rapport aux stratégies de tendance telles que les moyennes mobiles simples, cette stratégie permet de mieux saisir les opportunités cycliques, ce qui donne de meilleurs résultats.
Les principaux avantages sont:
La stratégie présente principalement les risques suivants:
Le risque peut être contrôlé par des paramètres d’optimisation, la définition d’un point de rupture et la combinaison d’autres indicateurs de filtrage.
Cette stratégie peut également être optimisée dans les directions suivantes:
La stratégie de cycle aléatoire d’Elles utilise les avantages de l’utilisation combinée d’indicateurs aléatoires et d’indicateurs cycliques, permettant de contrôler efficacement le risque grâce à une conception de double signal, permettant d’obtenir de meilleurs rendements dans des marchés plus cycliques. En étant optimisée, la stratégie peut devenir une stratégie de trading quantitative recommandée.
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ehlers Stochastic 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
len = input(8, title = "Stochastic len")
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]
value1 = stoch(cycle, cycle, cycle, len) / 100
value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5)
signal = value2
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)