Strategi ini menghasilkan sinyal beli dan jual dengan menghitung rata-rata bergerak dari berbagai periode, mengidentifikasi arah tren saat ini, dan menggabungkannya dengan indikator RSI. Jika rata-rata bergerak pendek melewati rata-rata bergerak jangka panjang, maka tren akan naik, dan Anda akan membeli. Jika rata-rata bergerak pendek melewati rata-rata bergerak jangka panjang, maka tren akan berbalik.
Perhitungan rata-rata bergerak sederhana 10, 20, 50, 100 dan 200 hari.
RSI 14 hari dihitung
Ketika 10 hari SMA melewati 50 hari SMA, dan RSI lebih besar dari 30, dan 20 hari SMA lebih tinggi dari atau sama dengan 100 hari SMA atau 50 hari SMA lebih tinggi dari atau sama dengan 100 hari SMA, melakukan pembelian.
Setel harga stop loss sebagai titik beli dikali 1 dikurangi persentase stop loss.
Penjualan dilakukan jika:
Strategi ini menilai arah tren pasar melalui rata-rata bergerak dan mengatur stop loss untuk mengendalikan risiko. Indikator RSI digunakan untuk memfilter terobosan palsu. Beli di SMA jangka pendek saat melewati SMA jangka panjang, yang menunjukkan tren ke atas, dan pegang garis stop loss untuk melakukan kontrol risiko.
Pengoptimalan dapat dilakukan dengan mengadaptasi siklus moving average, mengadaptasi titik stop loss, dan lain-lain. Pengoptimalan juga dapat dipertimbangkan untuk meningkatkan akurasi keputusan dengan menggabungkan indikator lain.
Strategi ini secara keseluruhan memiliki ide yang jelas, menggunakan pergerakan rata-rata untuk menilai tren, dan menetapkan stop loss untuk mengendalikan risiko, merupakan strategi pelacakan tren yang lebih khas. Dengan mengoptimalkan parameter dan menambahkan indikator penilaian lainnya, dapat meningkatkan kinerja strategi dan kinerja saham.
/*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)