이 전략은 다양한 기간의 이동 평균을 계산하여 현재 트렌드 방향을 파악하고 RSI 지표와 결합하여 거래 신호를 생성합니다. 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘을 때 트렌드가 고려되고 구매 신호가 생성됩니다. 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘을 때 트렌드가 역전되어 판매 신호가 생성됩니다. RSI 지표는 사소한 가격 변동으로 인한 잘못된 신호를 피하기 위해 사용됩니다.
10일, 20일, 50일, 100일, 200일 간 간단한 이동평균을 계산합니다.
14일 RSI 값을 계산해
10일 SMA가 50일 SMA를 넘어서고, RSI가 30보다 높고, 20일 SMA가 100일 SMA보다 높거나 100일 SMA보다 높거나 50일 SMA가 100일 SMA보다 높거나 100일 SMA보다 높을 때 구매합니다.
스톱 로스 가격을 엔트리 가격에 곱한 값으로 설정합니다 (1 - 스톱 로스 비율).
판매 시:
이 전략은 이동 평균을 사용하여 시장 트렌드를 판단하고 위험을 제어하기 위해 스톱 로스를 설정합니다. RSI는 잘못된 브레이크오프를 필터합니다. 단기 SMA가 장기 기간 SMA를 넘어서면 구매하고 상승 추세를 나타냅니다. 보유 기간 동안 위험을 제어하기 위해 스톱 로스 라인을 설정합니다. 트렌드 역전 신호가 발생하거나 스톱 로스 가격이 유발되면 판매합니다.
최적화는 이동 평균 기간, 중지 손실 수준 등을 조정함으로써 수행 될 수 있습니다. 또한 정확도를 향상시키기 위해 다른 지표와 결합하는 것을 고려하십시오.
이 전략은 전반적으로 명확한 논리를 가지고 있으며, 트렌드 결정 및 위험을 제어하기 위해 스톱 로스를 설정하기 위해 이동 평균을 사용합니다. 이것은 전형적인 트렌드 추적 전략입니다. 매개 변수 조정 및 다른 지표를 추가함으로써 추가 개선이 가능합니다. 그러나 전략은 완벽하지 않으며 적절한 위험 관리와 함께 시장 불확실성을 대처하기 위해 지속적인 조정 및 최적화가 필요합니다.
/*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)