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.
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.
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.
Strategi ini memiliki risiko berikut:
Solusi:
Strategi ini juga dapat dioptimalkan dalam aspek berikut:
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')