Strategi Dagangan Breakout Berdasarkan Purata Pergerakan


Tarikh penciptaan: 2023-11-28 13:50:49 Akhirnya diubah suai: 2023-11-28 13:50:49
Salin: 2 Bilangan klik: 697
1
fokus pada
1617
Pengikut

Strategi Dagangan Breakout Berdasarkan Purata Pergerakan

Gambaran keseluruhan

Ini adalah strategi perdagangan pecah yang didasarkan pada garis rata-rata bergerak. Ia menghasilkan isyarat perdagangan apabila harga memecahkan garis rata-rata dengan mengira purata harga untuk tempoh tertentu sebagai garis rata-rata.

Prinsip Strategi

Strategi ini adalah berdasarkan pada penunjuk purata bergerak. Ia menggunakan fungsi sma untuk mengira purata harga penutupan purata dalam tempoh tertentu, untuk mendapatkan purata bergerak. Ia menghasilkan isyarat beli apabila harga penutupan terkini menembusi purata bergerak dari bawah ke atas; ia menghasilkan isyarat jual apabila penutupan terkini menembusi purata bergerak dari atas ke bawah.

Khususnya, ia menentukan sumber pengiraan purata bergerak (harga penutupan terkini) dan panjang kitaran dalam strategi, dan mendapat urutan data rata-rata bergerak. Ia kemudian menetapkan dua syarat: untuk membuat pesanan beli apabila harga melintasi garis rata-rata di atas; untuk membuat pesanan jual apabila harga melintasi garis rata-rata di bawah.

Analisis kelebihan

Ini adalah strategi trend-following yang mudah dan praktikal. Ia mempunyai kelebihan berikut:

  1. Pemikiran jelas, mudah difahami dan parameter disesuaikan.
  2. Garis purata bergerak adalah penunjuk teknikal yang biasa digunakan dan boleh dipercayai untuk menapis bunyi pasaran dan mengenal pasti trend.
  3. Pada masa yang sama, anda boleh menetapkan stop loss untuk mengunci sebahagian keuntungan dan mengawal risiko.
  4. Ia hanya memerlukan parameter mudah untuk digunakan dalam kemasukan kuantitatif.

Analisis risiko

Walaupun terdapat banyak kelebihan, strategi ini mempunyai risiko:

  1. Garis purata bergerak mudah mengalami kemunduran dan mungkin terlepas perubahan jangka pendek.
  2. Tidak mempertimbangkan persekitaran yang besar, mudah dipenjarakan.
  3. Parameter tidak dioptimumkan, parameter yang tidak betul akan menjejaskan prestasi strategi.
  4. Tiada penapisan dalam kombinasi dengan penunjuk lain, dan terdapat kadar kesalahan.

Untuk mengawal risiko ini, kita boleh mengoptimumkan penapisan dengan penunjuk lain, memperkenalkan penilaian trend jangka pendek yang besar, atau menggunakan kaedah pembelajaran mesin untuk mencari kombinasi parameter terbaik.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Menambah penghakiman petunjuk teknikal lain, membentuk sistem perdagangan, meningkatkan peluang kemenangan strategi. Sebagai contoh, penambahan penunjuk keputusan tambahan seperti MACD, KD.

  2. Menggunakan tracking stop atau time stop untuk mengunci keuntungan dan mengelakkan kerugian daripada berkembang.

  3. Mengoptimumkan parameter. Mengubah parameter kitaran rata-rata bergerak untuk mencari kombinasi parameter terbaik. Anda juga boleh menguji pelbagai jenis rata-rata bergerak.

  4. Menambah penilaian pembelajaran mesin. Menggunakan algoritma hutan rawak, LSTM dan lain-lain untuk menentukan arah trend.

  5. Optimumkan logik masuk dan keluar. Tetapkan syarat penapisan trend dan elakkan operasi terbalik pada akhir trend. Pertimbangkan untuk menggunakan logik penyelesaian setoran.

ringkaskan

Strategi penembusan garisan rata bergerak ini sangat sesuai sebagai strategi permulaan untuk perdagangan kuantitatif. Idenya mudah, mudah difahami dan dikendalikan, dan mempunyai kesan nyata. Ia juga mempunyai ruang yang besar untuk ujian dan pengoptimuman selanjutnya.

Kod sumber strategi
/*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)