Stratégie dynamique d'arrêt des pertes

Auteur:ChaoZhang est là., Date: 2023-12-21 15:58:54 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie détermine la direction de la tendance en fonction des bougies quotidiennes et utilise les nouveaux points hauts ou bas formés par les bougies de 15 minutes comme prix stop-loss ou prix stop-loss de suivi, afin d'ajuster dynamiquement le stop-loss et de verrouiller plus de bénéfices.

La logique de la stratégie

  1. Comparez le prix de clôture des bougies quotidiennes avec le prix le plus élevé et le prix le plus bas du bougie quotidien précédent pour déterminer la direction de la tendance. Si le prix de clôture est supérieur au prix le plus élevé du jour précédent, il est défini comme une tendance haussière. Si le prix de clôture est inférieur au prix le plus bas du jour précédent, il est défini comme une tendance baissière.

  2. Lorsque vous êtes en tendance haussière, passez long lorsque le prix de clôture du chandelier de 15 minutes est supérieur au prix le plus élevé du chandelier de 15 minutes précédent.

  3. Définissez le prix le plus bas du chandelier de 15 minutes précédent comme le prix d'arrêt de perte après avoir passé long.

  4. Lorsque le chandelier de 15 minutes atteint un nouveau sommet ou un nouveau bas, ajustez le prix du stop loss en conséquence. Ajustez-le au nouveau bas après avoir passé long. Ajustez-le au nouveau haut après avoir passé court. Cela réalise un stop loss dynamique.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle peut ajuster dynamiquement le prix du stop loss. tout en assurant le contrôle des risques, elle maximise la prise de profit et réduit la probabilité d'un stop loss.

Plus précisément, les avantages comprennent:

  1. Les jugements basés sur les opérations de tendance peuvent déterminer en temps opportun les tendances du marché et choisir la bonne direction de négociation.

  2. Le trading sur des délais de 15 minutes permet d'entrer et de sortir fréquemment pour saisir plus d'opportunités.

  3. L'ajustement dynamique du stop loss basé sur de nouveaux sommets ou de nouveaux sommets réduit les risques de voir le stop loss atteint.

  4. Une position stop loss raisonnable évite largement les pertes inutiles.

Analyse des risques

Le principal risque de cette stratégie provient d'erreurs dans les jugements de tendance.

  1. Un jugement erroné de la tendance quotidienne peut conduire à une mauvaise direction du commerce.

  2. Les prix peuvent fluctuer violemment à court terme, ce qui augmente la probabilité d'un stop loss de 15 minutes.

  3. Une mauvaise identification des points d'inversion de tendance peut entraîner des pertes.

Solution correspondante:

  1. Ajouter des indicateurs d'autres délais pour des jugements complets afin d'éviter de se fier à un seul délais.

  2. Évaluer la volatilité du marché et assouplir la fourchette de stop loss de manière appropriée en cas de forte volatilité.

  3. Ajouter un mécanisme d'identification du point de renversement de tendance pour fermer les positions en temps opportun avant les renversements.

Directions d'optimisation

Il y a encore une marge d'optimisation:

  1. Ajouter d'autres indicateurs de calendrier pour optimiser la capture des tendances.

  2. Testez différents paramètres de ratio de stop-loss pour trouver les paramètres optimaux.

  3. Ajouter des indicateurs de volume pour éviter les erreurs dues à la divergence de volume.

  4. Ajouter des mécanismes d'inversion de tendance pour optimiser les points de sortie.

  5. Évaluer l'élargissement des intervalles de prix Trailing Stop afin de réduire davantage les risques d'un stop loss.

Résumé

La performance globale de cette stratégie est bonne. La logique est claire et facile à comprendre. Elle présente des avantages tels que l'ajustement dynamique du stop loss, le trading fréquent et le trading suivant les tendances. Elle peut contrôler efficacement les risques et verrouiller les bénéfices, et vaut la peine d'être testée et optimisée. Mais il y a encore place à l'amélioration. Il est recommandé d'améliorer des aspects tels que le jugement complet sous plusieurs angles, l'optimisation des paramètres, l'ajout de mécanismes d'identification de l'inversion de tendance, etc., pour renforcer davantage la stabilité et la rentabilité de la stratégie.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)

Plus de