La stratégie du Joker pour tirer profit

Auteur:ChaoZhang est là., Date: 23 septembre 2023 à 15h04
Les étiquettes:

Résumé

La stratégie Joker Trailing Take Profit est une stratégie de suivi de tendance basée sur des moyennes mobiles.

La logique de la stratégie

La stratégie utilise des moyennes mobiles rapides et lentes pour identifier la tendance globale.

La stratégie calcule d'abord un prix de prise de profit initial basé sur le pourcentage configuré après l'ouverture d'une position.

Lorsque la direction de la position correspond au signal, un ordre limite est utilisé pour prendre profit si le suivi est désactivé.

Analyse des avantages

  • Les moyennes mobiles filtrent le bruit du marché et évitent les faux signaux.

  • Le suivi des bénéfices s'effectue en ajustant dynamiquement le niveau des bénéfices en fonction de l'action des prix.

  • Le suivi des bénéfices permet d'obtenir plus de bénéfices et réduit les chances de récupérer des bénéfices.

  • La fonction stop loss permet à la stratégie de sortir plus tôt lorsque la tendance s'inverse.

Analyse des risques

  • Les moyennes mobiles peuvent générer de faux signaux ou des retards lors d'importantes fluctuations de prix. Cela peut entraîner des pertes de transactions dans le mauvais sens.

  • Un taux de prise de profit trop élevé augmente la période de détention et l'écart entre le prix de prise de profit réel et attendu.

  • Une étape de suivi trop petite provoque des mises à jour d'ordre excessives et augmente les frais et le glissement.

  • Le TP de suivi ne fait que monter et ne prend pas en compte les retraits. Cela peut entraîner un écart entre le prix de prise de profit réel et attendu. Un mécanisme de suivi bidirectionnel peut aider.

Directions d'optimisation

  • Considérez l'ajustement dynamique des paramètres de l'AM basé sur la volatilité: des périodes plus longues où la volatilité augmente et des périodes plus courtes où la volatilité diminue.

  • Rechercher des ratios de profit optimaux pour différents produits et marchés afin de minimiser le risque de déviation.

  • Explorez le mécanisme de suivi à double sens pour suivre à la fois à la hausse et à la baisse.

  • Incorporer des indicateurs de la force de la tendance pour réduire le ratio de prise de profit dans les tendances faibles et augmenter le ratio dans les tendances fortes.

  • Combiner avec des modèles d'apprentissage automatique pour définir dynamiquement des ratios de prise de profit basés sur les fourchettes de prix prévues.

Conclusion

La stratégie Joker Trailing Take Profit a une structure claire et utilise des moyennes mobiles pour définir la direction de la tendance et la trailing pour verrouiller les bénéfices. Elle combine les avantages des trailing stops et des trailing take profits pour suivre les tendances en douceur tout en contrôlant les risques. Des améliorations supplémentaires peuvent être apportées grâce à l'optimisation des paramètres et à l'amélioration du mécanisme de take profit pour s'adapter à des environnements de marché plus complexes.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Joker Trailing TP Bot', shorttitle='Joker TTP Bot', overlay=true, pyramiding=0, process_orders_on_close=false, close_entries_rule='ANY', calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD) //, max_labels_count=500)

fromDate = input(timestamp('01 Jan 2021 00:00 UTC'), 'From Date')
toDate = input(timestamp('31 Dec 2121 23:59 UTC'), 'To Date')
fastMALen = input.int(23, 'Fast SMA Length')
slowMALen = input.int(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01

float fastMA = ta.sma(close, fastMALen)
float slowMA = ta.sma(close, slowMALen)
bool isWithinPeriod = true
bool openLongPosition = isWithinPeriod and ta.crossover(fastMA, slowMA)
bool openShortPosition = isWithinPeriod and ta.crossunder(fastMA, slowMA)
bool longIsActive = openLongPosition or strategy.position_size > 0
bool shortIsActive = openShortPosition or strategy.position_size < 0

float longTakeProfitPrice = na
longTakeProfitPrice := if longIsActive
    if openLongPosition and not (strategy.position_size > 0)
        close * (1 + longTakeProfitPerc)
    else
        nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
else
    na

float shortTakeProfitPrice = na
shortTakeProfitPrice := if shortIsActive
    if openShortPosition and not (strategy.position_size < 0)
        close * (1 - shortTakeProfitPerc)
    else
        nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPrice))
else
    na

float longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
float shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick

strategy.entry(id = 'Long Entry', direction = strategy.long, when = openLongPosition, alert_message = 'Long(' + syminfo.ticker + '): Started')
strategy.entry(id = 'Short Entry', direction = strategy.short, when = openShortPosition, alert_message = 'Short(' + syminfo.ticker + '): Started')
strategy.exit(id = 'Long Take Profit', from_entry = 'Long Entry', limit = enableTrailing ? na : longTakeProfitPrice, trail_price = enableTrailing ? longTakeProfitPrice : na, trail_offset = enableTrailing ? longTrailingTakeProfitStepTicks : na, when = longIsActive, alert_message = 'Long(' + syminfo.ticker + '): Take Profit activated')
strategy.exit(id = 'Short Take Profit', from_entry = 'Short Entry', limit = enableTrailing ? na : shortTakeProfitPrice, trail_price = enableTrailing ? shortTakeProfitPrice : na, trail_offset = enableTrailing ? shortTrailingTakeProfitStepTicks : na, when = shortIsActive, alert_message = 'Short(' + syminfo.ticker + '): Take Profit activated')

plot(series = fastMA, title='Fast SMA', color = color.blue, linewidth = 1, style = plot.style_line)
plot(series = slowMA, title='Slow SMA', color = color.orange, linewidth = 1, style = plot.style_line)
plot(series = longTakeProfitPrice, title='Long Take Profit', color = color.green, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = shortTakeProfitPrice, title='Short Take Profit', color = color.red, linewidth = 1, style = plot.style_cross, offset = 1)
plot(series = strategy.position_avg_price, title='Position', color = color.white, linewidth = 1, style = plot.style_linebr)


Plus de