Stratégie de suivi de tendance de matrice d'écart


Date de création: 2023-12-12 17:05:27 Dernière modification: 2023-12-12 17:05:27
Copier: 0 Nombre de clics: 643
1
Suivre
1621
Abonnés

Stratégie de suivi de tendance de matrice d’écart

Aperçu

La stratégie de suivi de la tendance de la matrice d’isolement est une stratégie de négociation quantitative combinant tendance, d’isolement et équilibre. La stratégie utilise le double RSI pour déterminer la direction de la tendance du marché et un signal d’entrée combiné avec l’équilibre de la matrice.

Principe de stratégie

La stratégie de suivi de la tendance de la matrice d’isolement se compose principalement des éléments suivants:

  1. Les tendances de jugement du double RSI

Utilisez le RSI rapide et le RSI lent pour déterminer la direction de la tendance du marché. Lorsque le RSI rapide est en sur-achat ou en sur-vente, combinez le RSI lent pour déterminer la direction de la tendance.

  1. La matrice régulière génère un signal de transaction

Il s’agit de définir un ensemble de moyennes matricielles en fonction du prix d’entrée et d’ajuster la position en conséquence lorsque le prix touche une certaine moyenne. De cette façon, il est possible de gagner plus dans la tendance.

  1. Travail à deux

Par défaut, les transactions sont bidirectionnelles.

La logique de l’opération est la suivante:

  1. L’indice RSI rapide est utilisé pour juger de l’excès de vente et d’achat temporaires sur le marché.

  2. L’utilisation du RSI lent pour déterminer la tendance à moyen et long terme du marché.

  3. Lorsque le RSI rapide est en sur-achat et en sur-vente et que le RSI lent montre un renversement de tendance, positionnez-vous dans la direction correspondante en fonction de la marge de manœuvre du RSI lent.

  4. Une fois la position établie, un ensemble de moyennes matricielles est défini. Ces moyennes matricielles entourent le prix d’entrée, la taille de l’intervalle étant déterminée par le paramètre de la proportion de couleurs entre les zones de la matrice de couleurs.

  5. Lorsque le prix atteint la moyenne de la matrice, ajustez le montant de la position. Si la moyenne est franchie à la hausse, augmentez le nombre d’options; si elle est franchie à la baisse, réduisez le nombre d’options vides.

  6. Lorsqu’il y a un changement de prix important, la position est réinitialisée au niveau initial.

Voici la logique de négociation principale de la stratégie. Grâce à la moyenne de la matrice, il est possible de verrouiller plus de bénéfices dans la tendance.

Avantages stratégiques

Les stratégies de suivi de la tendance de la matrice d’isolement présentent les avantages suivants:

  1. Les signaux de jugement du double RSI sont plus fiables. Le RSI rapide évite les fausses ruptures et le RSI lent assure la bonne direction.

  2. La matrice suit la tendance de la ligne moyenne pour réaliser des bénéfices. En ajustant les positions en fonction de l’écart de prix, il est possible de réaliser des bénéfices.

  3. Prise en charge des transactions bidirectionnelles. Les transactions bidirectionnelles par défaut peuvent également être effectuées en plusieurs étapes.

  4. Le mécanisme de rétablissement de position contrôle les risques. Le rétablissement de position peut être arrêté en temps opportun lorsque le prix est clairement ajusté.

  5. La configuration des paramètres est flexible. L’utilisateur peut choisir la meilleure combinaison de paramètres en fonction des données historiques, du type de transaction, etc.

  6. La structure du code est claire. Les responsabilités des parties sont clairement définies et faciles à comprendre, à optimiser et à étendre.

Dans l’ensemble, le plus grand avantage de cette stratégie réside dans l’utilisation de plusieurs mécanismes pour améliorer la qualité du signal et rechercher des gains plus élevés tout en contrôlant les risques. Il s’agit d’une stratégie de négociation à risques et bénéfices.

Risque stratégique

Les stratégies de suivi de la tendance de la matrice d’isolement présentent également des risques, principalement concentrés sur les points suivants:

  1. Le double RSI détermine le risque de défaillance. Le RSI émet souvent des faux signaux lorsque le marché est en phase de correction de choc. Il est nécessaire d’examiner le momentum, d’ajuster les paramètres de manière appropriée ou de suspendre la négociation.

  2. La méthode d’équilibrage de la matrice est un risque inadéquat. Si les paramètres de la matrice sont mal configurés, l’ajustement de position peut être trop radical, ce qui augmente les pertes. Les paramètres doivent être testés avec prudence.

  3. Une position excessive augmente le risque. Un ajustement trop important de la position peut également entraîner une augmentation des pertes. Le paramètre de position maximale doit être réglé avec prudence.

  4. Risque de renversement de tendance. Lorsque la tendance se renverse, le risque de perte est plus élevé si la position n’est pas liquidée à temps. Il est nécessaire de prêter attention aux indicateurs de tendance à plus long terme.

  5. Le risque est limité dans l’espace d’optimisation du code. La stratégie est assez mature et l’espace d’optimisation continue est limité. L’ensemble de la logique de transaction doit être réévalué si l’environnement du marché change considérablement.

L’évaluation et l’optimisation des stratégies sont essentielles pour atténuer ces risques. Des mesures telles que l’ajustement des combinaisons de paramètres et la surveillance des indicateurs à plus long cycle peuvent éviter les risques dans une certaine mesure.

Orientation de l’optimisation de la stratégie

Il y a de la place pour une optimisation supplémentaire de la stratégie de suivi de la tendance de la matrice d’aliénation:

  1. Optimiser les paramètres du double RSI. Plus de combinaisons de paramètres peuvent être testées, en choisissant la valeur de cycle RSI la plus précise.

  2. Les paramètres de la moyenne de la matrice sont paramétrés en fonction de la variété, afin de mieux correspondre aux caractéristiques de cette variété.

  3. Augmentation des mécanismes de stop loss. Par exemple, la mise en place d’une ligne de sortie moyenne, qui s’arrête lorsque le prix est inférieur à cette ligne moyenne.

  4. Augmentation des règles de proportion des positions. Adaptation de la taille et de la vitesse des positions de manière plus scientifique et rationnelle, afin de prévenir une augmentation excessive des positions.

  5. En combinaison avec d’autres indicateurs, d’autres indicateurs tels que MACD, KD peuvent être introduits pour un jugement auxiliaire, améliorant l’exactitude du signal.

  6. Optimiser la structure du code. Continuer à améliorer l’extensibilité, la maintenabilité et l’efficacité de l’exécution du code.

Résumer

La stratégie de suivi de la tendance de la matrice d’isolement est une stratégie de négociation quantitative composée de plusieurs mécanismes. Elle utilise principalement le double RSI pour déterminer la direction de la tendance et la méthode de suivi de la tendance de la matrice en ligne droite. Par rapport à la stratégie de l’indicateur unique, la stratégie peut fournir un signal de négociation plus stable et plus efficace.

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

//@version=3
strategy("The Matrix 7.0 Strategy", overlay=false)

//Matrix Settings 
entry_size = input(title="Entry Size", defval = 1)
max_size = input(title="Max Size", defval = 10000)
matrix = input(title="Matrix Interval %", defval = 2)
matrix_price_overwrite = input(title="Matrix Overwrite $", defval = 0.0)
adjustment = input(title="Adjustment Size", defval = 1000)
trade_short = input(title="Trade Short", type=bool, defval = true)

//RSI Settings
periods = input(title="RSI Periods", defval = 14)
overbought_short = input(title="RSI Overbought", defval = 65)
oversold_short = input(title="RSI Oversold", defval = 30)

//RSI Trend Settings
resolution_long = input(title="Resolution Trend", defval = "D")
periods_long = input(title="RSI Trend Periods", defval = 14)
overbought_long = input(title="RSI Trend Overbought", defval = 64)
oversold_long = input(title="RSI Trend Oversold", defval = 30)

//Round Off to 2 decimals
round2(x) =>
    a = x * 10 * 10
    a := floor(a + 0.5)
    a := a / 10 / 10
    a

//RSI Function
RSI = rsi(close, periods)

//RSI Market Function
rsi_oversold = RSI < oversold_short
rsi_overbought = RSI > overbought_short

market_rsi = 0.0
market_rsi := if (rsi_oversold)
    RSI - oversold_short
else
    if (rsi_overbought)
        RSI - overbought_short
    else
        0

//RSI Trend Function
rsi_long = request.security(syminfo.tickerid,resolution_long,rsi(close,periods_long))
trend_rsi_long = rsi_long < oversold_long
trend_rsi_short = rsi_long > overbought_long
trend_rsi = 0
trend_rsi := if (trend_rsi_short)
    -1
else
    if (trend_rsi_long)
        1
    else
        trend_rsi[1] 

// // Shorter time resolution to make "close" crosses give faster positives.
// short_resolution = security(tickerid, "1", close)
// quick = round2(short_resolution) //ROUND OFF TO 2 DECIMAL PLACES.

//Declare Other Variables
entry_price = 0.0
entry_price := nz(entry_price[1])

position_size = 0.0
position_size := nz(position_size[1])

last_traded_price = 0.0
last_traded_price := nz(last_traded_price[1])


matrix_price = 0.0
if matrix_price_overwrite > 0.0
    matrix_price := matrix_price_overwrite
else
    matrix_price := round2((matrix/100) * entry_price)

level = 0
level := nz(level[1])

level_price = entry_price
if not na(level_price[1])
    level_price := level_price[1]

// Calculate Level
if close > level_price 
    level_change = floor((high - level_price)/matrix_price)
    level := level + level_change
else
    if close < level_price 
        level_change = ceil((low - level_price)/matrix_price)
        level := level + level_change
        
// Calculate Level Price   
level_price := (level * matrix_price) + entry_price

// Calculate Matrix Position
matrix_position = 0.0

if position_size > 0
    matrix_position :=  ((-1 * level) * adjustment) + entry_size
else
    if position_size < 0
        matrix_position :=  ((-1 * level) * adjustment) - entry_size
    
//Trend Entry or Reversal Conditions
trend_reversal_up = trend_rsi == 1 and (trend_rsi[1] == -1 or trend_rsi == 0) and position_size <= 0
trend_reversal_down = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == true
flatten_position = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == false

//Reset Conditions
reset_long = (position_size > 0) and (close - entry_price > matrix_price) and (market_rsi < 0) and (position_size != entry_size) 
reset_short = (position_size < 0) and (entry_price - close > matrix_price) and (market_rsi > 0) and (position_size != (-1 * entry_size)) 

//Adjustment Conditions
increase_long = (position_size > 0) and (matrix_position > position_size) and (market_rsi < 0) and (matrix_position <= max_size) 
decrease_long = (position_size > 0) and (matrix_position < position_size) and (market_rsi > 0) 
increase_short = (position_size < 0) and (matrix_position < position_size) and (market_rsi > 0) and (matrix_position >= (-1 * max_size)) 
decrease_short = (position_size < 0) and (matrix_position > position_size) and (market_rsi < 0)  

//Transactions
//Trend Reversals
if trend_reversal_up
    strategy.entry("OL", strategy.long, qty=entry_size)
    position_size := entry_size
    matrix_position := entry_size
    level := 0
else
    if trend_reversal_down 
        strategy.entry("OS", strategy.short, qty=entry_size)
        position_size := -1 * entry_size
        matrix_position := -1 * entry_size   
        level := 0
        
    //Reset Positions    
    else
        if reset_long
            order = entry_size - position_size[1]
            strategy.order("RL", strategy.long, qty=order)
            position_size := entry_size
            matrix_position := entry_size
            level := 0
        else
            if reset_short
                order = position_size[1] - (-1* entry_size)
                strategy.order("RS", strategy.short, qty=order)
                position_size := -1 * entry_size
                matrix_position := -1 * entry_size
                level := 0

    //Position Adjustments
            else    
                if increase_long
                    order = matrix_position - position_size[1]
                    strategy.order("IL", strategy.long, qty=order)
                    position_size := position_size[1] + order
                else
                    if decrease_long
                        order = position_size[1] - matrix_position
                        strategy.order("DL", strategy.short, qty=order)
                        position_size := position_size[1] - order
                    else
                        if increase_short
                            order = position_size[1] - matrix_position
                            strategy.order("IS", strategy.short, qty=order)
                            position_size := position_size[1] - order
                        else
                            if decrease_short
                                order = matrix_position - position_size[1]
                                strategy.order("DS", strategy.long, qty=order)
                                position_size := position_size[1] + order
                            else 
                                if flatten_position
                                    strategy.close_all()
                                    position_size := 0.0
                                    matrix_position := 0.0
                                    level := 0

//Grouped Actions
if trend_reversal_up or trend_reversal_down or reset_short or reset_long
    entry_price := round2(close)
    last_traded_price := round2(close)

if increase_long or decrease_long or increase_short or decrease_short
    last_traded_price := round2(close)

// //RSI Trend & Adjustment Moments. (strategy)
p1 = plot(market_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Market', transp =0)
p2 = plot(trend_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Trend', transp = 0)
fill(p1,p2, color=trend_rsi > 0 ? green : red, transp=0)
p3 = plot((rsi_long - 50) *2, color = white, title="Trend Index")
fill(p2,p3, color=white)
hline((overbought_long -50) * 2)
hline((oversold_long -50) * 2)

//Position Plots (strategy)
plot(matrix_position / 100, title='Matrix', color=white, linewidth = 4)
plot(position_size / 100, title='Position', color=blue, linewidth = 4)
plot(strategy.position_size / 100, title='Strategy', color=orange, linewidth = 4)

// //Price Plots (study)
// plot(level_price, title="Matrix Level Price", linewidth=4)
// plot(last_traded_price, title="Last Traded Price", linewidth=2, color=orange)
// plot(entry_price + (4 * matrix_price), title='Adjustment 4', color=white, linewidth = 1)
// plot(entry_price + (3 * matrix_price), title='Adjustment 3', color=white, linewidth = 1)
// plot(entry_price + (2 * matrix_price), title='Adjustment 2', color=white, linewidth = 1)
// plot(entry_price + matrix_price, title='Adjustment 1', color=white, linewidth = 1)
// plot(entry_price, title='Entry Price', color=white, linewidth = 3)
// plot(entry_price - matrix_price, title='Adjustment -1', color=white, linewidth = 1)
// plot(entry_price - (2 * matrix_price), title='Adjustment -2', color=white, linewidth = 1)
// plot(entry_price - (3 * matrix_price), title='Adjustment -3', color=white, linewidth = 1)
// plot(entry_price - (4 * matrix_price), title='Adjustment -4', color=white, linewidth = 1)


// //Alerts (study only)
// alertcondition(trend_reversal_up, title='Trend Reversal Up', message='Market Oversold, Lets Buy')
// alertcondition(trend_reversal_down, title='Trend Reversal Down', message='Market Overbought, Lets Sell')
// alertcondition(reset_long, title='Reset Long', message='Higher Bottom, Lets Buy')
// alertcondition(reset_short, title='Reset Short', message='Lower Top, Lets Sell')
// alertcondition(increase_long, title='Increase Long', message='Price Dropped, Lets Buy')
// alertcondition(decrease_long, title='Decrease Long', message='Price Spiked, Lets Sell')
// alertcondition(increase_short, title='Increase Short', message='Price Spiked, Lets Sell')
// alertcondition(decrease_short, title='Decrease Short', message='Price Dropped, Lets Buy')

// //Grouped Conditions
// condition_buy = trend_reversal_up or increase_long or decrease_short or reset_long
// condition_sell = trend_reversal_down or decrease_long or increase_short or reset_short
// adjustment_matrix = trend_reversal_up or increase_long or decrease_short or trend_reversal_down or decrease_long or increase_short or reset_long or reset_short

// //Grouped Alerts
// alertcondition(condition_buy, title='Condition Buy', message='You Need to Buy')
// alertcondition(condition_sell, title='Condition Sell', message='You Need to Sell!')
// alertcondition(adjustment_matrix, title='Adjustment Matrix', message='You Need to Adjust')