Strategi ini mengidentifikasi arah tren saat ini dengan menghitung rata-rata bergerak dari periode yang berbeda dan menghasilkan sinyal perdagangan yang dikombinasikan dengan indikator RSI. Ketika rata-rata bergerak periode pendek melintasi di atas rata-rata bergerak periode panjang, tren tersebut dipertimbangkan dan sinyal beli dihasilkan. Ketika rata-rata bergerak periode pendek melintasi di bawah rata-rata bergerak periode panjang, tren dianggap terbalik dan sinyal jual dihasilkan. Indikator RSI digunakan untuk menghindari sinyal palsu yang disebabkan oleh fluktuasi harga kecil.
Hitung rata-rata bergerak sederhana 10 hari, 20 hari, 50 hari, 100 hari dan 200 hari.
Menghitung nilai RSI 14 hari.
Ketika SMA 10 hari melintasi SMA 50 hari, dan RSI lebih besar dari 30, dan SMA 20 hari lebih besar dari atau sama dengan SMA 100 hari atau SMA 50 hari lebih besar dari atau sama dengan SMA 100 hari, beli.
Atur harga stop loss ke harga masuk dikalikan dengan (1 - persentase stop loss).
Jual saat:
Strategi ini menilai tren pasar dengan menggunakan moving average dan menetapkan stop loss untuk mengendalikan risiko. RSI menyaring breakout palsu. Ini membeli ketika SMA jangka pendek melintasi SMA jangka panjang, menunjukkan tren naik, dan menetapkan garis stop loss untuk mengendalikan risiko selama periode kepemilikan. Ini menjual ketika sinyal pembalikan tren terjadi atau harga stop loss dipicu.
Optimasi dapat dilakukan melalui penyesuaian periode rata-rata bergerak, tingkat stop loss dll. Juga pertimbangkan untuk menggabungkan dengan indikator lain untuk meningkatkan akurasi.
Strategi ini memiliki logika yang jelas secara keseluruhan, menggunakan rata-rata bergerak untuk penentuan tren dan mengatur stop loss untuk mengendalikan risiko. Ini adalah strategi pelacakan tren khas. Peningkatan lebih lanjut dapat dicapai melalui penyesuaian parameter dan penambahan indikator lain.
/*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)