
Cette stratégie utilise un système de double équilibre pour rechercher des opportunités de rupture potentielles dans un stock ou une monnaie numérique spécifique. Son principe de base est d’acheter des actions ou des monnaies numériques lorsque le cours moyen à court terme rebondit en dessous du cours moyen à long terme.
La stratégie utilise une moyenne mobile simple (SMA) de deux périodes différentes comme signal de négociation. La première période de SMA est plus longue, représentant la direction de la tendance globale. La deuxième période de SMA est plus courte, utilisée pour capturer les fluctuations de prix à court terme.
Lorsque le SMA court court est porté par le SMA long en dessous, cela signifie que le prix est dans une tendance à la hausse dans l’ensemble, et donc la stratégie ouvre une position sur plusieurs têtes. Lorsque le prix baisse et reteste le SMA long, cela indique la fin du pullback court, et la stratégie prend en compte le stop-loss ou le profit pour fermer la position.
En outre, la stratégie impose des conditions de survente et d’achat pour éviter de négocier dans des situations extrêmes. Les positions ne sont ouvertes que si elles répondent simultanément aux conditions de double croisement de la courbe et d’évaluation raisonnable.
Il y a encore de la place pour optimiser cette stratégie:
Cette stratégie intègre les avantages du suivi des tendances et des transactions de retournement, en utilisant un système bi-linéaire pour juger de l’apparition d’opportunités. En même temps, l’ouverture de positions inutiles est évitée en intégrant certaines conditions de surachat et de surachat. C’est une stratégie de trading quantitative très pratique qui mérite une étude et une optimisation approfondies.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2 = (ma2/ma1-1) < too_deep
too_thin2 = (ma2/ma1-1) > too_thin
// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na
// Entry and close orders
if buy_condition
strategy.entry('Long',strategy.long)
if buy_condition[1]
buy_price := open
if close_condition1 or close_condition2
strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
buy_price := na
plot(ma1,color = color.blue)
plot(ma2,color = color.orange)