Stratégies de sortie avec des bénéfices à pourcentages multiples


Date de création: 2023-12-01 15:22:29 Dernière modification: 2023-12-01 15:22:29
Copier: 0 Nombre de clics: 639
1
Suivre
1619
Abonnés

Stratégies de sortie avec des bénéfices à pourcentages multiples

Aperçu

Cette stratégie permet de définir plusieurs points d’arrêt de pourcentage. La stratégie détermine d’abord les conditions de longueur et de longueur, puis effectue plusieurs points d’arrêt. Elle convertit ensuite les pourcentages en points de prix via une fonction personnalisée de percentageAsPoints.

Principe de stratégie

Cette stratégie est principalement basée sur le croisement de plusieurs espaces entre les lignes moyennes de sma. Plus précisément, l’entrée est plus importante lorsque la ligne rapide passe la ligne lente sma sur sma 14 et vide lorsque la ligne rapide passe la ligne lente sous sma 28.

Le problème est de savoir comment mettre en place plusieurs points de pourcentage pour l’exit. On utilise une fonction personnalisée %AsPoints pour convertir les points de pourcentage en points de prix.

percentAsPoints(pcnt) => 
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

Cette fonction obtient le nombre de points de prix en utilisant le pourcentage multiplié par le prix moyen de la position et divisé par le prix le plus bas si la position n’est pas égale à 0. Si la position est égale à 0, elle renvoie na

Avec cette fonction, nous pouvons facilement convertir le pourcentage en un nombre entier. Ensuite, le programme suit les paramètres de 1%, 2%, 3% et 4%, et définit 4 sorties:

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)  

Toutes les sorties utilisent un stop-loss de 2%, ce qui permet d’obtenir plusieurs pourcentages de stop-loss.

Analyse des avantages

Cette stratégie de réduction de plusieurs pourcentages présente les avantages suivants:

  1. Il est possible d’arrêter de travailler à l’arrière pour éviter de rater une occasion de gagner plus d’argent. En général, plus on s’arrête à l’arrière, plus le risque est grand, et cette stratégie peut équilibrer les risques et les avantages.

  2. Le blocage par lots permet de récupérer le capital et de réduire le risque. Par exemple, en définissant un lot de 25%, le quart du capital peut être récupéré lorsque le profit atteint 1%. Les positions suivantes sont basées sur le profit.

  3. La réduction de 2% des pertes est un moyen de prévenir les pertes massives causées par les événements extrêmes.

  4. Le code est simple, clair, facile à comprendre, facile à modifier et à optimiser. La fonction personnalisée convertit le pourcentage en un nombre de points, puis plusieurs lignes de code permettent de définir plusieurs points de pause.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Les points de pourcentage sont sujets à des oscillations horizontales, les prix oscillant autour du point d’arrêt. Cela déclenche fréquemment des points d’arrêt, ce qui augmente la fréquence des transactions et le fardeau des frais de traitement.

  2. Le blocage des lots augmente le nombre de transactions et augmente le fardeau des frais de traitement. Si les frais de traitement sont trop élevés, ils sont compensés par une partie des bénéfices de blocage.

  3. Une mauvaise configuration des points d’arrêt peut également affecter le taux de rendement. Si la configuration est trop conservatrice, il est difficile d’obtenir des rendements satisfaisants; et si elle est trop radicale, le risque est trop élevé.

  4. Le stop est fixé en pourcentage, sans tenir compte de la volatilité et de la tendance du marché. En cas de choc, le stop devrait être réduit, et en cas de tendance, le stop devrait être augmenté.

Direction d’optimisation

Compte tenu des risques mentionnés ci-dessus, il est possible de poursuivre l’optimisation dans les domaines suivants:

  1. Optimiser les stratégies de freinage pour qu’elles s’adaptent automatiquement à la volatilité et à la tendance du marché. Par exemple, ajouter un freinage ATR, resserrer le freinage lors d’une secousse et relâcher le freinage dans une tendance.

  2. Optimiser le ratio et l’amplitude de l’arrêt par lots pour obtenir la combinaison optimale de risques et de bénéfices. Ajouter la fonction d’optimisation des paramètres pour trouver les paramètres optimaux.

  3. Réduisez le nombre de stop-loss et évitez les transactions trop fréquentes. Par exemple, définissez une zone de sécurité des prix qui ne s’arrête que si elle dépasse une certaine marge.

  4. Prendre en compte le facteur de frais de commande, et non seulement les frais de commande lorsque le profit de l’arrêt est inférieur aux frais de commande. Ou optimiser les marges d’arrêt en fonction des frais de commande.

  5. Utilisez le bloc-notes. Évitez de déplacer le prix du bloc-notes en fonction de la priorité de la profondeur de l’offre.

Résumer

Cette stratégie permet de réaliser plusieurs arrêts de pourcentage, avec un arrêt de 1%, 2%, 3% et 4%, quatre arrêts d’exit, qui peuvent être arrêtés par poste, tout en utilisant un arrêt de 2% pour éviter des pertes massives en cas d’anomalie. Cette stratégie peut équilibrer les gains de risque et empêcher de manquer des opportunités plus lucratives. Cependant, il existe également certains risques, tels que la possibilité de formation d’oscillations horizontales, l’augmentation de la fréquence des transactions, etc.

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