Stratégie de stop loss et de prise de profit basée sur le prix

Auteur:ChaoZhang est là., Date: 2023-11-23 à 15h36
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est d'utiliser les montants d'entrée de stop loss et de prise de profit pour définir des niveaux raisonnables de stop loss et de prise de profit, afin de gérer le risque et la récompense de chaque transaction.

La logique de la stratégie

La stratégie définit d'abord des signaux d'entrée aléatoires, allant long lorsque SMA14 traverse SMA28, et court lorsque SMA14 traverse sous SMA28.

Après l'entrée, la stratégie utilise la fonction moneyToSLPoints pour calculer le niveau de tick de stop loss basé sur l'entrée de la somme de stop loss en dollars. De même, elle calcule également le niveau de tick de take profit. Cela implémente un stop loss et un take profit basé sur des montants en dollars.

Par exemple, si vous passez 100 contrats longs avec chaque tick d'une valeur de 10 $ et que le stop loss est fixé à 100 $, le niveau de tick stop loss serait calculé comme 100/10/100 = 0,1 ticks.

Enfin! Je vous en prie!strategy.exitLes lignes de stop loss et de take profit sont également tracées à des fins de débogage.

Analyse des avantages

Le plus grand avantage de cette stratégie de stop loss et de take profit basée sur le prix est que les paramètres sont intuitifs.

En outre, les arrêts au dollar peuvent mieux contrôler l'exposition au risque réel par rapport aux arrêts fixes lorsque la volatilité du marché change.

Analyse des risques

Il y a quelques risques avec cette stratégie de stop loss et take profit:

  1. Si le stop loss est trop large, il est facile d'être pris au piège par des renversements.

  2. Si la distance de prise de profit est très petite, il serait difficile pour les tendances unilatérales normales de l'atteindre, ce qui rend les profits peu probables.

  3. Si un contrat à valeur de tique élevée comme le pétrole brut est utilisé, le même stop loss en dollars se traduirait par de très faibles tiques, qui peuvent facilement être arrêtées par le bruit.

Directions d'optimisation

Certaines façons d'améliorer cette stratégie sont les suivantes:

  1. Le signal d'entrée peut être amélioré en combinant mieux la tendance, la volatilité, la saisonnalité, etc. aux entrées temporelles.

  2. Des pourcentages d'arrêt/bénéfice appropriés peuvent être choisis en fonction de différents produits.

  3. Les stops peuvent s'adapter à la volatilité, s'élargir lorsque la volatilité augmente et se resserrer lorsque la volatilité diminue.

  4. Des arrêts plus serrés peuvent être utilisés pendant la session américaine pour réduire les risques d'être pris au piège.

Conclusion

Cette stratégie met en œuvre un stop loss intuitif et un profit basé sur les montants en dollars. Ses avantages sont des paramètres intuitifs et un contrôle du capital. Les inconvénients sont la facilité de se faire prendre dans les renversements et les profits manquants.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Plus de