Strategi ini mengenal pasti arah trend semasa dengan mengira purata bergerak dari tempoh yang berbeza dan menghasilkan isyarat perdagangan yang digabungkan dengan penunjuk RSI. Apabila purata bergerak tempoh pendek melintasi di atas purata bergerak tempoh panjang, trend itu dianggap dan isyarat beli dihasilkan. Apabila purata bergerak tempoh pendek melintasi di bawah purata bergerak tempoh panjang, trend dianggap terbalik dan isyarat jual dihasilkan.
Mengira purata bergerak mudah 10, 20, 50, 100 dan 200 hari.
Mengira nilai RSI 14 hari.
Apabila SMA 10 hari melintasi di atas SMA 50 hari, dan RSI lebih besar daripada 30, dan SMA 20 hari lebih besar daripada atau sama dengan SMA 100 hari atau SMA 50 hari lebih besar daripada atau sama dengan SMA 100 hari, beli.
Tetapkan harga stop loss kepada harga masuk dikalikan dengan (1 - peratusan stop loss).
Jual apabila:
Strategi ini menilai trend pasaran menggunakan purata bergerak dan menetapkan stop loss untuk mengawal risiko. RSI menapis pecah palsu. Ia membeli apabila SMA jangka pendek melintasi di atas SMA jangka panjang, menunjukkan aliran naik, dan menetapkan garis stop loss untuk mengawal risiko semasa tempoh pegangan. Ia menjual apabila isyarat pembalikan trend berlaku atau harga stop loss dicetuskan.
Pengoptimuman boleh dilakukan melalui penyesuaian tempoh purata bergerak, paras stop loss dan lain-lain. Juga pertimbangkan untuk menggabungkan dengan penunjuk lain untuk meningkatkan ketepatan.
Strategi ini mempunyai logika yang jelas secara keseluruhan, menggunakan purata bergerak untuk penentuan trend dan menetapkan stop loss untuk mengawal risiko. Ini adalah strategi penjejakan trend biasa. Penambahbaikan lanjut dapat dicapai melalui penyesuaian parameter dan penambahan penunjuk lain. Tetapi tidak ada strategi yang sempurna, penyesuaian dan pengoptimuman berterusan diperlukan untuk mengatasi ketidakpastian pasaran, bersama dengan pengurusan risiko yang betul.
/*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)