Esta estratégia identifica a direção da tendência atual, calculando médias móveis de diferentes períodos e gerando sinais de negociação combinados com o indicador RSI. Quando a média móvel de curto período cruza acima da média móvel de longo período, a tendência é considerada e um sinal de compra é gerado. Quando a média móvel de curto período cruza abaixo da média móvel de longo período, a tendência é considerada invertida e um sinal de venda é gerado. O indicador RSI é usado para evitar falsos sinais causados por pequenas flutuações de preços.
Calcule médias móveis simples de 10 dias, 20 dias, 50 dias, 100 dias e 200 dias.
Calcular o valor do RSI de 14 dias.
Quando a SMA de 10 dias cruzar acima da SMA de 50 dias, e o RSI for superior a 30, e a SMA de 20 dias for superior ou igual à SMA de 100 dias ou a SMA de 50 dias for superior ou igual à SMA de 100 dias, comprar.
A taxa de variação da taxa de variação da taxa de variação da taxa de variação da taxa de variação da taxa de variação da taxa de variação da taxa de variação da taxa de variação.
Vender quando:
Esta estratégia julga a tendência do mercado usando médias móveis e define stop loss para controlar os riscos. O RSI filtra falhas. Ele compra quando o SMA de curto período cruza acima do SMA de longo período, indicando uma tendência de alta, e define uma linha de stop loss para controlar os riscos durante o período de detenção. Ele vende quando ocorre um sinal de reversão da tendência ou o preço de stop loss é desencadeado.
A otimização pode ser feita através do ajuste de períodos de média móvel, níveis de stop loss, etc. Considere também a combinação com outros indicadores para melhorar a precisão.
A estratégia tem uma lógica geral clara, usando médias móveis para determinação de tendências e definindo stop loss para controlar riscos. É uma estratégia típica de rastreamento de tendências. Melhorias adicionais podem ser alcançadas através do ajuste de parâmetros e adição de outros indicadores.
/*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)