Stratégie de prise de profit du Joker


Date de création: 2023-09-23 15:04:20 Dernière modification: 2023-09-23 15:04:20
Copier: 0 Nombre de clics: 786
1
Suivre
1617
Abonnés

Aperçu

La stratégie d’arrêt mobile Joker est une stratégie de suivi de la tendance basée sur les moyennes mobiles. Elle combine les caractéristiques d’un arrêt mobile et d’un arrêt mobile, afin de maximiser les gains lorsque la tendance se déplace dans une direction favorable, tout en évitant les pertes lorsque la tendance se déplace dans une direction défavorable.

Principe de stratégie

La stratégie utilise les moyennes mobiles rapides et les moyennes mobiles lentes pour construire des filtres de tendance. Lorsque la moyenne mobile rapide est traversée par la moyenne mobile lente, faites plus; lorsque la moyenne mobile rapide est traversée par la moyenne mobile lente, faites moins.

La stratégie commence par calculer le premier prix d’arrêt après l’ouverture de la position en fonction du pourcentage d’arrêt de la configuration. Si la fonction d’arrêt mobile est activée, la taille de l’étape de l’arrêt mobile est calculée en fonction du prix de variété de transaction le plus bas et du pourcentage d’arrêt de la configuration.

Lorsque la direction de la position est conforme à la direction du signal, si le stop mobile n’est pas activé, le stop est activé en utilisant la méthode de l’envoyeur unique de prix limité; si le stop mobile est activé, le stop est activé en utilisant la méthode de suivi, qui ajuste continuellement le prix du stop en fonction de la taille de l’étape.

Analyse des avantages

  • Les moyennes mobiles sont utilisées pour déterminer les principales tendances afin d’éviter que le bruit du marché ne perturbe trop la stratégie.

  • L’activation de l’arrêt mobile permet d’ajuster la position de l’arrêt en fonction de l’évolution du marché, ce qui garantit que la position d’arrêt est toujours proche du prix. C’est plus flexible et plus efficace que de définir un prix d’arrêt fixe.

  • Le stop mobile permet de verrouiller plus de bénéfices et réduit le risque de dépréciation de la stratégie. Il évite également le problème de la position d’arrêt trop conservatrice et de la verrouillage prématurée des bénéfices, qui peut survenir avec un seul stop fixe.

  • Le stop mobile conserve l’avantage de la mise en place d’un stop-loss, qui peut être arrêté le plus tôt possible lorsque la situation devient défavorable.

Analyse des risques

  • Les moyennes mobiles sont sujettes à des signaux erronés ou à un retard de signal lorsque les prix fluctuent fortement. Cela peut entraîner une perte de position inversée de la stratégie. Les paramètres des moyennes mobiles peuvent être ajustés de manière appropriée ou un filtre peut être ajouté pour optimiser.

  • Un taux d’arrêt trop élevé augmente également le temps de tenue de la stratégie et l’écart entre le prix d’arrêt réel et le prix théorique. Un taux d’arrêt approprié peut être réduit pour réduire ce risque.

  • Le décalage de l’arrêt mobile est trop petit, ce qui entraîne une fréquence de déplacement trop élevée, augmentant les frais de transaction et le risque de glissement. Le décalage de l’arrêt mobile peut être ajusté de manière appropriée pour optimiser.

  • Le stop mobile ne prend en compte que les mouvements unilatéraux et ne prend pas en compte les retraits. Cela signifie que le prix revient une fois de plus et que le stop mobile ne se redresse pas. Cela peut entraîner un écart du prix théorique de l’exécution finale du stop.

Direction d’optimisation

  • On peut envisager d’ajuster les paramètres de la moyenne mobile en fonction de la dynamique des fluctuations du marché, en augmentant les cycles lorsque les fluctuations augmentent et en diminuant les cycles lorsque les fluctuations diminuent.

  • Il est possible d’étudier les caractéristiques des différentes variétés et des différents marchés, de définir différents ratios d’arrêt par défaut et de réduire le risque de déviation de l’arrêt.

  • On peut étudier les mécanismes d’arrêt de mouvement bilatéraux, qui déplacent le stop vers le haut lorsque le prix atteint un nouveau sommet, et vers le bas lorsque des retraits se produisent, ce qui rend le stop plus proche du prix.

  • On peut envisager de combiner avec l’indicateur de la force de la tendance, de réduire le taux d’arrêt lorsque la tendance est faible et d’augmenter le taux d’arrêt lorsque la tendance est forte.

  • On peut envisager de combiner avec des modèles d’apprentissage automatique pour définir dynamiquement le ratio de freinage en utilisant la fourchette de prix prédite par le modèle.

Résumer

La structure globale de la stratégie de stop-loss mobile de Joker est claire, elle utilise la moyenne mobile pour déterminer la direction de la tendance, puis ajuste dynamiquement la position de son stop-loss pour bloquer les bénéfices. Elle présente à la fois les avantages d’un stop-loss mobile et d’un stop-loss mobile, permettant de suivre efficacement la tendance tout en contrôlant les risques.

Code source de la stratégie
/*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)