Indicateur de prix par volume Stratégie de négociation équilibrée

Auteur:ChaoZhang est là., Date: 2023-11-24 14h35 et 13h
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading d'indicateur de prix de volume multi-temporel. Elle utilise de manière exhaustive l'indice de force relative (RSI), la plage moyenne réelle (ATR), la moyenne mobile simple (SMA) et les conditions de prix de volume personnalisées pour identifier les signaux longs potentiels. Lorsque certains survendus, le croisement de prix de volume, la rupture de prix et d'autres conditions d'entrée sont remplies, cette stratégie établira des positions longues. Elle définit également des niveaux de stop loss et de profit pour contrôler le ratio risque-rendement par transaction.

La logique de la stratégie

Les points clés de cette stratégie sont les suivants:

  1. Lorsque le RSI est inférieur au niveau de survente et reste survendu pendant les 10 derniers bars, il est considéré comme un signal de survente.
  2. Plusieurs ensembles de conditions de prix de volume sont définis, et toutes ces conditions doivent être satisfaites en même temps pour déclencher le signal long de l'indicateur de prix de volume
  3. Lorsque le prix de clôture dépasse la SMA à 13 périodes, il est considéré comme un signal de rupture de prix.
  4. La petite période ATR étant inférieure à la grande période ATR est également un signal long contribuant
  5. La stratégie combine tous les signaux ci-dessus pour prendre la décision finale d'entrée longue

Plus précisément, cette stratégie définit les paramètres de longueur et de survente de l'indicateur RSI et calcule les valeurs du RSI en fonction de ces paramètres.

En outre, la stratégie définit 3 seuils de volume et établit plusieurs ensembles de conditions de prix de volume basés sur des données de différentes périodes. Par exemple, la valeur du volume de la période 90 est supérieure à 1,5 fois celle de la période 49. Lorsque toutes ces conditions de prix de volume sont remplies en même temps, l'indicateur de prix de volume génère un signal long.

Sur l'aspect prix, la stratégie calcule la SMA de 13 périodes et compte le nombre de barres depuis que le prix dépasse la SMA.

Pour les paramètres de la période ATR, cette stratégie spécifie une petite période de 5 et une grande période de 14 pour l'ATR. Lorsque la petite période ATR est inférieure à la grande période ATR, cela indique que la volatilité du marché s'accélère vers le bas et contribue au signal long.

Enfin, la stratégie tient compte de tous les critères d'entrée ci-dessus, y compris les indicateurs de survente, de prix de volume, de rupture de prix et d'ATR. Lorsque toutes ces conditions sont remplies en même temps, le signal long final est déclenché et une position longue est établie.

Les avantages

Cette stratégie présente les avantages suivants:

  1. En évaluant plusieurs ensembles de données sur les prix du volume sur différentes périodes au lieu d'une seule période, la stratégie permet de juger plus précisément de la concentration des volumes de négociation.

  2. Le mécanisme de triple confirmation de survente + prix de volume + écoulement des prix assure des signaux d'entrée fiables.

  3. Le mécanisme de stop loss et take profit contrôle strictement le risque par transaction. Les paramètres de stop loss et take profit peuvent être ajustés en fonction de l'appétit de risque personnel pour maximiser les profits tout en contrôlant raisonnablement le risque par transaction.

  4. L'intégration de plusieurs indicateurs accroît la robustesse. Même si certains indicateurs échouent ou ne fonctionnent pas correctement, la stratégie peut toujours s'appuyer sur d'autres indicateurs pour le jugement et assurer un certain niveau de résilience.

Risques et contre-mesures

Cette stratégie comporte également certains risques:

  1. Le risque de configuration des paramètres. Les paramètres des indicateurs ont une incidence directe sur le jugement, et des paramètres inappropriés peuvent entraîner des biais dans les signaux de trading. Les valeurs raisonnables des paramètres doivent être soigneusement validées.

  2. En tant que stratégie intégrant plusieurs indicateurs pour le jugement collectif, ses signaux ont tendance à être plus conservateurs avec relativement moins de transactions par unité de temps, de sorte que le potentiel de profit présente certaines contraintes.

  3. Risque de divergence des indicateurs: lorsque certains indicateurs émettent des signaux longs et d'autres des signaux courts, la stratégie ne peut déterminer la décision optimale.

Directions d'optimisation

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

  1. Incorporer des modèles d'apprentissage automatique pour faciliter le jugement. Les modèles peuvent être entraînés sur les caractéristiques de prix de volume et de volatilité pour ajuster dynamiquement les paramètres définis manuellement.

  2. Améliorer la sophistication des stratégies de prise de profit, telles que l'arrêt ultérieur de la prise de profit, la prise partielle de profit, etc., afin d'augmenter davantage le profit par transaction tout en évitant la perte de profit.

  3. Évaluer en incorporant des données du carnet de commandes. En plus des données du graphique des prix et du volume, les données du carnet de commandes révèlent également des informations de profondeur sur la répartition de la liquidité pour fournir des signaux de référence supplémentaires.

  4. Cette stratégie utilise principalement des indicateurs tels que RSI, ATR et SMA. D'autres indicateurs tels que les bandes de Bollinger et KDJ peuvent également être combinés pour diversifier et optimiser les sources de signaux de trading.

Conclusion

Cette stratégie utilise une combinaison d'indicateurs, y compris le RSI, l'ATR, le SMA et les conditions de prix de volume personnalisées pour identifier les opportunités d'entrée à long terme potentielles. Elle présente des avantages tels que l'évaluation du prix du volume sur plusieurs délais, le mécanisme de triple confirmation et le contrôle des risques de stop loss / take profit. Néanmoins, des risques tels que la configuration des paramètres, le potentiel de profit restreint doivent également être pris en compte.


/*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




Plus de