Strategi Kuantitatif Palang Emas Purata Bergerak Berganda dan Palang Mati


Tarikh penciptaan: 2023-12-05 10:24:34 Akhirnya diubah suai: 2023-12-05 10:24:34
Salin: 0 Bilangan klik: 704
1
fokus pada
1619
Pengikut

Strategi Kuantitatif Palang Emas Purata Bergerak Berganda dan Palang Mati

Gambaran keseluruhan

Strategi ini adalah berdasarkan isyarat Gold Fork Dead Fork pada purata bergerak ALMA berganda, digabungkan dengan isyarat Blank Multiple pada MACD, untuk melakukan Blank Multiple secara automatik. Strategi ini digunakan untuk tempoh masa 4 jam dan lebih, data ujian adalah BNB/USDT, tempoh masa adalah 2017 hingga kini, dan bayaran set adalah 0.03%.

Prinsip Strategi

Strategi menggunakan ALMA garis cepat dan garis perlahan untuk membina purata bergerak ganda. Panjang garis cepat adalah 20, panjang garis perlahan adalah 40, masing-masing menggunakan bias 0.9, perbezaan piawai adalah 5.

Pada masa yang sama, strategi menggabungkan isyarat carta lurus MACD. Isyarat peta lurus MACD hanya berkesan apabila carta lurus MACD adalah positif ((naik), dan isyarat lebih berkesan; isyarat peta lurus MACD hanya berkesan apabila carta lurus MACD adalah negatif ((turun), dan isyarat kosong berkesan.

Strategi ini pada masa yang sama menetapkan syarat stop loss. Stop loss sebanyak 2 kali, stop loss sebanyak 0.2 kali; stop loss sebanyak 0.05 kali, stop loss sebanyak 1 kali.

Analisis kelebihan

Strategi ini digabungkan dengan penghakiman trend dari purata bergerak ganda dan penghakiman tenaga dari penunjuk MACD, yang dapat menyaring isyarat palsu dengan berkesan, meningkatkan ketepatan masuk. Tetapan hentian hentian adalah munasabah, memaksimumkan keuntungan, dan mengelakkan kerugian besar.

Data retrospektif yang diterima pakai sejak tahun 2017 merangkumi beberapa peralihan lembu dan lembu, strategi ini masih berprestasi baik dalam keadaan melintasi kitaran. Ini membuktikan bahawa strategi ini sesuai dengan ciri-ciri linear dan bukan linear pasaran.

Analisis risiko

Strategi ini mempunyai risiko sebagai berikut:

  1. Rata-rata Bergerak Ganda sendiri terlewat dan mungkin terlepas peluang untuk memendekkannya
  2. Strategi tidak akan menghasilkan isyarat apabila MACD adalah sifar
  3. Kadar Stop Loss adalah set sebelumnya dan mungkin berbeza dengan keadaan sebenar.

Penyelesaian:

  1. Memperolehi sensitiviti yang lebih tinggi terhadap garis pendek dengan memendekkan tempoh purata bergerak
  2. Mengoptimumkan parameter MACD untuk membuat lebih banyak perubahan grafik lurus
  3. Secara dinamik menyesuaikan tetapan stop loss

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa aspek:

  1. Cuba pelbagai jenis purata bergerak untuk mendapatkan kesan yang lebih halus
  2. Mengoptimumkan parameter purata bergerak dan MACD untuk pelbagai jenis dan kitaran
  3. Menambah syarat tambahan, seperti perubahan jumlah dagangan, untuk menapis isyarat
  4. Menyesuaikan Stop Loss Ratio Dalam Masa Nyata Untuk Membuat Strategi Lebih Adaptif

ringkaskan

Strategi ini berjaya menggabungkan penilaian trend rata-rata bergerak dan penilaian tambahan MACD, dan menetapkan hentian hentian yang munasabah, yang dapat memperoleh keuntungan yang stabil dalam pelbagai keadaan. Dengan cara yang terus-menerus mengoptimumkan parameter dan menambah syarat penapis tambahan, kestabilan dan keuntungan strategi dapat ditingkatkan lagi.

Kod sumber strategi
/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true,  pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03)

//time condition
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//alma fast and slow
src = haClose
windowsize = input(title="Length Size Fast", type=input.integer, defval=20)
windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40)
offset = input(title="Offset", type=input.float, defval=0.9, step=0.05)
sigma = input(title="Sigma", type=input.float, defval=5)
outfast=alma(src, windowsize, offset, sigma)
outslow=alma(src, windowsize2, offset, sigma)

//macd
fast_length = input(title="Fast Length", type=input.integer, defval=6)
slow_length = input(title="Slow Length", type=input.integer, defval=25)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)

// Calculating
fast_ma = ema(src, fast_length)
slow_ma =  ema(src, slow_length)
macd = fast_ma - slow_ma
signal = ema(macd, signal_length)
hist = macd - signal

long=crossover(outfast,outslow) and hist > hist[1] and time_cond
short=crossunder(outfast,outslow) and hist < hist[1] and time_cond

takeProfit_long=input(2.0, step=0.005)
stopLoss_long=input(0.2, step=0.005)
takeProfit_short=input(0.05, step=0.005)
stopLoss_short=input(1.0, step=0.005)

strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)

strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT',  alert_message = 'closeshort')
strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT',  alert_message = 'closeshort')