
L’idée principale de cette stratégie est de mettre en place deux points d’arrêt, et lorsque le premier point d’arrêt est déclenché, le point d’arrêt est déplacé vers le prix d’entrée, pour éviter que le stop ne soit bloqué.
Cette stratégie est basée sur l’entrée des bandes de Brin et stochastique. Faire une pause lorsque le prix dépasse la bande de Brin et une pause lorsque l’indicateur stochastique indique une survente.
La logique d’entrée de la stratégie est la suivante:
Faire une entrée supplémentaire lorsque le prix de clôture est en dessous de la bande de Brin et que la ligne Stochastic K sous la ligne D
L’entrée est vide lorsque le prix de clôture est supérieur à la bande de Brin et que la ligne Stochastic K traverse la ligne D
La stratégie impose deux points d’arrêt, le premier étant fixé à 200 et le second à 500.
Lorsque le premier point d’arrêt du mouvement des prix est déclenché, la stratégie déplace le point d’arrêt vers le prix d’entrée. Cela permet de bloquer les bénéfices de la première étape tout en évitant que les arrêts ne soient étouffés par les fluctuations des prix.
Lorsque le deuxième point d’arrêt est déclenché ou que le point d’arrêt de perte est déclenché, la stratégie est entièrement liquidée.
Le plus grand avantage de cette stratégie de stop loss en deux étapes est qu’elle permet de verrouiller les bénéfices tout en empêchant le stop loss d’être marginalisé par les fluctuations de prix. En déplaçant le point de stop loss vers le prix d’entrée, il est possible de réduire la probabilité que le stop loss soit marginalisé et de protéger les bénéfices.
Un autre avantage est que la stratégie utilise une combinaison de l’indicateur de Brin pour déterminer la portée des fluctuations des prix et de l’indicateur stochastique pour déterminer les surachats et les surventes, deux indicateurs qui se complètent mutuellement et peuvent améliorer l’exactitude de l’entrée.
Le principal risque de cette stratégie est que les indicateurs de la bande de Boolean et les indicateurs stochastiques peuvent générer des signaux erronés. Si le calcul de la bande de Boolean est erroné, cela entraînera une perte de temps d’entrée ou un signal erroné.
De plus, le déplacement du point de rupture vers le prix d’entrée présente le risque d’être à nouveau dévié. Si la tendance se transforme en V, le point de rupture peut être déclenché une deuxième fois.
Pour réduire ces risques, il est possible d’ajuster les paramètres de la bande de Bryn, d’optimiser la combinaison de paramètres de l’indicateur stochastique et d’augmenter l’intervalle de point d’arrêt de manière appropriée.
La stratégie d’arrêt des pertes en deux étapes peut être optimisée:
Il est possible de tester différentes combinaisons de paramètres, d’optimiser les paramètres des bandes de Boolean et les paramètres stochastiques pour trouver la combinaison optimale.
Il est possible de tester différents paramètres de stop-loss, d’optimiser la taille du stop-loss et de trouver la configuration optimale.
D’autres indicateurs, tels que les moyennes mobiles, peuvent être ajoutés pour former une stratégie de combinaison multi-indicateurs et améliorer l’exactitude des entrées.
Il est possible d’étudier différentes logiques de déplacement des points d’arrêt, comme le déplacement au-delà d’une certaine distance, plutôt que le prix d’entrée.
Il est possible d’augmenter le nombre de déplacements de points de rupture et de définir des déplacements de rupture en trois étapes ou plus.
Cette stratégie utilise l’indicateur de la ceinture de Brin et l’indicateur stochastique pour déterminer le moment d’entrée, définir deux points d’arrêt, déplacer le point d’arrêt vers le prix d’entrée après l’atteinte du premier point d’arrêt, formant une stratégie d’arrêt en deux étapes. Cette stratégie peut bloquer efficacement les bénéfices et empêcher les arrêts d’être bloqués. Les avantages de la stratégie sont évidents, mais il existe également une certaine marge d’amélioration.
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © fpsd4ve
//@version=5
// Add Bollinger Bands indicator (close, 20, 2) manually to visualise trading conditions
strategy("2xTP, SL to entry",
overlay=false,
pyramiding=0,
calc_on_every_tick=false,
default_qty_type=strategy.percent_of_equity,
default_qty_value=25,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.01
)
// PARAMETERS
// Assumes quote currency is FIAT as with BTC/USDT pair
tp1=input.float(200, title="Take Profit 1")
tp2=input.float(500, title="Take Profit 2")
sl=input.float(200, title="Stop Loss")
stOBOS = input.bool(true, title="Use Stochastic overbought/oversold threshold")
// Colors
colorRed = #FF2052
colorGreen = #66FF00
// FUNCTIONS
// Stochastic
f_stochastic() =>
stoch = ta.stoch(close, high, low, 14)
stoch_K = ta.sma(stoch, 3)
stoch_D = ta.sma(stoch_K, 3)
stRD = ta.crossunder(stoch_K, stoch_D)
stGD = ta.crossover(stoch_K, stoch_D)
[stoch_K, stoch_D, stRD, stGD]
// VARIABLES
[bbMiddle, bbUpper, bbLower] = ta.bb(close, 20, 2)
[stoch_K, stoch_D, stRD, stGD] = f_stochastic()
// ORDERS
// Active Orders
// Check if strategy has open positions
inLong = strategy.position_size > 0
inShort = strategy.position_size < 0
// Check if strategy reduced position size in last bar
longClose = strategy.position_size < strategy.position_size[1]
shortClose = strategy.position_size > strategy.position_size[1]
// Entry Conditions
// Enter long when during last candle these conditions are true:
// Candle high is greater than upper Bollinger Band
// Stochastic K line crosses under D line and is oversold
longCondition = stOBOS ?
low[1] < bbLower[1] and stGD[1] and stoch_K[1] < 25 :
low[1] < bbLower[1] and stGD[1]
// Enter short when during last candle these conditions are true:
// Candle low is lower than lower Bollinger Band
// Stochastic K line crosses over D line and is overbought
shortCondition = stOBOS ?
high[1] > bbUpper[1] and stRD[1] and stoch_K[1] > 75 :
high[1] > bbUpper[1] and stRD[1]
// Exit Conditions
// Calculate Take Profit
longTP1 = strategy.position_avg_price + tp1
longTP2 = strategy.position_avg_price + tp2
shortTP1 = strategy.position_avg_price - tp1
shortTP2 = strategy.position_avg_price - tp2
// Calculate Stop Loss
// Initialise variables
var float longSL = 0.0
var float shortSL = 0.0
// When not in position, set stop loss using close price which is the price used during backtesting
// When in a position, check to see if the position was reduced on the last bar
// If it was, set stop loss to position entry price. Otherwise, maintain last stop loss value
longSL := if inLong and ta.barssince(longClose) < ta.barssince(longCondition)
strategy.position_avg_price
else if inLong
longSL[1]
else
close - sl
shortSL := if inShort and ta.barssince(shortClose) < ta.barssince(shortCondition)
strategy.position_avg_price
else if inShort
shortSL[1]
else
close + sl
// Manage positions
strategy.entry("Long", strategy.long, when=longCondition)
strategy.exit("TP1/SL", from_entry="Long", qty_percent=50, limit=longTP1, stop=longSL)
strategy.exit("TP2/SL", from_entry="Long", limit=longTP2, stop=longSL)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.exit("TP1/SL", from_entry="Short", qty_percent=50, limit=shortTP1, stop=shortSL)
strategy.exit("TP2/SL", from_entry="Short", limit=shortTP2, stop=shortSL)
// DRAW
// Stochastic Chart
plot(stoch_K, color=color.blue)
plot(stoch_D, color=color.orange)
// Circles
plot(stOBOS ? stRD and stoch_K >= 75 ? stoch_D : na : stRD ? stoch_D : na, color=colorRed, style=plot.style_circles, linewidth=3)
plot(stOBOS ? stGD and stoch_K <= 25 ? stoch_D : na : stGD ? stoch_K : na, color=colorGreen, style=plot.style_circles, linewidth=3)
// Levels
hline(75, linestyle=hline.style_dotted)
hline(25, linestyle=hline.style_dotted)