Cette stratégie implémente la fonctionnalité de définition de sorties de profit en pourcentage multiples. La stratégie juge d'abord les conditions longues et courtes pour entrer dans les positions. Elle utilise ensuite une fonction personnalisée percentAsPoints pour convertir les pourcentages en tiques de prix. Le programme définit 4 sorties avec des pourcentages de profit de 1%, 2%, 3% et 4% en fonction des configurations, et définit également une sortie de stop loss commune de 2%. Cela permet d'obtenir l'effet de sorties de profit en pourcentage multiples.
La logique de base de cette stratégie consiste à utiliser des croisements SMA pour déterminer les entrées. Plus précisément, lorsque le SMA rapide (14) franchit le sommet du SMA lent (28), il sera long. Lorsque le SMA rapide (14) franchit le sommet du SMA lent (28), il sera court.
Alors, comment définir des sorties de profit en pourcentage multiples? ici, une fonction personnalisée percentAsPoints est utilisée pour convertir les pourcentages en ticks de prix.
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
Si la taille de la position n'est pas égale à 0, il calcule les écarts de prix en pourcentage multiplié par le prix d'entrée moyen et divisé par la taille minimale des écarts.
Avec cette fonction, nous pouvons facilement convertir des pourcentages en ticks. Le programme définit alors 4 sorties basées sur des pourcentages de profit de 1%, 2%, 3% et 4%:
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
En outre, un stop loss commun de 2% est utilisé pour toutes les sorties.
Cette stratégie de sortie des bénéfices à pourcentage multiple présente les avantages suivants:
Il permet de réaliser des bénéfices étape par étape, en évitant de manquer des bénéfices plus importants.
Par exemple, avec une taille de lot de 25%, un profit de 1% peut rapporter 1/4 du capital, et les positions ultérieures sont toutes par bénéfices purs.
Le stop loss de 2% empêche les pertes extrêmes lors de mouvements anormaux du marché.
La mise en œuvre est simple et propre, facile à comprendre et à modifier.
Cette stratégie comporte également certains risques:
Les sorties en pourcentage peuvent causer des bouleversements latéraux, les prix oscillant autour des prix de sortie, ce qui déclenche des sorties fréquentes.
Les sorties par lots augmentent le nombre de transactions et les commissions.
Une mauvaise position de sortie pourrait également avoir un impact sur les rendements.
Les sorties à pourcentage fixe ne tiennent pas compte de la volatilité et des tendances du marché.
Compte tenu des risques susmentionnés, d'autres optimisations pourraient être apportées dans les domaines suivants:
Optimiser les sorties pour s'adapter en fonction de la volatilité et de la force du marché en utilisant des méthodes telles que les sorties ATR. sorties plus serrées dans les marchés agités et sorties plus larges dans les tendances fortes.
Optimiser les pourcentages et les plages de lots pour trouver des combinaisons optimales de risque et de rendement.
Réduisez le nombre de sorties pour éviter une survente. Par exemple, définissez une zone tampon de prix, sortez seulement après avoir dépassé un certain mouvement de prix.
Considérez les facteurs de commission, évitez les sorties où le bénéfice prévu est inférieur aux coûts de commission.
Utilisez les sorties du carnet de commandes basées sur la profondeur au lieu de déplacer les prix de sortie.
Cette stratégie permet d'obtenir l'effet de sorties de profit en pourcentage multiples, avec 4 sorties à 1%, 2%, 3% et 4%, permettant des sorties rentables progressives, et en utilisant un stop loss de 2% pour éviter d'énormes pertes dans les mouvements extrêmes.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-30 00:00:00 period: 3h basePeriod: 15m 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 //@version=4 strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10) 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) percentAsPoints(pcnt) => strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) lossPnt = percentAsPoints(2) strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt) strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt) strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt) strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt) profitPercent(price) => posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 (price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100 p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound") p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound") fill(p1, p2, color = color.red)