Strategi ini menggunakan dua Arnaud Legoux Moving Average (ALMA) untuk menilai sinyal perdagangan. ALMA adalah perbaikan pada rata-rata bergerak tradisional, yang dapat mengurangi lag dan meluruskan kurva. Strategi ini menghasilkan sinyal beli dengan melintasi ALMA lambat di atas ALMA cepat, ALMA lambat di bawah ALMA cepat menghasilkan sinyal jual, sambil menggabungkan penyaringan kuantitatif, membentuk sinyal silang yang lebih stabil.
Indikator dan aturan perdagangan utama dari strategi ini adalah sebagai berikut:
ALMA cepat: periode yang lebih pendek untuk menangkap terobosan.
ALMA lambat: periode yang lebih panjang digunakan untuk menilai tren besar.
Filter transaksi: berlaku jika Anda memakai rata-rata jangka panjang di atas rata-rata jangka pendek.
Melakukan sinyal ganda: ALMA cepat melalui ALMA lambat dan penyaringan kuantitas bergantian efektif.
Sinyal Pinto: ALMA cepat melewati ALMA lambat.
Sinyal kosong: ALMA cepat melalui ALMA lambat dan penyaringan kuantitas bergantian efektif.
Sinyal udara datar: ALMA cepat melewati ALMA lambat.
Strategi ini sederhana dan intuitif, namun menggabungkan beberapa indikator teknis seperti penilaian tren, penangkapan terobosan, dan verifikasi volume transaksi, untuk membentuk sistem perdagangan yang relatif stabil. Kombinasi garis rata yang lambat dan cepat dapat secara efektif menentukan arah tren; Penggunaan algoritma ALMA mengurangi dampak lag pada perdagangan; Penambahan volume transaksi menghindari banyak terobosan palsu yang tidak pasti.
Strategi ini memiliki beberapa keunggulan dibandingkan dengan strategi crossover rata-rata tradisional:
Algoritma ALMA mengurangi lag dan meningkatkan kualitas sinyal.
Penyaringan kuantitatif dapat mencegah kerusakan akibat penembusan palsu.
Perdagangan yang terjadi di pasar Forex biasanya terjadi pada hari-hari tertentu, seperti hari-hari libur, atau hari-hari libur.
Aturan-aturan ini sederhana, intuitif, dan mudah dipahami.
Parameter rata-rata dapat disesuaikan secara fleksibel untuk pasar yang berbeda.
Pengaturan pengelolaan dana yang masuk akal dan dapat mengontrol kerugian tunggal.
Hal ini dapat meningkatkan efektivitas strategi dengan mengoptimalkan parameter garis rata-rata.
Secara keseluruhan, strategi ini meningkatkan stabilitas dan kualitas sinyal dibandingkan dengan strategi rata-rata tradisional.
Meskipun ada banyak keuntungan dari strategi ini, risiko berikut harus diperhatikan:
Strategi rata-rata sangat rentan terhadap kebocoran pasar yang menyebabkan kerugian.
Pengaturan parameter algoritma ALMA dapat mempengaruhi efek strategi.
Efek penguatan volume transaksi dapat menyesatkan penilaian sinyal perdagangan.
Ada beberapa keterlambatan yang tidak dapat sepenuhnya menghindari kerugian.
Optimasi parameter berisiko terlalu cocok.
Sinyal ini akan mati jika terjadi abnormalitas.
Algoritma seperti pembelajaran mesin mungkin akan memberikan hasil yang lebih baik.
Perhatikan rasio pengembalian pendapatan untuk menghindari kurva yang terlalu curam.
Dengan mempertimbangkan faktor-faktor risiko di atas, strategi ini dapat dioptimalkan dalam beberapa hal:
Optimalkan parameter median ALMA untuk meningkatkan sensitivitas reaksi.
Cobalah berbagai cara untuk menghitung volume transaksi.
Mengadopsi strategi stop loss dan pengendalian ketat terhadap kerugian tunggal.
Mengembangkan sistem sinyal perdagangan yang terintegrasi dengan indikator lainnya.
Menambahkan modul pembelajaran mesin untuk menyesuaikan sinyal dengan lebih cerdas.
“Menggunakan berbagai varietas untuk strategi penyebaran”.
Mengoptimalkan strategi pengelolaan dana, menyesuaikan posisi dengan pasar yang berbeda.
Strategi penelitian untuk kesehatan dan pencegahan overfitness.
Secara keseluruhan, strategi ini meningkatkan kualitas dan stabilitas sinyal melalui algoritma ALMA dan verifikasi kuantitas transaksi dibandingkan dengan strategi silang rata-rata tradisional. Namun, pengoptimalan strategi perdagangan adalah proses berkelanjutan yang masih membutuhkan perhatian terhadap risiko dan peningkatan strategi dari berbagai dimensi sehingga dapat beradaptasi dengan lingkungan pasar yang lebih kompleks.
/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © Sarahann999
// Calculations for TP/SL based off: https://kodify.net/tradingview/orders/percentage-profit/
//@version=5
strategy("ALMA Cross", overlay=true)
//User Inputs
src= (close)
long_entry = input(true, title='Long Entry')
short_entry = input(true, title='Short Entry')
//Fast Settings
ALMA1 = input(100, "ALMA Lenghth 1", group= "ALMA Fast Length Settings")
alma_offset = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma1 = ta.alma(src, ALMA1, alma_offset, alma_sigma)
//Slow Settings
ALMA2 = input(120, "ALMA Length 2", group = "ALMA Slow Length Settings")
alma_offset2 = input.float(defval=0.85, title='Arnaud Legoux (ALMA) - Offset Value', minval=0, step=0.01)
alma_sigma2 = input.int(defval=6, title='Arnaud Legoux (ALMA) - Sigma Value', minval=0)
Alma2 = ta.alma(src, ALMA2, alma_offset2, alma_sigma2)
//Volume
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
runtime.error("No volume is provided by the data vendor.")
shortlen = input.int(5, minval=1, title = "Short Length", group= "Volume Settings")
longlen = input.int(10, minval=1, title = "Long Length")
short = ta.ema(volume, shortlen)
long = ta.ema(volume, longlen)
osc = 100 * (short - long) / long
//Define Cross Conditions
buy = ta.crossover(Alma1, Alma2)
sell = ta.crossunder(Alma1, Alma2)
//Calculate Take Profit Percentage
longProfitPerc = input.float(title="Long Take Profit", group='Take Profit Percentage',
minval=0.0, step=0.1, defval=2) / 100
shortProfitPerc = input.float(title="Short Take Profit",
minval=0.0, step=0.1, defval=2) / 100
// Figure out take profit price 1
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
// Make inputs that set the stop % 1
longStopPerc = input.float(title="Long Stop Loss", group='Stop Percentage',
minval=0.0, step=0.1, defval=2.5) / 100
shortStopPerc = input.float(title="Short Stop Loss",
minval=0.0, step=0.1, defval=2.5) / 100
// Figure Out Stop Price
longStopPrice = strategy.position_avg_price * (1 - longStopPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortStopPerc)
//Define Conditions
buySignal = buy and osc > 0
and strategy.position_size == 0
//sellSignal
sellSignal = sell and osc > 0
and strategy.position_size == 0
// Submit entry orders
if buySignal and long_entry
strategy.entry(id="Long", direction=strategy.long, alert_message="Enter Long")
alert(message="BUY Trade Entry Alert", freq=alert.freq_once_per_bar)
if sellSignal and short_entry
strategy.entry(id="Short", direction=strategy.short, alert_message="Enter Short")
alert(message="SELL Trade Entry Alert", freq=alert.freq_once_per_bar)
// Submit exit orders based on take profit price
if (strategy.position_size > 0)
strategy.exit(id="Long TP/SL", limit=longExitPrice, stop=longStopPrice, alert_message="Long Exit 1 at {{close}}")
if (strategy.position_size < 0)
strategy.exit(id="Short TP/SL", limit=shortExitPrice, stop=shortStopPrice, alert_message="Short Exit 1 at {{close}}")
//Draw
plot(Alma1,"Alma Fast", color=color.purple, style=plot.style_circles)
plot(Alma2,"Alma Slow", color=#acb5c2, style=plot.style_circles)