Cette stratégie permet de calculer les moyennes mobiles de différentes périodes, d’identifier la direction de la tendance actuelle et d’envoyer un signal d’achat et de vente en combinaison avec l’indicateur RSI. Lorsqu’une moyenne mobile à court terme traverse une moyenne mobile à long terme, elle considère la tendance à la hausse et effectue une opération d’achat. Lorsqu’une moyenne mobile à court terme traverse une moyenne mobile à long terme, elle considère une inversion de tendance et effectue une opération de vente.
Les moyennes mobiles simples sont calculées sur 10, 20, 50, 100 et 200 jours.
Le RSI à 14 jours est calculé.
Un achat est effectué lorsque le SMA du 10e jour dépasse le SMA du 50e jour et que le RSI est supérieur à 30 et que le SMA du 20e jour est supérieur ou égal au SMA du 100e jour ou que le SMA du 50e jour est supérieur ou égal au SMA du 100e jour.
Réglez le prix de stop loss sur le point d’achat multiplié par 1 moins le pourcentage de stop loss.
La vente est effectuée lorsque:
La stratégie consiste à déterminer la direction de la tendance du marché à l’aide d’une moyenne mobile et à définir un stop-loss pour contrôler le risque. L’indicateur RSI est utilisé pour filtrer les fausses percées.
L’optimisation peut être réalisée par l’ajustement des cycles des moyennes mobiles, l’ajustement des points d’arrêt, etc. Il est également possible d’envisager d’améliorer l’exactitude des décisions en les combinant avec d’autres indicateurs.
Cette stratégie est une stratégie de suivi de tendance typique qui utilise des moyennes mobiles pour juger de la tendance et définir des arrêts pour contrôler le risque. En ajustant les paramètres et en ajoutant d’autres indicateurs de jugement, la rétroaction stratégique et la performance du marché peuvent être encore améliorées. Cependant, aucune stratégie ne peut être parfaite et nécessite un ajustement et une optimisation constants en fonction de l’environnement du marché, en combinaison avec la gestion des risques pour faire face à l’incertitude du marché.
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA_Script", overlay=true)
// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)
// Configure backtest start date with inputs
startDate=input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth=input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear=input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100)
// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))
// Calculate Relative Strength Index
rsiValue=rsi(close, 14)
// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)
MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)
MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)
MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1)
MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1)
// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low
// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >= MA100_Val) or (MA50_Val >= MA100_Val))
avg_price = (close + open)/2
// First Entry
if (afterStartDate)
strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)
plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')
// Determine trail stop loss prices
longStopPrice=0.0
longStopPrice :=if (strategy.position_size > 0)
stopValue=C_BodyHi * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
plot(longStopPrice, color=color.orange, linewidth=1)
bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)
// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')
id_val = ""
stop_val = close
condition = false
if sellCondition_1
id_val := "Exit By Stop Loss At 7%"
stop_val := entry_Point_1*0.93
condition := true
else if sellCondition_2
id_val := "Exit By Take Profit based on MA"
stop_val := close
condition := true
else if sellCondition_3
id_val := "Exit By Trailing Stop"
stop_val := longStopPrice
condition := true
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
//strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
//strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)