Full Crypto Swing ALMA Cross MACD Strategi Kuantitatif

Penulis:ChaoZhang, Tanggal: 2023-12-05 10:24:34
Tag:

img

Gambaran umum

Strategi ini didasarkan pada sinyal golden cross dan dead cross dari garis rata-rata bergerak ALMA ganda, dikombinasikan dengan sinyal panjang dan pendek dari indikator MACD, untuk mencapai posisi panjang dan pendek otomatis.

Prinsip Strategi

Strategi ini menggunakan garis cepat dan lambat yang dibangun dari ALMA untuk membangun rata-rata bergerak ganda. panjang garis cepat adalah 20 dan garis lambat adalah 40, keduanya mengadopsi offset 0,9 dan standar deviasi 5. Ketika garis cepat melintasi garis lambat, sinyal panjang dihasilkan. Ketika garis cepat melintasi di bawah garis lambat, sinyal pendek dihasilkan.

Pada saat yang sama, strategi ini menggabungkan sinyal histogram dari indikator MACD. Hanya ketika histogram MACD positif (naik), sinyal panjang berlaku; hanya ketika histogram MACD negatif (turun), sinyal pendek berlaku.

Strategi ini juga menetapkan mengambil keuntungan dan kondisi stop loss. mengambil keuntungan panjang adalah 2 kali dan stop loss adalah 0,2 kali; mengambil keuntungan pendek adalah 0,05 kali dan stop loss adalah 1 kali.

Analisis Keuntungan

Strategi ini menggabungkan penilaian tren dari rata-rata bergerak ganda dan penilaian energi dari indikator MACD, yang dapat secara efektif menyaring sinyal palsu dan meningkatkan akurasi entri.

Data backtest diadopsi sejak tahun 2017, yang mencakup beberapa siklus konversi bull dan bear. Strategi ini masih berkinerja baik di berbagai periode. Ini membuktikan bahwa strategi ini beradaptasi dengan karakteristik linier dan non-linier pasar.

Analisis Risiko

Strategi ini memiliki risiko berikut:

  1. Rata-rata bergerak ganda itu sendiri memiliki efek keterlambatan, mungkin kehilangan peluang jangka pendek
  2. Ketika histogram MACD adalah nol, strategi tidak akan menghasilkan sinyal
  3. Rasio mengambil keuntungan dan stop loss ditetapkan sebelumnya, mungkin menyimpang dari pasar yang sebenarnya

Solusi:

  1. Singkatkan siklus rata-rata bergerak dengan tepat untuk meningkatkan sensitivitas jangka pendek
  2. Mengoptimalkan parameter MACD untuk membuat fluktuasi histogram lebih sering
  3. Sesuaikan secara dinamis pengaturan mengambil keuntungan dan stop loss

Arahan Optimasi

Strategi ini juga dapat dioptimalkan dalam aspek berikut:

  1. Coba berbagai jenis rata-rata bergerak untuk menemukan efek smoothing yang lebih baik
  2. Mengoptimalkan parameter moving average dan MACD agar sesuai dengan produk dan siklus yang berbeda
  3. Tambahkan kondisi tambahan seperti perubahan volume perdagangan ke sinyal filter
  4. Sesuaikan rasio mengambil keuntungan dan stop loss secara real time untuk fleksibilitas yang lebih baik

Kesimpulan

Strategi ini berhasil menggabungkan penilaian tren rata-rata bergerak dan penilaian tambahan MACD, dan menetapkan keuntungan yang masuk akal dan stop loss, yang dapat memperoleh pengembalian yang stabil dalam berbagai kondisi pasar. Stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut dengan terus mengoptimalkan pengaturan parameter, menambahkan kondisi penyaringan tambahan, dll.


/*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')

Lebih banyak