
Ini adalah strategi perdagangan breakout berdasarkan moving average. Ini menghasilkan sinyal perdagangan ketika harga melewati rata-rata dengan menghitung harga rata-rata untuk periode tertentu sebagai rata-rata.
Strategi ini didasarkan pada indikator Moving Average. Ini menggunakan fungsi sma untuk menghitung harga tutup rata-rata dalam periode tertentu dan mendapatkan Moving Average. Ini menghasilkan sinyal beli ketika harga tutup terbaru melintasi Moving Average dari bawah ke atas; Ini menghasilkan sinyal jual ketika penutupan terbaru melintasi Moving Average dari atas ke bawah.
Secara khusus, ia mendefinisikan dalam strategi sumber penghitungan rata-rata bergerak (harga penutupan terbaru) dan panjang siklus, dan mendapatkan urutan data rata-rata bergerak. Kemudian ia menetapkan dua kondisi: membuat pesanan beli ketika harga melewati rata-rata di atas; membuat pesanan jual ketika harga melewati rata-rata di bawah. Setelah pesanan dibuat, ia juga menetapkan stop loss: posisi yang kosong sebagian ketika pesanan mencapai keuntungan proporsi yang ditetapkan, dan seluruh posisi yang kosong ketika pesanan mencapai harga stop atau stop loss yang ditetapkan.
Ini adalah strategi pelacakan tren yang sederhana dan praktis. Ini memiliki beberapa keuntungan:
Meskipun ada banyak keuntungan dari strategi ini, ada beberapa risiko:
Untuk mengontrol risiko ini, kita dapat mengoptimalkan penyaringan dengan indikator lain, memasukkan penilaian tren jangka pendek dalam skala besar, atau menggunakan metode pembelajaran mesin untuk menemukan kombinasi parameter terbaik.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Menambahkan penilaian indikator teknis lainnya, membentuk sistem perdagangan, meningkatkan peluang strategi. Misalnya, menambahkan indikator penilaian tambahan seperti MACD, KD.
Masukkan mekanisme stop loss. Gunakan tracking stop loss atau time stop loss untuk mengunci keuntungan dan menghindari kerugian.
Optimalkan parameter. Ubah parameter periodik dari rata-rata bergerak untuk menemukan kombinasi parameter yang optimal. Juga dapat menguji berbagai jenis rata-rata bergerak.
Meningkatkan penilaian pembelajaran mesin. Menggunakan algoritma hutan acak, LSTM dan lain-lain untuk menentukan arah tren.
Mengoptimalkan masuk dan keluar logika. Mengatur kondisi penyaringan tren, menghindari operasi terbalik pada akhir tren. Pertimbangkan untuk menggunakan batch playout logika.
Strategi Mobile Equilibrium Breakthrough ini secara keseluruhan sangat cocok sebagai strategi awal untuk perdagangan kuantitatif. Idealnya sederhana, mudah dipahami dan dioperasikan, dan memiliki efek nyata. Pada saat yang sama, ada banyak ruang untuk pengujian dan pengoptimalan selanjutnya.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-22 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// |-- Initialize Strategy Parameters:
strategy(
// |-- Strategy Title.
title='[Tutorial][RS]Working with orders',
// |-- if shorttitle is specified, it will overwrite the name on the chart window.
shorttitle='WwO',
// |-- if true it overlays current chart window, otherwise it creates a drawer to display plotting outputs.
overlay=true,
// |-- Strategy unit type for default quantity, possible arguments: (strategy.cash, strategy.fixed, strategy.percent_of_equity)
default_qty_type=strategy.cash,
// |-- Value to use for default trade size
default_qty_value=1000,
// |-- Default Account size
initial_capital=100000,
// |-- Account Currency parameter
currency=currency.USD
)
// |-- Strategy Profit/loss parameters:
profit = input(defval=5000, title='Take Profit')
loss = input(defval=5000, title='Stop Loss')
ratio = input(defval=2.0, title='Ratio at wich to take out a percentage off the table (take profit / ratio).')
percent = input(defval=50.0, title='Percentage of position to take profit.')
// |-- Signal Parameters:
// |
// |-- Moving Average input source and length parameters.
src = input(defval=close)
length = input(defval=100)
// |-- Moving Average Data series.
ma = sma(src, length)
// |-- Condition for triggering a buy(long) order(trade).
if crossover(src, ma)
// |-- Create the order.
strategy.order(id='Buy', long=true)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Buy Half Exit', from_entry='Buy', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Buy Full Exit', from_entry='Buy', qty_percent=100, profit=profit, loss=loss)
if crossunder(src, ma)
// |-- Create the order.
strategy.order(id='Sell', long=false)
// |-- Issue a exit order to close a percentage of the trade when a specified ratio(take profit / ratio) is reached.
strategy.exit(id='Sell Half Exit', from_entry='Sell', qty_percent=percent, profit=profit/ratio)
// |-- Issue a exit order to close the full position, when take profit or stop loss's are reached.
strategy.exit(id='Sell Full Exit', from_entry='Sell Half Exit', qty_percent=100, profit=profit, loss=loss)
// |-- Output Functions.
plot(series=ma, title='MA', color=black)