Stratégie de trading de solde long-short basée sur des indicateurs de volume et de prix


Date de création: 2023-11-24 14:35:13 Dernière modification: 2023-11-24 14:35:13
Copier: 0 Nombre de clics: 649
1
Suivre
1617
Abonnés

Stratégie de trading de solde long-short basée sur des indicateurs de volume et de prix

Aperçu

Cette stratégie est une stratégie de trading d’indicateurs de quantité et de prix sur plusieurs périodes. Elle utilise l’indice de force relative relative (RSI), l’amplitude réelle moyenne (ATR), la moyenne mobile simple (SMA) et des conditions de quantité personnalisées pour identifier les signaux potentiels de survente.

Principe de stratégie

La stratégie est basée sur les points clés suivants:

  1. Le RSI est considéré comme un signal de survente lorsqu’il est en dessous de la ligne de survente et qu’il est en survente pendant les 10 dernières lignes de K.
  2. Définition de plusieurs ensembles de conditions quantitatives qui doivent être remplies simultanément pour que l’indicateur quantitatif soit considéré comme émettant plusieurs signaux
  3. Le signal de rupture du prix est considéré lorsque le prix de clôture franchit le SMA de 13 cycles de bas en haut.
  4. Le petit cycle ATR est inférieur au grand cycle et est un signal de propulsion
  5. L’analyse des signaux de plusieurs indicateurs ci-dessus pour une prise de décision multiple

Plus précisément, la stratégie définit des paramètres de longueur et de ligne de survente pour l’indicateur RSI, en fonction desquels la valeur RSI est calculée. Un signal de survente est généré lorsque l’indicateur RSI est en dessous de la ligne de survente par plusieurs lignes K consécutives.

En outre, la stratégie définit 3 seuils de volume de transaction et définit plusieurs ensembles de conditions de volume en fonction des données de différentes périodes de temps. Par exemple, le volume de 90 cycles est supérieur à 1,5 fois le volume de 49 cycles. Lorsque ces conditions de volume sont réunies, un signal de multiplication de l’indicateur de volume est émis.

En ce qui concerne le prix, la stratégie calcule l’indicateur SMA à 13 cycles et statistique le nombre de lignes K depuis que le prix a franchi la SMA vers le haut. Il est considéré comme un signal de rupture du prix lorsque le prix a franchi la SMA vers le haut depuis le bas et que le nombre de lignes K après la rupture est inférieur à 5.

En ce qui concerne les paramètres ATR, la stratégie spécifie un ATR pour le petit cycle 5 et le grand cycle 14. Lorsque l’ATR du petit cycle est inférieur à l’ATR du grand cycle, cela indique que les fluctuations du marché s’accélèrent et se réduisent, ce qui est un signal plus fort.

En fin de compte, la stratégie prend en compte les conditions de vente multiples ci-dessus, y compris les conditions de survente, les indicateurs de quantité, les prix de rupture et les indicateurs d’ATR. Lorsque ces conditions sont remplies simultanément, un signal de surenchère final est généré et une position de surenchère est établie.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. La stratégie ne prend pas seulement en compte les données de prix pour un seul cycle, mais évalue l’intersection de plusieurs groupes de conditions de prix pour différents cycles, ce qui permet de juger plus précisément la concentration de la quantité.

  2. Le triple mécanisme de jugement de survente + prix + quantité assure la fiabilité du signal d’achat. La survente fournit la sélection de point d’achat la plus basique, en plus de la confirmation supplémentaire du moment d’achat par la croisée des indicateurs de quantité et de prix.

  3. Les paramètres de stop-loss et de stop-loss peuvent être ajustés en fonction des préférences de risque individuelles, tout en contrôlant raisonnablement le risque de chaque transaction dans la poursuite de la maximisation des bénéfices.

  4. L’intégration d’indicateurs multiples augmente la résilience. Même en cas de défaillance ou d’erreur d’un indicateur, le jugement d’autres indicateurs peut être utilisé pour garantir une certaine capacité de fonctionnement continu.

Risques et contre-mesures

Cette stratégie comporte aussi des risques:

  1. La configuration des paramètres des différents indicateurs affecte directement les résultats du jugement. Des paramètres déraisonnables peuvent entraîner une déviation du signal de négociation. Il est nécessaire de vérifier attentivement la valeur raisonnable des paramètres.

  2. L’espace de gain est limité. En tant que stratégie de fusion de plusieurs indicateurs pour un jugement intégré, la fréquence de génération de signaux est relativement plus conservatrice, le nombre de transactions par unité de temps est plus faible et l’espace de gain est limité.

  3. Risque de dispersion des indicateurs. Lorsque certains indicateurs émettent des signaux de multiplication et d’autres des signaux de réduction, la stratégie ne peut pas déterminer la décision optimale. Cela nécessite d’identifier et de résoudre à l’avance les éventuelles dispersions entre les indicateurs.

Orientation de l’optimisation de la stratégie

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

  1. Ajout d’un modèle d’apprentissage automatique pour l’aide au jugement. Des modèles de prix et de caractéristiques de fluctuation peuvent être entraînés, en plus des paramètres définis manuellement et de la dynamique des paramètres.

  2. Améliorer la maturité des stratégies de stop-loss. Par exemple, il est possible de configurer des stop-loss flottants, des stop-loss par lots, des stop-loss de suivi, etc., tout en évitant les pertes de période.

  3. Évaluation des données de prise de position. Outre les données de cours de la ligne K, les données de prise de position combinées avec des données de négociation en profondeur permettent de juger de la distribution des positions et fournissent des signaux de référence supplémentaires.

  4. Cette stratégie utilise principalement des indicateurs tels que le RSI, l’ATR et le SMA pour l’intégration. Vous pouvez également essayer d’introduire des combinaisons d’autres indicateurs tels que les lignes de Brin, les KDJ et d’enrichir et d’optimiser les sources de signaux de négociation.

Résumer

Cette stratégie utilise le RSI, l’ATR, le SMA et les conditions de prix personnalisées pour identifier les opportunités potentielles. Elle présente également des avantages tels que la détermination des indicateurs de prix de plusieurs périodes, le mécanisme de confirmation du triple signal et le contrôle des risques de stop loss. Bien sûr, il est également nécessaire de tenir compte des problèmes tels que le risque de configuration des paramètres et les limites de l’espace de profit.

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

// © Kimply_Tr
//@version=5

// Strategy settings and parameters
strategy(title='Volume ValueWhen Velocity', overlay=true)

// Define the stop-loss and take-profit percentages for the long strategy
long_stoploss_value = input.float(defval=3, title='Stop-Loss (SL) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2')
long_stoploss_percentage = close * (long_stoploss_value / 100) / syminfo.mintick  // Calculate long stop-loss percentage
long_takeprofit_value = input.float(defval=2, title='Take-Profit (TP) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2')
long_takeprofit_percentage = close * (long_takeprofit_value / 100) / syminfo.mintick  // Calculate long take-profit percentage

// Define parameters related to ValueWhen occurrences
occurrence_ValueWhen_1 = input.int(title='occurrence_ValueWhen_1', defval=1, maxval=100, step=1, group="▶ ValueWhen",tooltip ="Its value must be smaller than (occurrence_ValueWhen_2)")  
occurrence_ValueWhen_2 = input.int(title='occurrence_ValueWhen_2', defval=5, maxval=100, step=1, group="▶ ValueWhen" ,tooltip="Its value must be greater than (occurrence_ValueWhen_1)")
distance_value=input.int(title='distance_value_occurrence', defval=170, maxval=5000, step=1, group="▶ ValueWhen" ,tooltip="It indicates the minimum distance between the occurrences of 1 and 2, i.e. the difference between the occurrences of 1 and 2 is greater than (distance_value_occurrence)")

// Define RSI-related parameters
rsi_over_sold = input.int(defval=60, minval=1, title='Oversold Level', group='▶ RSI',inline ='2')  // Input for oversold level in RSI
rsi_length = input.int(defval=40, minval=1, title='RSI Length', group='▶ RSI',inline ='2')  // Input for RSI length
rsi = ta.rsi(close, rsi_length)  // Calculate RSI

// Define volume thresholds
volume_threshold1 = input.float(title='volume_threshold_1', defval=0.5, maxval=10, step=0.1, group="▶ Volume")  
volume_threshold2 = input.float(title='volume_threshold_2', defval=0.4, maxval=10, step=0.1, group="▶ Volume")  
volume_threshold3 = input.float(title='volume_threshold_3', defval=0.62, maxval=10, step=0.1, group="▶ Volume")  

// ATR (Average True Range)
// Define ATR parameters
atr_small = input.int(title='ATR_Small', defval=5, maxval=500, step=1, group="▶ Atr",inline ='2') 
atr_big = input.int(title='ATR_Big ', defval=14, maxval=500, step=1, group="▶ Atr",inline ='2') 

atr_value3 = ta.atr(15)  // Calculate ATR value 3
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Date Range
// Define the date range for back-testing
start_date = input.int(title='Start Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1')  // Input for start day
end_date = input.int(title='until Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1')  // Input for end day
start_month = input.int(title='Start Month', defval=7, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2')  // Input for start month
end_month = input.int(title='until Month', defval=1, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2')  // Input for end month
start_year = input.int(title='Start Year', defval=2022, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3')  // Input for start year
end_year = input.int(title='until Year', defval=2077, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3')  // Input for end year
in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0)  // Check if the current time is within the specified date range
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
was_over_sold = ta.barssince(rsi <= rsi_over_sold) <= 10  // Check if RSI was oversold in the last 10 bars
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
getVolume(symbol, bar) =>
    request.security(syminfo.tickerid, "D", volume)[bar]  // Function to get volume data for a specific symbol and bar

getVolume2(symbol, bar) =>
    request.security(syminfo.tickerid, "39", volume)[bar]  // Function to get volume data for a specific symbol and bar 2
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

firstCandleColor1 = request.security(syminfo.tickerid, "D", close[2] > open[1] ? 1 : 0)
firstCandleColor2 = request.security(syminfo.tickerid, "1", close[2] > open[0] ? 1 : 0)
firstCandleColor3 = request.security(syminfo.tickerid, "W", close[1] > open[1] ? 1 : 0)

firstCandleColor= ((firstCandleColor1+firstCandleColor2)) > firstCandleColor3 ? 1 : 0

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sma = ta.sma(close, 13)  // Calculate the simple moving average (SMA) of the close price over 13 periods
numCandles = ta.barssince(close > sma)  // Count the number of candles since the close price crossed above the SMA
atr1=request.security(syminfo.tickerid, "30", ta.atr(atr_small)<ta.atr(atr_big))  // Get the ATR value for the specific security and timeframe (30 minutes) and check if ATR_small is less than ATR_big

prevClose = ta.valuewhen(close > sma, close, occurrence_ValueWhen_1)  // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_1
prevCloseBarsAgo = ta.valuewhen(close > sma, close, occurrence_ValueWhen_2)  // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_2
prevCloseChange =  (prevCloseBarsAgo - prevClose )  // Calculate the change in the close price between the occurrences of crossing above the SMA

atrval=(atr_value3>140) or (atr_value3 < 123)  // Check if atr_value3 is either greater than 140 or less than 123

Condition =  getVolume(syminfo.tickerid, 90) > volume_threshold1 * getVolume(syminfo.tickerid, 49)   and getVolume(syminfo.tickerid, 110) > volume_threshold3 * getVolume(syminfo.tickerid, 49)  and getVolume2(syminfo.tickerid, 30) > volume_threshold2 * getVolume2(syminfo.tickerid, 55) and getVolume2(syminfo.tickerid, 7) > volume_threshold2 * getVolume2(syminfo.tickerid, 3)  // Check multiple volume conditions

buy_signal=Condition  and atrval and firstCandleColor==0 and  was_over_sold and  prevCloseChange> distance_value and atr1 and  numCandles<5  // Determine if the buy signal is generated based on various conditions

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Long Strategy
// Enter long position if the buy signal conditions are met and within the specified date range
if buy_signal and in_date_range
    strategy.entry('Long', strategy.long, alert_message='Open Long Position')  // Enter long position
    strategy.exit('Long SL/TP', from_entry='Long', loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message='Your SL/TP-Limit for the Long-Strategy has been activated.')  // Exit long position with stop-loss and take-profit