Stratégie de moyenne d'enveloppe d'inversion intentionnelle


Date de création: 2023-12-04 16:12:39 Dernière modification: 2023-12-04 16:12:39
Copier: 0 Nombre de clics: 759
1
Suivre
1619
Abonnés

Stratégie de moyenne d’enveloppe d’inversion intentionnelle

Aperçu

Une stratégie de revente intentionnelle est une stratégie de revente intentionnelle basée sur une moyenne mobile. La stratégie utilise une moyenne mobile à deux indices comme base de calcul, et ajoute plusieurs bandes de revente au-dessus et au-dessous d’elle.

Principe de stratégie

La stratégie utilise la moyenne mobile bi-indicateur (DEMA) comme indicateur de base. La moyenne mobile bi-indicateur est une moyenne mobile très sensible aux changements de prix. Sur sa base, la stratégie ajoute plusieurs bandes de prix sur les côtés supérieur et inférieur, constituant une zone de couverture uniforme.

Lorsque la hausse des prix se rapproche de la zone de couverture supérieure, la stratégie prend une position à découvert; lorsque la baisse des prix touche la zone de couverture inférieure, la stratégie prend une position supplémentaire. Chaque fois qu’une nouvelle zone de couverture est touchée, la stratégie prend une position supplémentaire.

Cette stratégie consiste à capturer les fluctuations excessives des prix par des zones de couverture et à se retirer des bénéfices lorsque le revirement arrive, pour atteindre l’objectif de transaction de vente à bas prix. Elle s’applique aux cycles de marché caractérisés par un retour à la valeur moyenne évident, comme les monnaies numériques telles que Bitcoin.

Avantages stratégiques

  • L’utilisation d’une moyenne mobile à double indice est plus sensible aux variations de prix à court terme et permet de capturer rapidement les virages de tendance.
  • La mise en place d’une zone de couverture près de la ligne moyenne permet de capturer plus précisément les inversions de prix.
  • Les investisseurs ont été invités à ouvrir leurs magasins en lots et à tirer le meilleur parti de l’efficacité financière.
  • Il est possible de changer de direction rapidement après avoir réalisé des bénéfices et de réagir avec souplesse aux changements du marché.
  • Il est possible d’optimiser librement en ajustant les paramètres

Risque stratégique

  • La plupart des entreprises ne sont pas en mesure de changer de direction.
  • Une mauvaise configuration des paramètres peut entraîner des transactions trop fréquentes.
  • Il faut une relative stabilité, ce qui n’est pas le cas pour les marchés très volatiles.
  • La zone de couverture est trop petite pour permettre l’ouverture d’une position.

Il est possible de réduire le risque en assouplissant de manière appropriée la portée de la zone de couverture et en augmentant la sensibilité aux variations de prix déclenchées. En même temps, les paramètres de longueur de la ligne moyenne mobile peuvent être ajustés pour s’adapter à différentes conditions cycliques.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimisation des algorithmes de la moyenne mobile. Différents types d’indicateurs de la moyenne mobile peuvent être testés.

  2. Ajuster les paramètres de longueur de la ligne moyenne. La réduction des cycles peut améliorer la capture des variations de prix à court terme, mais peut également augmenter le bruit des transactions.

  3. Optimiser les paramètres de la zone de couverture. Vous pouvez tester différents réglages de pourcentage pour trouver la combinaison optimale de paramètres.

  4. Augmentation des stratégies de stop loss. Définition d’un stop loss mobile ou d’un stop loss rétractable, permettant de contrôler efficacement les pertes individuelles.

  5. Augmentation des conditions de filtrage. En combinaison avec d’autres signaux d’indicateurs, évitez d’annuler une position dans des circonstances irrationnelles.

Résumer

La stratégie d’équivalence de la chaîne de retournement intentionnelle capte efficacement les occasions de retournement de prix en construisant un canal de prix équivalent. Elle permet d’ajuster les paramètres de manière flexible et s’applique à différents environnements de marché. La stratégie a un coût de transaction faible et un rendement élevé et constitue une stratégie de négociation quantitative recommandée.

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

//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN

// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") 
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")


// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
    if(ma_type == '1. SMA') 
        ta.sma(src, ma_window)
    if(ma_type == '2. EMA') 
        ta.ema(src, ma_window)
    if(ma_type == '3. RMA') 
        ta.rma(src, ma_window)
    if(ma_type == '4. DEMA') 
        2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)

ma_base = ma_funct()

ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na

ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na


// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))


if use_short
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))

strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)