Modèle à trois facteurs pour la détection des oscillations de prix

Auteur:ChaoZhang est là., Date: 2024-02-26 15h32 et 27h
Les étiquettes:

img

Résumé

Le modèle à trois facteurs pour la détection des oscillations de prix est une stratégie de trading à court terme qui intègre plusieurs facteurs pour le jugement.

La logique de la stratégie

La logique de base de cette stratégie est la suivante:

  1. Calculer les indicateurs techniques tels que l'AM rapide, l'AM lent, le MACD et la ligne de signal;

  2. Évaluer les conditions de plusieurs facteurs, y compris le ratio de volume, le RSI, le MACD et la ligne de signal;

  3. Confirmer l'étape actuelle de l'oscillation des prix et les opportunités d'achat/de vente sur la base d'une analyse de plusieurs facteurs;

  4. Prendre des positions longues ou courtes et fixer des positions de prise de bénéfices et de stop loss;

  5. Fermez les positions lorsque le prix atteint le profit ou le stop loss.

Cette stratégie utilise de manière flexible des facteurs tels que le ratio de volume, le RSI, le MACD et la ligne de signal pour détecter les oscillations de prix et saisir les opportunités à court terme.

Analyse des avantages

Les avantages de cette stratégie:

  1. Plusieurs facteurs améliorent la précision et évitent les faux signaux;
  2. Capturer les opportunités à court terme découlant des fluctuations des prix avec une marge de profit importante;
  3. Les risques de prise de bénéfices et de stop-loss sont réglés automatiquement pour contrôler les risques;
  4. Une logique simple et claire, facile à mettre en œuvre.

Analyse des risques

Les risques de cette stratégie:

  1. L'algorithme repose trop sur des données historiques, sensibles aux changements du marché;
  2. L'approche combinée de plusieurs facteurs peut nécessiter une optimisation supplémentaire, avec possibilité d'erreur de jugement;
  3. Le point de stop loss affecte directement la stabilité de la stratégie.

Pour faire face aux risques susmentionnés, des optimisations peuvent être apportées:

  1. Élargir le cycle d'échantillonnage pour réduire l'impact des changements de données du marché;
  2. Ajuster les poids entre les facteurs pour obtenir une optimisation adaptative;
  3. Testez différents points de stop-loss pour trouver la position optimale.

Directions d'optimisation

Les principales orientations d'optimisation:

  1. Optimiser dynamiquement les pondérations des facteurs, qui peuvent être ajustées en fonction des conditions du marché pour améliorer l'adaptabilité;

  2. Introduire des algorithmes d'apprentissage automatique pour obtenir une optimisation adaptative des facteurs. Des algorithmes tels que les réseaux neuronaux et les algorithmes génétiques peuvent être utilisés pour former le modèle et optimiser les paramètres;

  3. Optimiser les stratégies d'arrêt de perte. Différentes combinaisons de suivi de l'arrêt de perte et d'arrêt de perte en mouvement peuvent être testées pour trouver la meilleure solution;

  4. Incorporer des indicateurs techniques avancés. Plus d'indicateurs comme les oscillations de volatilité et de momentum peuvent enrichir les facteurs.

Conclusion

Le modèle à trois facteurs pour la détection des oscillations de prix utilise pleinement les caractéristiques des oscillations de prix pour mettre en œuvre une stratégie de trading efficace à court terme. Il juge les meilleurs points d'entrée et de sortie en fonction de plusieurs facteurs tels que le volume, le RSI, le MACD et la ligne de signal. Les multiples facteurs améliorent la précision et conduisent à des rendements stables.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10.0 Oscillator Profile Flagging", shorttitle="3 10.0 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1.0)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1.0)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1.0)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Plus de