Dual Take Profit Moving Average Crossover Strategi Kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-11-14 16:04:33
Tag:

img

Gambaran umum

Strategi ini menggunakan teknik crossover rata-rata bergerak dan dual take profit sederhana untuk mengendalikan risiko dan meningkatkan profitabilitas.

Logika Strategi

Strategi ini didasarkan pada persilangan EMA dan WMA untuk menentukan tren pasar.

Pada saat masuk, dua level take profit ditetapkan. Take profit pertama ditetapkan pada harga masuk + 20 pips, dan take profit kedua ditetapkan pada harga masuk + 40 pips. Sementara itu, stop loss ditempatkan pada harga masuk - 20 pips.

Ketika harga mencapai take profit pertama, ia akan menutup setengah posisi. posisi yang tersisa akan terus berjalan menuju take profit kedua atau sampai berhenti.

Ada tiga kemungkinan hasil untuk setiap perdagangan:

  1. Harga hits stop loss, mengambil 2% kerugian langsung.

  2. Harga hits pertama mengambil keuntungan pertama, menutup setengah posisi mengunci keuntungan 1%, kemudian terus berjalan sampai berhenti, berakhir dengan break even.

  3. Setelah memukul pertama mengambil keuntungan, harga terus berjalan dan memukul kedua mengambil keuntungan, berakhir dengan 1% + 2% = 3% total keuntungan.

Analisis Keuntungan

Keuntungan terbesar dari strategi dual take profit ini adalah bahwa ia mengendalikan risiko dan menghindari kerugian tunggal yang besar. stop loss caps maximum loss dalam 2% ketika pasar bergerak melawan. kedua take profit memungkinkan keuntungan yang lebih besar ketika tren berjalan seperti yang diharapkan.

Dibandingkan dengan single take profit/stop loss, strategi ini memiliki tiga hasil - loss, win atau break even, mengurangi probabilitas stop loss.

EMA dan WMA adalah indikator terkenal yang mudah dipahami. Logika mengambil keuntungan / stop loss mudah dipantau. Ini membuat strategi mudah diadopsi oleh pemula.

Analisis Risiko

Meskipun ada keuntungan, strategi ini juga memiliki risiko yang harus diketahui.

Pertama, sebagai indikator rata-rata bergerak, EMA dan WMA memiliki kemampuan yang relatif lemah dalam mengidentifikasi pasar rentang.

Kedua, tingkat fixed take profit/stop loss mungkin tidak dapat beradaptasi dengan volatilitas pasar.

Akhirnya, strategi tidak dapat menanggapi peristiwa tak terduga, dengan risiko terjebak. peristiwa berita besar dapat menciptakan kesenjangan harga yang sangat besar yang secara langsung melanggar tingkat keuntungan / kerugian, menyebabkan kerugian besar.

Arahan Optimasi

Ada beberapa aspek untuk lebih mengoptimalkan strategi:

  1. Meningkatkan sinyal masuk. Uji indikator rata-rata bergerak atau tren yang lebih baik daripada EMA dan WMA untuk menghasilkan sinyal berkualitas lebih tinggi.

  2. Menggunakan metode seperti ATR, trailing stop loss dll untuk membuat tingkat profit/loss menyesuaikan dengan pasar.

  3. Tambahkan filter. Perlukan konfirmasi volume atau indikator sekunder sebelum crossover untuk menghindari perangkap. Juga pertimbangkan apakah akan melakukan perdagangan di sekitar acara utama.

  4. Mengoptimalkan ukuran posisi, menyesuaikan ukuran posisi sesuai dengan aturan manajemen modal.

Kesimpulan

Singkatnya, ini adalah tren yang sederhana dan praktis mengikuti strategi. Ini memanfaatkan EMA dan WMA crossover untuk entri, dan mengambil keuntungan ganda untuk mengendalikan risiko. Dibandingkan dengan strategi tradisional, ini memiliki tingkat kemenangan yang lebih tinggi dan risiko yang lebih rendah. Tentu saja, keterbatasan indikator dan pengaturan keuntungan / kerugian harus diperhatikan. Optimasi lebih lanjut dapat membuat strategi lebih kuat.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)






Lebih banyak