Strategi mengikut arah aliran berdasarkan purata bergerak


Tarikh penciptaan: 2023-10-07 15:04:00 Akhirnya diubah suai: 2023-10-07 15:04:00
Salin: 0 Bilangan klik: 626
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menghasilkan isyarat jual beli dengan mengira purata bergerak dari pelbagai kitaran, mengenal pasti arah trend semasa, dan menggabungkannya dengan indikator RSI. Apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang, ia dianggap sebagai trend ke atas, dan ia melakukan pembelian. Apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang, ia dianggap sebagai pembalikan trend, dan ia melakukan penjualan.

Prinsip Strategi

  1. Hitung purata bergerak mudah untuk 10, 20, 50, 100 dan 200 hari.

  2. RSI 14 hari dikira.

  3. Beli apabila 10 hari SMA menembusi 50 hari SMA, dan RSI lebih besar daripada 30, dan 20 hari SMA lebih tinggi atau sama dengan 100 hari SMA atau 50 hari SMA lebih tinggi atau sama dengan 100 hari SMA.

  4. Tetapkan harga hentian rugi sebagai titik beli kali 1 tolak peratus hentian rugi.

  5. Jualan dilakukan apabila:

    • 10 hari SMA di bawah 50 hari SMA, dan harga penutupan di bawah 20 hari SMA: trend berbalik menjual
    • Harga penutupan kurang daripada 95% harga pembelian: Hentikan kerugian dan jual
    • Penutupan harga lebih rendah daripada harga hentian: trend mengikut hentian kerugian dijual

Strategi ini menilai arah trend pasaran dengan menggunakan purata bergerak dan menetapkan stop loss untuk mengawal risiko. Indikator RSI digunakan untuk menyaring penipuan palsu. Beli ketika SMA jangka pendek melintasi SMA jangka panjang, menunjukkan trend ke atas, dan atur garis stop loss untuk mengawal risiko ketika memegang saham. Jual saham apabila isyarat pembalikan trend berlaku atau apabila harga stop loss dipicu.

Analisis kelebihan

  • Menggunakan purata bergerak untuk menentukan arah trend, membeli pada tahap ke atas trend, untuk mengelakkan perdagangan untuk menyelesaikan pasaran yang bergolak
  • Menggunakan purata bergerak berkala untuk mengelakkan tertipu oleh turun naik harga jangka pendek
  • Menapis isyarat palsu dengan RSI
  • Tetapkan garis hentian untuk mengawal risiko kerugian tunggal
  • Menggunakan Trend Tracking Stop Loss untuk Kunci Keuntungan

Analisis risiko

  • Rata-rata bergerak terlewat dan mungkin terlepas peluang terbaik untuk harga berbalik
  • Tetapan stop loss yang terlalu longgar boleh menyebabkan kerugian tunggal yang lebih besar
  • Tetapan stop loss terlalu ketat boleh menyebabkan stop loss terlalu kerap
  • Trend Tracker Stop Loss: Mungkin Kehilangan Lebih Banyak Dolar Selepas Berlepas Lebih Awal

Pengoptimuman boleh dilakukan dengan cara menyesuaikan kitaran purata bergerak, menyesuaikan titik berhenti, dan lain-lain. Anda juga boleh mempertimbangkan untuk menggabungkan indikator lain untuk meningkatkan ketepatan keputusan.

Arah pengoptimuman

  • Menyesuaikan kitaran purata bergerak agar lebih sesuai dengan keadaan pasaran yang berbeza
  • Mengoptimumkan parameter RSI untuk meningkatkan ketepatan penilaian overbought dan oversold
  • Tetapkan static stop dan trail stop yang munasabah mengikut ciri-ciri pelbagai jenis
  • Menambah pengukuran lain untuk mengelakkan isyarat palsu
  • Titik hentian boleh disesuaikan secara dinamik dengan indikator seperti kadar turun naik
  • Parameter yang boleh dioptimumkan secara automatik melalui kaedah pembelajaran mesin

ringkaskan

Strategi ini mempunyai pemikiran keseluruhan yang jelas, menggunakan trend penilaian rata-rata bergerak, dan menetapkan stop loss untuk mengawal risiko, merupakan strategi pemantauan trend yang lebih tipikal. Dengan menyesuaikan parameter dan menambah petunjuk penghakiman lain, anda dapat meningkatkan lagi pengukuran strategi dan prestasi saham.

Kod 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)