Strategi ini menghasilkan sinyal perdagangan berdasarkan persilangan rata-rata bergerak sederhana dan rata-rata bergerak tertimbang, dikombinasikan dengan stop loss dan take profit untuk mengelola posisi.
Logika inti adalah menghitung dua rata-rata bergerak dengan periode yang berbeda, satu adalah rata-rata bergerak sederhana 9 hari dan yang lainnya adalah rata-rata bergerak tertimbang 21 hari. Ketika SMA jangka pendek 9 hari melintasi di atas WMA jangka panjang 21 hari, sinyal beli dihasilkan. Ketika garis jangka pendek melintasi di bawah garis jangka panjang, sinyal jual dihasilkan.
Setelah menerima sinyal, order ditempatkan sesuai dengan rasio stop loss dan take profit yang ditetapkan. Misalnya, jika rasio stop loss ditetapkan pada 5%, maka harga stop loss akan ditetapkan pada 95% dari harga masuk. Jika rasio take profit adalah 5%, maka harga take profit akan ditetapkan pada 105% dari harga masuk. Ini mewujudkan fusi faktor dinamis ( moving average crossover yang menentukan waktu masuk dan keluar) dan faktor statis (fixed stop loss and take profit ratios).
Strategi ini menggabungkan indikator teknis dinamis dan parameter strategi statis, yang memiliki keuntungan dari sistem dinamis dan statis. Indikator teknis dapat secara dinamis menangkap karakteristik pasar, yang bermanfaat untuk menangkap tren. Pengaturan parameter memberikan kontrol risiko dan pengembalian yang stabil, yang membantu mengurangi keacakan dalam manajemen posisi.
Dibandingkan dengan sistem dinamis murni, strategi ini lebih kuat dalam manajemen posisi, yang mengurangi dampak keputusan irasional. Dibandingkan dengan sistem statis murni, strategi ini lebih fleksibel dalam pemilihan masuk, yang lebih beradaptasi dengan perubahan pasar. Oleh karena itu, strategi ini memiliki ketahanan dan profitabilitas keseluruhan yang baik.
Risiko dari strategi ini terutama berasal dari dua aspek. Pertama, kemungkinan sinyal yang salah dari rata-rata bergerak. Ketika pasar terikat rentang, rata-rata bergerak dapat memiliki persilangan yang sering, menyebabkan strategi untuk dicetak.
Kedua, risiko bahwa stop loss dan take profit tetap tidak dapat beradaptasi dengan kondisi pasar yang ekstrim.
Langkah-langkah kontra adalah: pertama, hindari titik waktu kunci untuk mengurangi kemungkinan sinyal yang salah; kedua, mengaktifkan algoritma stop loss adaptif sesuai dengan volatilitas pasar dan peristiwa khusus, membuat stop loss dan take profit menyesuaikan dengan pasar.
Strategi ini dapat dioptimalkan dari aspek berikut:
Uji kombinasi parameter yang berbeda untuk menemukan parameter yang optimal;
Tambahkan kondisi penyaringan untuk menghindari sinyal yang tidak valid;
Menggunakan algoritma stop loss adaptif untuk bergerak dengan pasar;
Menggabungkan indikator lain untuk menilai kekuatan tren, menghindari pasar yang terikat rentang;
Menggunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.
Melalui pengujian parameter, penambahan filter, peningkatan pemberhentian, menilai tren, dll, stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut.
Strategi ini berhasil menggabungkan indikator dinamis dan parameter statis, menyeimbangkan fleksibilitas dan ketahanan. Dibandingkan dengan strategi dinamis dan statis murni, strategi ini berkinerja lebih baik secara keseluruhan. Tentu saja, masih ada ruang untuk pengoptimalan dengan menyesuaikan parameter, menambahkan filter, berhenti adaptif, pembelajaran mesin, dll, untuk membuat strategi lebih efektif.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Définition des périodes pour les moyennes mobiles wmaLength = input.int(9, title="WMA Length") mmaLength = input.int(21, title="MMA Length") // Paramètres de Stop Loss et Take Profit en pourcentage stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100 takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100 // Calcul des moyennes mobiles wmaValue = ta.wma(close, wmaLength) mmaValue = ta.sma(close, mmaLength) // Conditions pour les signaux d'achat et de vente buySignal = ta.crossover(wmaValue, mmaValue) sellSignal = ta.crossunder(wmaValue, mmaValue) // Génération des ordres en fonction des signaux if buySignal strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage)) if sellSignal strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage)) // Affichage des moyennes mobiles sur le graphique plot(wmaValue, color=color.blue, title="WMA") plot(mmaValue, color=color.red, title="MMA") // Affichage des signaux sur le graphique pour référence plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")