Strategi mengikuti tren berdasarkan rata-rata pergerakan


Tanggal Pembuatan: 2023-10-07 15:04:00 Akhirnya memodifikasi: 2023-10-07 15:04:00
menyalin: 0 Jumlah klik: 626
1
fokus pada
1617
Pengikut

Ringkasan

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.

Prinsip Strategi

  1. Perhitungan rata-rata bergerak sederhana 10, 20, 50, 100 dan 200 hari.

  2. RSI 14 hari dihitung

  3. 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.

  4. Setel harga stop loss sebagai titik beli dikali 1 dikurangi persentase stop loss.

  5. Penjualan dilakukan jika:

    • SMA 10 melewati SMA 50 dan ditutup di bawah SMA 20: trend reversed sell out
    • Harga penutupan kurang dari 95% dari harga pembelian: Stop loss dan jual
    • Penutupan harga di bawah harga stop loss: trend tracking stop loss sold

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.

Analisis Keunggulan

  • Menggunakan Moving Average untuk menentukan arah tren, membeli di fase tren yang lebih tinggi, dan menghindari perdagangan yang berputar di pasar yang bergoyang
  • Menggunakan rata-rata bergerak multi-periode untuk menghindari tertipu oleh fluktuasi harga jangka pendek
  • Untuk memfilter sinyal palsu dengan indikator RSI
  • Tetapkan Stop Loss Line untuk Mengontrol Risiko Kerugian Tunggal
  • Menggunakan Trend Tracking Stop Loss untuk Mengunci Keuntungan

Analisis risiko

  • Rata-rata bergerak tertinggal dan mungkin melewatkan waktu terbaik untuk membalikkan harga
  • Stop loss yang terlalu longgar dapat menyebabkan kerugian tunggal yang besar
  • Stop loss yang terlalu ketat dapat menyebabkan stop loss yang terlalu sering
  • Trend Tracker Stop Loss: Mungkin Kehilangan Lebih Banyak Uang dengan Keluar Lebih Awal

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.

Arah optimasi

  • Menyesuaikan siklus moving average agar lebih sesuai dengan kondisi pasar yang berbeda
  • Optimalkan parameter RSI untuk meningkatkan akurasi penilaian overbought dan oversold
  • Sesuai dengan karakteristik varietas yang berbeda, mengatur static stop dan trail stop yang masuk akal
  • Menambahkan penilaian indikator lain untuk menghindari sinyal palsu
  • Stop loss dapat disesuaikan secara dinamis dengan indikator seperti volatilitas
  • Parameter yang dapat dioptimalkan secara otomatis melalui metode pembelajaran mesin

Meringkaskan

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.

Kode Sumber Strategi
/*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)