Cette stratégie combine des indicateurs de moyenne mobile, de volume-prix et d'oscillation pour former des filtres triples, visant à capturer les tendances à moyen terme et à obtenir de bons rendements lors de tendances sur les marchés.
La stratégie est composée de trois éléments principaux:
Utilisez l'EMA à 20 jours et l'EMA à 60 jours pour construire un filtre de tendance. Un signal d'achat est généré lorsque le MA à court terme dépasse le MA à long terme. Un signal de vente est généré lorsque le MA à court terme dépasse le MA à long terme.
Utilisez le volume par rapport au chiffre d'affaires pour calculer l'indicateur de VP, en jugeant les directions des flux de capitaux.
Utilisez la largeur du canal de Donchian de 20 jours pour calculer le paramètre des bandes de Bollinger, formant des bandes supérieures et inférieures.
La combinaison des trois composants construit une stratégie de suivi de tendance. Elle génère des signaux d'achat lorsque le short MA franchit le long MA, que le VP est en tendance haussière et que le prix vient de quitter la bande supérieure. Les signaux de vente sont générés lorsque le short MA franchit le long MA, que le VP est en tendance baissière et que le prix vient de quitter la bande inférieure.
La stratégie présente les avantages suivants:
Les filtres à trois indicateurs aident à éviter les fausses pauses.
En tenant compte de la tendance, des flux de capitaux et des surachats/surventes améliore la fiabilité du signal.
Paramètres optimisés adaptés à différentes périodes et produits.
Des retraits contrôlables et des rendements stables.
Une logique claire et un réglage flexible des paramètres.
Il y a aussi des risques:
Les risques d'inversion de tendance Les changements de tendance peuvent entraîner un stop loss.
La VP est en retard sur les variations de prix et peut manquer les points d'entrée ou de sortie.
Les paramètres doivent être ajustés pour différents produits et délais.
Le contrôle de l'abattage doit être amélioré.
La stratégie peut être améliorée dans les domaines suivants:
Ajouter des méthodes de stop loss comme le trailing stop pour contrôler davantage les retraits.
Ajouter un module de dimensionnement des positions pour ajuster dynamiquement les tailles en fonction de la volatilité.
Optimiser les paramètres pour trouver les meilleurs ensembles pour différents produits et périodes.
Améliorer les modèles d'apprentissage automatique pour améliorer la précision du signal.
Incorporer l'analyse des sentiments et des nouvelles pour juger des événements soudains.
La stratégie combine les indicateurs MA, VP et Bollinger Band pour bien performer dans la capture des tendances à moyen terme. Des améliorations supplémentaires dans le stop loss, le dimensionnement des positions et le réglage des paramètres peuvent obtenir de meilleurs résultats. La logique est claire et les paramètres sont flexibles pour la personnalisation.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 29/04/2019 // This is combo strategies for get // a cumulative signal. Result signal will return 1 if two strategies // is long, -1 if all strategies is short and 0 if signals of strategies is not equal. // // First strategy // This System was created from the Book "How I Tripled My Money In The // Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies. // The strategy buys at market, if close price is higher than the previous close // during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. // The strategy sells at market, if close price is lower than the previous close price // during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50. // // Secon strategy // The Average Directional Movement Index Rating (ADXR) measures the strength // of the Average Directional Movement Index (ADX). It's calculated by taking // the average of the current ADX and the ADX from one time period before // (time periods can vary, but the most typical period used is 14 days). // Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening // and weakening trends. However, because it represents an average of ADX, values // don't fluctuate as dramatically and some analysts believe the indicator helps // better display trends in volatile markets. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// Reversal123(Length, KSmoothing, DLength, Level) => vFast = sma(stoch(close, high, low, Length), KSmoothing) vSlow = sma(vFast, DLength) pos = 0.0 pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1, iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) pos fADX(Len) => up = change(high) down = -change(low) trur = rma(tr, Len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur) sum = plus + minus 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len) ADXR(LengthADX, LengthADXR, Signal1, Signal2) => xADX = fADX(LengthADX) xADXR = (xADX + xADX[LengthADXR]) / 2 pos = 0.0 pos := iff(xADXR < Signal1, 1, iff(xADXR > Signal2, -1, nz(pos[1], 0))) pos strategy(title="Combo Backtest 123 Reversal and Average Directional Movement Index Rating", shorttitle="Combo", overlay = true) Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) LengthADX = input(title="Length ADX", defval=14) LengthADXR = input(title="Length ADXR", defval=14) Signal1 = input(13, step=0.01) Signal2 = input(45, step=0.01) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posADXR = ADXR(LengthADX, LengthADXR, Signal1, Signal2 ) pos = iff(posReversal123 == 1 and posADXR == 1 , 1, iff(posReversal123 == -1 and posADXR == -1, -1, 0)) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) 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 ? red: possig == 1 ? green : blue )