Strategi persilangan rata-rata bergerak


Tanggal Pembuatan: 2023-10-24 16:39:40 Akhirnya memodifikasi: 2023-10-24 16:39:40
menyalin: 0 Jumlah klik: 671
1
fokus pada
1617
Pengikut

Strategi persilangan rata-rata bergerak

Ringkasan

Strategi ini didasarkan pada prinsip lintas rata-rata bergerak, dan merupakan strategi pelacakan tren yang khas ketika rata-rata jangka pendek lebih banyak ketika melewati rata-rata jangka panjang dari bawah, dan kosong ketika rata-rata jangka pendek melewati rata-rata jangka panjang dari atas.

Prinsip Strategi

Strategi ini didasarkan pada penghitungan dua rata-rata bergerak sederhana (SMA) jangka pendek dan jangka panjang dan menentukan arah tren berdasarkan persimpangan mereka.

Secara khusus, strategi pertama menghitung rata-rata jangka pendek xMA dan rata-rata jangka panjang, dengan panjang rata-rata jangka pendek adalah Len dan panjang rata-rata jangka panjang adalah 2*Len。

Strategi kemudian menilai apakah rata-rata jangka pendek melewati rata-rata jangka panjang, dan jika terjadi, menghasilkan sinyal multipel; menentukan apakah rata-rata jangka pendek melewati rata-rata jangka panjang, dan jika terjadi, menghasilkan sinyal kosong.

Setelah menerima sinyal melakukan lebih banyak, jika saat ini tidak memegang posisi, maka bukalah posisi lebih banyak dengan harga pasar; Setelah menerima sinyal melakukan lebih sedikit, jika saat ini tidak memegang posisi, maka bukalah posisi dengan harga pasar.

Selain itu, strategi juga menetapkan stop loss stop point. Setelah melakukan over set stop loss sebagai harga masuk - stop loss persentase*Harga masuk, harga berhenti adalah harga masuk + persentase berhenti*Harga masuk; Stop loss setelan harga masuk + persentase stop loss setelah melakukan shorting*Harga masuk, harga berhenti adalah harga masuk - persentase berhenti*Harga tiket masuk

Akhirnya, strategi ini juga menghasilkan kurva visualisasi garis rata untuk membantu menilai tren.

Keunggulan Strategis

  • Pemikiran sederhana, jelas, mudah dipahami, dan cocok untuk pemula;

  • Dengan menggunakan moving average untuk menentukan arah tren, maka akan lebih efektif untuk melacak tren pasar.

  • Pengaturan Stop Loss Stop Point untuk mengendalikan risiko;

  • Grafik menunjukkan garis kurva rata-rata, dan refleksi perubahan tren secara intuitif.

Risiko Strategis

  • Garis rata memiliki keterlambatan, yang dapat menyebabkan risiko kehilangan waktu terbaik untuk masuk;

  • Penetapan stop loss yang tidak masuk akal dapat menyebabkan stop loss yang terlalu longgar atau terlalu ketat;

  • Jika harga saham berfluktuasi secara dramatis, maka garis rata-rata dapat menghasilkan sinyal palsu.

  • Optimasi parameter hanya berdasarkan parameter periode rata-rata dapat menyebabkan overfit.

Risiko-risiko ini dapat dikurangi dengan mengendurkan stop loss yang tepat, mengoptimalkan kombinasi parameter siklus rata-rata, dan menambahkan penyaringan indikator lainnya.

Arah optimasi strategi

  • Menambahkan indikator lain untuk memfilter, seperti MACD, KDJ, dan lain-lain, untuk menghindari kesalahan posisi linier yang salah menghasilkan sinyal yang salah;

  • Optimalisasi multi-kombinasi untuk panjang garis rata-rata jangka pendek dan panjang garis rata-rata jangka panjang untuk menemukan kombinasi parameter yang optimal;

  • Uji coba berbagai strategi stop loss, seperti stop loss kata-kata, stop loss bergerak, dan lain-lain.

  • Tambahkan modul manajemen posisi untuk mengoptimalkan efisiensi penggunaan dana.

Meringkaskan

Strategi ini secara keseluruhan ide yang jelas dan ringkas, berdasarkan garis lurus silang menilai arah tren, dapat secara efektif melacak tren, dan risiko yang terkontrol, cocok untuk pemula belajar referensi. Tetapi hanya mengandalkan garis lurus mungkin terjadi sinyal yang salah, ruang optimasi masih besar, dapat dilakukan dari berbagai sisi perbaikan optimasi, membuat strategi lebih stabil dan dapat diandalkan.

Kode Sumber Strategi
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@strategy_alert_message {{strategy.order.alert_message}} 
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 19/09/2023
// MA Crossover Bot for OKX Exchange
////////////////////////////////////////////////////////////
var ALERTGRP_CRED = "entry"
signalToken = input("", "Signal Token", inline = "11", group = ALERTGRP_CRED)
OrderType = input.string("market", "Order Type", options = ["market", "limit"], inline = "21", group = ALERTGRP_CRED)
OrderPriceOffset = input.float(0, "Order Price Offset", minval = 0, maxval = 100, step = 0.01, inline = "21", group = ALERTGRP_CRED)
InvestmentType = input.string("percentage_balance", "Investment Type", options = ["margin", "contract", "percentage_balance", "percentage_investment"], inline = "31", group = ALERTGRP_CRED)
Amount = input.float(100, "Amount", minval = 0.01, inline = "31", group = ALERTGRP_CRED)

getAlertMsg(action, instrument, signalToken, orderType, orderPriceOffset, investmentType, amount) =>
    str = '{'
    str := str + '"action": "' + action + '", '
    str := str + '"instrument": "' + instrument + '", '
    str := str + '"signalToken": "' + signalToken + '", '
    //str := str + '"timestamp": "' + str.format_time(timenow, "yyyy-MM-dd'T'HH:mm:ssZ", "UTC+0") + '", '
    str := str + '"timestamp": "' + '{{timenow}}' + '", '
    str := str + '"orderType": "' + orderType + '", '
    str := str + '"orderPriceOffset": "' + str.tostring(orderPriceOffset) + '", '
    str := str + '"investmentType": "' + investmentType + '", '
    str := str + '"amount": "' + str.tostring(amount) + '"'
    str := str + '}'
    str

getOrderAlertMsgExit(action, instrument, signalToken) =>
    str = '{'
    str := str + '"action": "' + action + '", '
    str := str + '"instrument": "' + instrument + '", '
    str := str + '"signalToken": "' + signalToken + '", '
    str := str + '"timestamp": "' + '{{timenow}}' + '", '
    str := str + '}'
    str

strategy(title='OKX: MA Crossover', overlay=true)
Len = input(13)
Profit = input.float(7, title='Take Profit %', minval=0.01) / 100
Stop =  input.float(7, title='Stop Loss %', minval=0.01) / 100
xMA = ta.sma(close, Len)
//Robot State
isLong = strategy.position_size > 0 
isShort = strategy.position_size < 0 
isFlat = strategy.position_size == 0 
//Current Signal
doLong = low < xMA[1] ? true : false
doShort =   high > xMA[1] ? true:  false
//Backtest Start Date
tm =  timestamp(2022, 01, 01, 09, 30)
//Entry and exit orders
if  doLong[2] == false and isLong == false and doLong and time > tm
    strategy.cancel_all()
    buyAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_LONG', instrument = syminfo.ticker, signalToken = signalToken)
    buyAlertMsg = getAlertMsg(action = 'ENTER_LONG', instrument = syminfo.ticker, signalToken = signalToken, orderType =  OrderType, orderPriceOffset =  OrderPriceOffset, investmentType =  InvestmentType, amount = Amount)
    strategy.entry('Long', strategy.long, limit = close, comment='Long', alert_message =buyAlertMsg)
    strategy.exit("ExitLong", 'Long', stop=close - close * Stop  , limit = close + close * Profit , qty_percent = 100, alert_message = buyAlertMsgExit)  
if doShort[2] == false and isShort == false and doShort and time > tm
    strategy.cancel_all()
    sellAlertMsgExit = getOrderAlertMsgExit(action = 'EXIT_SHORT', instrument = syminfo.ticker, signalToken = signalToken)
    sellAlertMsg = getAlertMsg(action = 'ENTER_SHORT', instrument = syminfo.ticker, signalToken = signalToken, orderType =  OrderType, orderPriceOffset =  OrderPriceOffset, investmentType =  InvestmentType, amount = Amount)
    strategy.entry('Short', strategy.short, limit=close, comment='Short', alert_message = sellAlertMsg)
    strategy.exit("ExitShort", 'Short', stop=close + close * Stop  , limit = close - close * Profit  , qty_percent = 100, alert_message = sellAlertMsgExit)  
//Visual
barcolor(isShort  ? color.red : isLong ? color.green : color.blue)
plot(xMA, color=color.new(color.red, 0), title='MA')