Dual Take Profit Moving Average Crossover Strategi Kuantitatif

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

img

Ringkasan

Strategi ini menggunakan rentas purata bergerak mudah dan teknik mengambil keuntungan berganda untuk mengawal risiko dan meningkatkan keuntungan.

Logika Strategi

Strategi ini berdasarkan persilangan EMA dan WMA untuk menentukan trend pasaran. Ia pergi panjang apabila EMA melintasi di atas WMA, dan pergi pendek apabila EMA melintasi di bawah WMA.

Apabila memasuki, dua tahap mengambil keuntungan ditetapkan. mengambil keuntungan pertama ditetapkan pada harga kemasukan + 20 pip, dan mengambil keuntungan kedua ditetapkan pada harga kemasukan + 40 pip. Sementara itu, stop loss diletakkan pada harga kemasukan - 20 pip.

Apabila harga mencapai keuntungan pertama, ia akan menutup separuh kedudukan. kedudukan yang selebihnya akan terus berjalan ke arah keuntungan kedua atau sehingga berhenti.

Terdapat tiga hasil yang mungkin untuk setiap perdagangan:

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

  2. Harga memukul pertama mengambil keuntungan pertama, menutup separuh kedudukan mengunci keuntungan 1%, kemudian terus berjalan sehingga berhenti, berakhir dengan break even.

  3. Selepas mencapai keuntungan pertama, harga terus berjalan dan mencapai keuntungan kedua, berakhir dengan 1% + 2% = 3% keuntungan keseluruhan.

Analisis Kelebihan

Kelebihan terbesar strategi mengambil keuntungan berganda ini adalah bahawa ia mengawal risiko dan mengelakkan kerugian tunggal yang besar. Stop loss caps kerugian maksimum dalam 2% apabila pasaran bergerak menentang. Dua mengambil keuntungan membolehkan keuntungan yang lebih besar apabila trend berjalan seperti yang dijangkakan.

Berbanding dengan mengambil keuntungan tunggal / hentian kerugian, strategi ini mempunyai tiga hasil - kerugian, kemenangan atau impas, mengurangkan kebarangkalian kehilangan berhenti. Walaupun jika berhenti, kerugian maksimum terhad kepada 2%. Berbanding dengan strategi tradisional, mekanisme mengambil keuntungan berganda mengurangkan DD dengan ketara dan meningkatkan kadar kemenangan.

Satu lagi kelebihan adalah kesederhanaannya. EMA dan WMA adalah penunjuk yang terkenal yang mudah difahami. Logik mengambil keuntungan / berhenti kerugian mudah dipantau. Ini menjadikan strategi ini mudah digunakan oleh pemula.

Analisis Risiko

Walaupun ada kelebihan, terdapat juga risiko untuk diketahui untuk strategi ini.

Pertama, sebagai penunjuk purata bergerak, EMA dan WMA mempunyai keupayaan yang agak lemah dalam mengenal pasti pasaran julat.

Kedua, tahap keuntungan / stop loss tetap mungkin tidak disesuaikan dengan turun naik pasaran. Mereka boleh mudah ditembusi semasa turun naik yang tinggi, menjadikannya tidak berkesan.

Akhirnya, strategi tidak dapat bertindak balas terhadap peristiwa yang tidak dijangka, dengan risiko terperangkap. peristiwa berita utama boleh mewujudkan jurang harga yang besar yang secara langsung melanggar tahap keuntungan / kerugian, menyebabkan kerugian besar.

Arahan pengoptimuman

Terdapat beberapa aspek untuk mengoptimumkan lagi strategi:

  1. Meningkatkan isyarat kemasukan. Uji isyarat purata bergerak atau trend yang lebih baik daripada EMA dan WMA untuk menjana isyarat yang lebih berkualiti.

  2. Menggunakan kaedah seperti ATR, trailing stop loss dan lain-lain untuk membuat tahap keuntungan / kerugian disesuaikan dengan pasaran.

  3. Tambah penapis. Minta pengesahan jumlah atau penunjuk sekunder sebelum persimpangan untuk mengelakkan perangkap. Juga pertimbangkan sama ada untuk berdagang di sekitar acara utama.

  4. Mengoptimumkan saiz kedudukan, menyesuaikan saiz kedudukan mengikut peraturan pengurusan modal.

Kesimpulan

Ringkasnya, ini adalah strategi trend yang mudah dan praktikal. Ia menggunakan persilangan EMA dan WMA untuk kemasukan, dan mengambil keuntungan berganda untuk mengawal risiko. Berbanding dengan strategi tradisional, ia mempunyai kadar kemenangan yang lebih tinggi dan risiko yang lebih rendah. Sudah tentu, batasan penunjuk dan tetapan keuntungan / kerugian harus diperhatikan. Pengoptimuman lanjut boleh menjadikan strategi lebih mantap.


/*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 lanjut