
Cette stratégie utilise une combinaison de deux indicateurs: la moyenne mobile à double exponentiel (DEMA) et le filtre à bande passante (BPF) pour contourner les doubles filtres de survente et de survente et créer un signal de transaction stable pour maximiser les bénéfices.
Cette stratégie est composée de deux sous-stratégies:
L’indicateur utilise les moyennes mobiles binaires du 2e et du 20e jour pour former des signaux d’achat et de vente de fourches dorées. L’indicateur filtre une partie du bruit des prix et est utile pour détecter les tendances.
L’indicateur BPF combine une transformation mathématique pour détecter les composantes qui se déplacent dans le prix, formant une zone de survente et de survente au cours d’un cycle donné, émettant un signal de transaction. La stratégie est définie sur un cycle de 20 jours, avec un paramètre de normalisation de 0,5 .
L’utilisation de ces deux éléments en combinaison permet d’obtenir des signaux de courtage à plusieurs niveaux, ce qui signifie que les facteurs tendanciels et cycliques sont vérifiés, ce qui donne une plus grande fiabilité et donc des points d’entrée et de sortie plus stables.
Le plus grand avantage de cette stratégie réside dans le double filtrage de l’indicateur, qui rend le signal plus stable et plus fiable. DEMA pour lisser les prix, identifier la direction de la tendance; BPF pour identifier les caractéristiques du cycle, identifier les zones de survente et de survente. La vérification croisée des deux peut réduire considérablement la probabilité de faux signaux générés par le bruit des prix et l’ajustement cyclique.
En outre, la stratégie elle-même est peu fréquente, ce qui évite la perte de fonds et de frais de traitement des transactions excessives. La durée de la position est dominée par la ligne moyenne et longue, ce qui permet d’éviter les fluctuations aléatoires.
Le plus grand risque de cette stratégie est de mal interpréter l’état du marché. En cas de choc, il est facile de générer des signaux erronés; les arrêts peuvent être plus importants en cas de reprise de la tendance. De plus, les problèmes de paramètres peuvent également avoir une grande influence sur la performance de la stratégie.
Ces risques peuvent être contrôlés et améliorés en optimisant les paramètres de l’indicateur, en définissant un stop-loss et en les combinant avec d’autres indicateurs. Lorsqu’il est jugé que le marché est entré dans une phase de choc et de changement de mains, il peut être envisagé de suspendre la stratégie pour éviter les interférences de situations défavorables.
Cette stratégie peut être optimisée dans les domaines suivants:
Optimisation des cycles de temps. Tester différents paramètres DEMA et BPF pour déterminer la meilleure combinaison de cycles.
Augmenter le paramètre de stop-loss. Régler raisonnablement l’amplitude de stop-loss pour éviter l’expansion des pertes.
Ajoutez des filtres pour d’autres indicateurs tels que le volume, le MACD, etc. pour éviter que le signal ne soit induit en erreur par une grande quantité de jeux de réduction de position.
Optimisation de l’adaptation des paramètres. Les paramètres de DEMA et de BPF peuvent être ajustés dynamiquement en fonction des dernières conditions du marché, garantissant ainsi l’actualité des indicateurs.
La stratégie intègre les avantages des deux indicateurs EMA et BPF, le double filtrage améliore la qualité du signal et la recherche d’un bénéfice moyen et stable. Le risque provient principalement de l’erreur de jugement de l’état du marché et du paramètre incorrect. Par le biais de la vérification multi-indicateurs, des paramètres d’optimisation dynamique, etc., la stratégie peut être rendue plus flexible et adaptable, et son coût est plus élevé.
/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 05/04/2022
// This is combo strategies for get a cumulative signal.
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// The related article is copyrighted material from
// Stocks & Commodities Mar 2010
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
pos = 0.0
xPrice = close
xXA = ta.ema(xPrice, Length)
nHH = math.max(high, high[1])
nLL = math.min(low, low[1])
nXS = nLL > xXA or nHH < xXA ? nLL : nHH
iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
pos := nXS > close[1] ? -1 : iff_1
pos
BPF(Length,Delta,SellZone,BuyZone) =>
pos = 0.0
xPrice = hl2
beta = math.cos(3.14 * (360 / Length) / 180)
gamma = 1 / math.cos(3.14 * (720 * Delta / Length) / 180)
alpha = gamma - math.sqrt(gamma * gamma - 1)
BP = 0.0
BP := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(BP[1]) - alpha * nz(BP[2])
pos:= BP > SellZone ? 1 :
BP <= BuyZone? -1 : nz(pos[1], 0)
pos
strategy(title='Combo 2/20 EMA & Bandpass Filter', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bandpass Filter ═════●'
LengthBPF = input.int(20, minval=1, group=I2)
Delta = input(0.5, group=I2)
SellZone = input.float(5, step = 0.01, group=I2)
BuyZone = input.float(-5, step = 0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBPF = BPF(LengthBPF,Delta,SellZone,BuyZone)
iff_1 = posEMA20 == -1 and prePosBPF == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBPF == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
strategy.entry('Long', strategy.long)
if possig == -1
strategy.entry('Short', strategy.short)
if possig == 0
strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)