Stratégie de trading d'oscillateur d'équilibre multifactoriel


Date de création: 2024-01-12 14:08:33 Dernière modification: 2024-01-12 14:08:33
Copier: 0 Nombre de clics: 663
1
Suivre
1617
Abonnés

Stratégie de trading d’oscillateur d’équilibre multifactoriel

Aperçu

La stratégie de trading sur un oscillateur d’équilibre multi-facteur est une stratégie de trading quantitative qui utilise de manière intégrée plusieurs signaux d’indicateurs techniques. Cette stratégie combine habilement l’énergie des indicateurs du taux de variation (ROC), de la force relative (RSI), du canal de marchandises (CCI), de l’indicateur William (%R) et de l’indicateur de direction moyenne (ADX) pour juger de la dynamique du marché et générer des signaux de trading en calculant un indicateur de fluctuation intégré.

Le plus grand avantage de cette stratégie réside dans la capacité de juger objectivement et systématiquement le marché et de rechercher les meilleurs moments d’entrée et de sortie. Lorsque la ligne de l’indicateur de la volatilité traverse la ligne de survente de 0,75, un signal d’achat est généré. Lorsque la ligne de l’indicateur de la volatilité traverse la ligne de survente de 0,25, un signal de vente est généré.

Principe de stratégie

Le cœur de la stratégie de trading de l’oscillateur d’équilibre multifacteur est le calcul d’un indicateur de fluctuation synthétique. Les étapes de calcul de l’indicateur sont les suivantes:

  1. Calculer les valeurs des indicateurs techniques individuels, y compris le taux de variation (ROC), le RSI, le CCI, l’indicateur William (%R) et l’indicateur de direction moyenne (ADX)

  2. normaliser les valeurs des différents indicateurs techniques dans la plage 0-1 afin de comparer

  3. Utilisez l’idée de la moyenne pondérée pour calculer la valeur d’un indicateur de volatilité synthétique. Chaque indicateur technique a un poids réglable, par défaut ROC 2, RSI 0,5, CCI 2, % R 0,5, ADX 0,5. Multipliez les valeurs de chaque indicateur normalisé par leur poids correspondant, additionnez-les et divisez par la somme des poids pour obtenir une valeur de volatilité synthétique dans la plage 0-1

  4. Un signal de transaction correspondant est généré lorsque cette fluctuation synthétique traverse les lignes de surachat et de survente correctement réglées.

On peut voir que cette stratégie utilise de manière flexible l’énergie de plusieurs indicateurs techniques pour juger de l’excès de marché et prendre des décisions de négociation par le biais d’une méthode systématique. Cela évite le bruit du marché causé par un seul indicateur technique et permet de maintenir la stabilité des décisions de négociation dans de nombreuses situations.

Avantages stratégiques

La stratégie de négociation d’un oscillateur d’équilibre multifacteur présente les avantages suivants:

  1. Fournir des méthodes d’analyse de marché objectives et systématiques. Utiliser plusieurs indicateurs techniques pour éviter les défauts d’un seul outil, tout en générant des signaux de négociation pratiques par des méthodes quantitatives.

  2. Les stratégies d’optimisation des entrées et des sorties. La prise de valeur précise et le traitement standardisé des indicateurs de volatilité fournissent une base quantitative pour juger du marché.

  3. La hauteur peut être personnalisée et ajustable. Les poids et les paramètres des indicateurs peuvent être ajustés en fonction du style de négociation individuel, pour s’adapter à différentes conditions de marché.

  4. Alerte de signaux en temps réel. Alerte sur les signaux d’achat et de sortie, afin de vous tenir au courant des dernières informations sur le marché.

  5. Rigoureuse rétro-analyse et optimisation. Avant la mise en service, les paramètres de la stratégie peuvent être jugés et optimisés par une rétro-analyse complète des données historiques, ce qui améliore l’efficacité de la guerre en direct.

Risque stratégique

Bien que la stratégie de négociation des oscillateurs d’équilibrage multi-facteurs présente de nombreux avantages, elle comporte des risques dans la pratique, principalement:

  1. Risque d’optimisation des paramètres. Si le poids de l’indicateur et la configuration des paramètres ne sont pas corrects, cela affectera l’efficacité du disque dur.

  2. Le risque de survente entre les zones de survente et d’achat est différent selon les circonstances. Le risque de survente entre les zones de survente et d’achat est différent selon les circonstances.

  3. Risque de dispersion de l’indicateur. Lorsqu’une partie de l’indicateur est dispersée, cela affecte le jugement de l’indicateur global. Il peut être envisagé de supprimer l’indicateur ou de réduire le poids.

  4. Les limites des modèles quantifiés. Tout modèle quantifié peut être inefficace dans certaines circonstances. L’opérateur doit toujours rester suffisamment conscient des risques.

Afin d’éviter les risques, il est nécessaire d’effectuer un retour d’expérience et une optimisation des paramètres avant le déploiement, de comprendre les limites de la stratégie, de suivre l’efficacité du déploiement, d’ajuster les paramètres ou les poids de manière flexible en fonction des circonstances. L’intervention humaine est également très importante si nécessaire.

Direction d’optimisation

Les stratégies de négociation des oscillateurs d’équilibrage multifonctionnel peuvent être optimisées de la manière suivante:

  1. Continuer d’enrichir les modèles multifactoriels. On peut envisager d’ajouter plus de différents types d’indicateurs techniques pour améliorer le jugement des modèles.

  2. Les modèles avancés tels que les réseaux neuronaux peuvent être entraînés à prévoir des indicateurs individuels et à extraire des caractéristiques implicites.

  3. Combiner les aspects fondamentaux et les aspects macro. Ajouter des facteurs fondamentaux tels que les données économiques, les rapports de performance pour juger de la situation du marché.

  4. L’adaptation des paramètres est utilisée. Les poids et paramètres des indicateurs sont ajustés dynamiquement en fonction de l’évolution de l’environnement du marché.

  5. Introduire des mécanismes de stop-loss. Définir des limites de stop-loss raisonnables et contrôler activement les pertes individuelles.

  6. Gestion intégrée des fonds. Adaptation de la taille des positions en fonction de la taille de la position, pour une gestion quantitative des fonds.

Résumer

Bien sûr, toute stratégie quantitative a ses limites, et c’est l’objectif de toutes les stratégies de poursuivre, en continuant à réévaluer, optimiser et mettre à jour, afin de pouvoir s’adapter à un environnement de marché plus complexe. Dans l’ensemble, la stratégie d’équilibre multi-facteur offre aux traders individuels une précieuse orientation et un point de repère sur le chemin de la quantification. Je suis convaincu qu’avec la maturation du modèle et du marché, la stratégie produira des performances plus brillantes.

Code source de la stratégie
/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche

//@version=5
strategy("Ultimate Balance Oscillator Strategy", overlay=true)

// Indicator Weights
weightROC = input.float(2, "Rate of Change (ROC) Weight", group="Weightings")
weightRSI = input.float(0.5, "Relative Strength Index (RSI) Weight", group="Weightings")
weightCCI = input.float(2, "Commodity Channel Index (CCI) Weight", group="Weightings")
weightWilliamsR = input.float(0.5, "Williams %R Weight", group="Weightings")
weightADX = input.float(0.5, "Average Directional Index (ADX) Weight", group="Weightings")

// ROC Settings
rocLength = input.int(20, "Length", minval=1, group="ROC")

// RSI Settings
rsiLength = input.int(14, "Length", minval=1, group="RSI")

// CCI Settings
cciLength = input.int(20, "Length", minval=1, group="CCI")

// Williams %R Settings
williamsRLength = input.int(14, "Length", minval=1, group="Williams %R")

// ADX Settings
adxLength = input.int(14, "ADX Length", minval=1, group="ADX")
adxDiLength = input.int(14, "DI Length", minval=1, group="ADX")

// Source
source_options = input.string("hlc3", "Source", options=["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"])

price_open = request.security(syminfo.tickerid, "D", open)
price_high = request.security(syminfo.tickerid, "D", high)
price_low = request.security(syminfo.tickerid, "D", low)
price_close = request.security(syminfo.tickerid, "D", close)
price_hl2 = request.security(syminfo.tickerid, "D", hl2)
price_hlc3 = request.security(syminfo.tickerid, "D", hlc3)
price_ohlc4 = request.security(syminfo.tickerid, "D", ohlc4)

get_source(source_option) =>
    price = price_close
    if source_option == "open"
        price := price_open
    else if source_option == "high"
        price := price_high
    else if source_option == "low"
        price := price_low
    else if source_option == "close"
        price := price_close
    else if source_option == "hl2"
        price := price_hl2
    else if source_option == "hlc3"
        price := price_hlc3
    else
        price := price_ohlc4
    price

src = get_source(source_options)

// Overbought/Oversold Levels
obLevel = input.float(0.75, "Overbought Level")
osLevel = input.float(0.25, "Oversold Level")

// Calculating the indicators
rocValue = ta.change(close, rocLength)
rsiValue = ta.rsi(close, rsiLength)
cciValue = (src - ta.sma(src, cciLength)) / (0.015 * ta.dev(src, cciLength))
williamsRValue = -100 * (ta.highest(high, williamsRLength) - close) / (ta.highest(high, williamsRLength) - ta.lowest(low, williamsRLength))

dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
    minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) =>
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

adxValue = adx(adxDiLength, adxLength)

// Normalizing the values
normalize(value, min, max) =>
    (value - min) / (max - min)

normalizedROC = normalize(rocValue, ta.lowest(rocValue, rocLength), ta.highest(rocValue, rocLength))
normalizedRSI = normalize(rsiValue, 0, 100)
normalizedCCI = normalize(cciValue, ta.lowest(cciValue, cciLength), ta.highest(cciValue, cciLength))
normalizedWilliamsR = normalize(williamsRValue, ta.lowest(williamsRValue, williamsRLength), ta.highest(williamsRValue, williamsRLength))
normalizedADX = normalize(adxValue, 0, 50)

// Calculating the combined oscillator line
oscillatorLine = (normalizedROC * weightROC + normalizedRSI * weightRSI + normalizedCCI * weightCCI + normalizedWilliamsR * weightWilliamsR + normalizedADX * weightADX) / (weightROC + weightRSI + weightCCI + weightWilliamsR + weightADX)

// Strategy conditions
enterLong = ta.crossover(oscillatorLine, obLevel)
exitLong = ta.crossunder(oscillatorLine, osLevel)

// Strategy orders
if (enterLong)
    strategy.entry("Buy", strategy.long)
if (exitLong)
    strategy.close("Buy")

// Alert conditions
if (enterLong)
    alert("Buy signal")
if (exitLong)
    alert("Exit signal")