Ini adalah strategi perdagangan pecah berdasarkan purata bergerak. Ia mengira harga purata dalam tempoh tertentu sebagai purata bergerak. Apabila harga memecahkan purata bergerak, isyarat perdagangan dihasilkan.
Strategi ini terutamanya berdasarkan kepada penunjuk purata bergerak. Ia menggunakan fungsi sma untuk mengira harga penutupan purata dalam tempoh untuk mendapatkan purata bergerak. Apabila harga penutupan terkini memecahkan purata bergerak ke atas, isyarat beli dihasilkan. Apabila harga penutupan terkini memecahkan purata bergerak ke bawah, isyarat jual dihasilkan.
Secara khusus, ia menentukan sumber (harga penutupan baru-baru ini) dan panjang purata bergerak dalam strategi untuk mendapatkan urutan data purata bergerak. Kemudian ia menetapkan dua syarat: membuat pesanan panjang apabila harga melintasi di atas purata bergerak; membuat pesanan pendek apabila harga melintasi di bawah purata bergerak. Selepas membuat pesanan, ia juga menetapkan mengambil keuntungan dan menghentikan kerugian: ia menutup sebahagian kedudukan apabila pesanan mencapai nisbah keuntungan yang ditetapkan, dan menutup keseluruhan kedudukan apabila pesanan mencapai harga mengambil keuntungan atau berhenti kerugian yang ditetapkan.
Ini adalah trend yang mudah dan praktikal mengikut strategi.
Walaupun strategi ini mempunyai banyak kelebihan, masih ada beberapa risiko:
Untuk mengawal risiko ini, kita boleh mengoptimumkan dengan menggabungkan petunjuk lain untuk penapisan, memperkenalkan penilaian trend pasaran jangka pendek, atau menggunakan kaedah pembelajaran mesin untuk mencari kombinasi parameter yang optimum.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Tambah penunjuk teknikal lain untuk penilaian untuk membina sistem perdagangan dan meningkatkan kadar kemenangan.
Tambahkan mekanisme stop loss. Gunakan stop loss yang tertinggal atau stop loss berdasarkan masa untuk mengunci keuntungan dan mengelakkan kerugian yang lebih besar.
Melakukan pengoptimuman parameter. Ubah parameter tempoh purata bergerak untuk mencari kombinasi terbaik. Pelbagai jenis purata bergerak juga boleh diuji.
Meningkatkan penilaian pembelajaran mesin. Gunakan algoritma seperti hutan rawak dan LSTM digabungkan dengan pelbagai faktor untuk menentukan arah trend.
Mengoptimumkan logik masuk dan keluar. Tetapkan keadaan penapisan trend untuk mengelakkan perdagangan terhadap trend yang hampir berakhir. Pertimbangkan untuk menggunakan logik keluar bertahap.
Secara keseluruhan, strategi breakout purata bergerak ini sangat sesuai sebagai strategi perdagangan kuant pemula. Ia mempunyai logik yang mudah, mudah difahami dan dioperasikan, dengan beberapa kesan praktikal. Pada masa yang sama, ia meninggalkan banyak ruang untuk ujian dan pengoptimuman lanjut.
/*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)