Une stratégie d'arrêt des pertes et de prise de bénéfices basée sur des indicateurs

Auteur:ChaoZhang est là., Date: 2023-11-10 11:28:06 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise une moyenne mobile comme signaux de trading et la combine avec des ratios de stop loss et de profit définis par l'utilisateur pour mettre en œuvre une stratégie complète de stop loss et de profit basée sur des indicateurs.

La logique de la stratégie

La logique de base de cette stratégie est la suivante:

  1. Utilisez la SMA à 3 périodes comme signal de trading, allez long lorsque la SMA dépasse 0, et allez court lorsque la SMA dépasse 0.

  2. Après avoir entré dans un commerce, les utilisateurs peuvent personnaliser le stop loss et prendre des ratios de profit.

  3. Basé sur le prix d'entrée et le taux de stop loss défini par l'utilisateur, définir automatiquement la ligne de stop loss.

  4. Basé sur le prix d'entrée et le taux de profit fixé par l'utilisateur, définit automatiquement la ligne de profit.

  5. Quand le prix touche la ligne stop-loss, arrêtez-vous automatiquement.

  6. Après la clôture des positions, annulez automatiquement les ordres de stop loss et de profit.

Plus précisément, la stratégie calcule la SMA à 3 périodes à l'aide de la fonction sma et l'attribue à la variable ma.

Ensuite, il calcule la longueur de la ligne d'entrée longue, qui est ma plus ma% de lo. lo est un paramètre réglable par l'utilisateur pour le décalage de la ligne d'entrée longue.

Lorsque ma dépasse 0, il indique une entrée longue.

Dans le même temps, les prix stop loss et take profit sont définis. Le prix stop loss est le prix d'entrée moins le prix d'entrée% de sl. sl est le paramètre du ratio de stop loss réglable par l'utilisateur. Le prix take profit est le prix d'entrée plus le prix d'entrée% de tp. tp est le paramètre du ratio take profit réglable par l'utilisateur.

La fonction de stratégie.entrée définit les ordres stop loss et take profit séparément. Lorsque le prix touche la ligne stop loss, il s'arrêtera automatiquement. Lorsque le prix touche la ligne profit, il prendra automatiquement le profit.

Après la clôture des positions, les ordres stop loss et take profit sont automatiquement annulés à l'aide de la fonction strategy.cancel.

Les avantages

Les avantages de cette stratégie:

  1. Un haut degré d'automatisation, aucune intervention manuelle n'est nécessaire, adapté au trading par algorithme.

  2. Des taux de stop loss et de profit à prendre personnalisables pour contrôler le risque.

  3. Les signaux commerciaux proviennent de l'indicateur, évitant une fausse rupture.

  4. Visualiser le stop loss et le profit, intuitif.

  5. Une logique stratégique simple et claire, facile à comprendre et à mettre en œuvre.

Risques et solutions

Cette stratégie comporte également certains risques:

  1. Risque de faux signaux de l'indicateur La solution consiste à optimiser les paramètres pour assurer une fiabilité de l'indicateur.

  2. La solution consiste à ajuster les ratios pour les différents marchés.

  3. La solution consiste à filtrer les signaux d'entrée par tendance, volume, etc.

  4. La solution est de réduire la taille de la position ou d'utiliser un stop-loss.

Directions d'optimisation

Quelques orientations pour optimiser la stratégie:

  1. Optimiser les paramètres de moyenne mobile pour une fiabilité optimale.

  2. Optimiser les conditions d'entrée pour éviter une fausse rupture, ajouter une confirmation de volume, etc.

  3. Optimiser le stop loss et le profit, utiliser le stop loss dynamique ou de trailing, etc.

  4. Optimiser la gestion des risques, ajuster la taille des positions, réduire le risque unique.

  5. Optimiser le timing d'entrée, combiner avec la tendance, le support/résistance, etc.

  6. Ajoutez la pyramide pour les gains composés.

  7. Optimisation des paramètres pour des produits spécifiques.

Conclusion

Cette stratégie fournit un cadre technique simple et fiable pour un stop loss et un profit axés sur les indicateurs avec des avantages tels que l'automatisation et le contrôle des risques. Elle convient au trading algorithmique.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("example for panel signals", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//https://www.tradingview.com/script/m2a04xmb-noro-s-shiftma-tp-sl-strategy/
//Settings
lo = input(-5.0, title = "Long-line, %")
tp = input(5.0, title = "Take-profit")
sl = input(2.0, title = "Stop-loss")

//SMA
ma = sma(ohlc4, 3)
long = ma + ((ma / 100) * lo)

//Orders
avg = strategy.position_avg_price
if ma > 0
    strategy.entry("Long", strategy.long, limit = long)
    strategy.entry("Take", strategy.short, 0, limit = avg + ((avg / 100) * tp))
    strategy.entry("Stop", strategy.short, 0, stop = avg - ((avg / 100) * sl))
    
//Cancel order
if strategy.position_size == 0
    strategy.cancel("Take")
    strategy.cancel("Stop")

//Lines
plot(long, offset = 1, color = color.black, transp = 0)
take = avg != 0 ? avg + ((avg / 100) * tp) : long + ((long / 100) * tp)
stop = avg != 0 ? avg - ((avg / 100) * sl) : long - ((long / 100) * sl)
takelinecolor = avg == avg[1] and avg != 0 ? color.lime : na
stoplinecolor = avg == avg[1] and avg != 0 ? color.red : na
plot(take, offset = 1, color = takelinecolor, linewidth = 3, transp = 0)
plot(stop, offset = 1, color = stoplinecolor, linewidth = 3, transp = 0)
//
disp_panels = input(true, title="Display info panels?")
h=high
info_label_off = input(20, title="Info panel offset")
info_label_size = input(size.large, options=[size.tiny, size.small, size.normal, size.large, size.huge], title="Info panel label size")
info_panel_x = timenow + round(change(time)*info_label_off)
info_panel_y = h

info_title= "-=-=-=-=- Info Panel -=-=-=-=-"
info_div = "\n\n------------------------------"
a = "\n\ Long : " + tostring(long)
b = "\n\ Stop loss : " + tostring(stop)
c = "\n\ TP : " + tostring(take)
// info_text = a+c+b
// info_panel = disp_panels ? label.new(x=info_panel_x, y=info_panel_y, text=info_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.yellow, style=label.style_labelup, textcolor=color.black, size=info_label_size) : na
// label.delete(info_panel[1])




Plus de