Strategi persilangan purata bergerak


Tarikh penciptaan: 2023-10-24 16:39:40 Akhirnya diubah suai: 2023-10-24 16:39:40
Salin: 0 Bilangan klik: 671
1
fokus pada
1617
Pengikut

Strategi persilangan purata bergerak

Gambaran keseluruhan

Strategi ini adalah berdasarkan prinsip persilangan purata bergerak, apabila purata jangka pendek lebih banyak daripada purata jangka panjang dari bawah, dan apabila purata jangka pendek lebih sedikit daripada purata jangka panjang dari atas, ia adalah strategi pengesanan trend yang tipikal.

Prinsip Strategi

Strategi ini terutamanya menggunakan dua purata bergerak mudah untuk jangka pendek dan jangka panjang dan menentukan arah trend berdasarkan persilangan mereka.

Secara khusus, strategi ini mulakan dengan mengira garis purata jangka pendek xMA dan garis purata jangka panjang, dengan panjang garis purata jangka pendek adalah Len dan panjang garis purata jangka panjang adalah 2.*Len。

Kemudian strategi menilai sama ada garis purata jangka pendek melintasi garis purata jangka panjang, dan jika berlaku, ia akan menghasilkan isyarat ganda; menilai sama ada garis purata jangka pendek melintasi garis purata jangka panjang, dan jika berlaku, ia akan menghasilkan isyarat kosong.

Selepas menerima isyarat untuk melakukan lebih banyak, jika anda tidak memegang kedudukan pada masa ini, maka anda akan melakukan lebih banyak dengan harga pasaran; selepas menerima isyarat untuk melakukan lebih sedikit, jika anda tidak memegang kedudukan pada masa ini, maka anda akan membuka kedudukan dengan harga pasaran.

Di samping itu, strategi juga menetapkan titik hentian kerugian. Setelah melakukan lebih banyak, menetapkan harga hentian kerugian sebagai peratusan harga masuk - hentian kerugian*Harga kemasukan, harga berhenti adalah harga kemasukan + peratus berhenti*Harga kemasukan; set harga hentian selepas penutupan sebagai harga kemasukan + peratus hentian*Harga kemasukan, harga hentian sebagai harga kemasukan-peratusan hentian*Harga masuk

Akhirnya, strategi ini juga menghasilkan garis lurus visual untuk membantu menilai trend.

Kelebihan Strategik

  • Pemikiran yang ringkas, mudah difahami dan sesuai untuk pelajar pemula;

  • Mengambil kira arah trend berdasarkan purata bergerak, ia boleh mengesan trend pasaran dengan berkesan.

  • Menetapkan titik henti kerugian untuk mengawal risiko;

  • Garis rata menunjukkan kurva visual, dan perubahan trend ditunjukkan secara intuitif.

Risiko Strategik

  • Garis rata adalah ketinggalan dan boleh menyebabkan risiko kehilangan masa masuk yang terbaik;

  • Tetapan titik penangguhan yang tidak munasabah boleh menyebabkan penangguhan yang terlalu ringan atau terlalu ketat;

  • Kemungkinan untuk menghasilkan isyarat palsu apabila harga saham bergolak;

  • Pengoptimuman parameter berdasarkan parameter kitaran rata-rata sahaja boleh menyebabkan terlalu sesuai.

Risiko ini dapat dikurangkan dengan menghentikan kerugian yang sesuai, mengoptimumkan kombinasi parameter kitaran rata-rata, dan menambahkan penapisan indikator lain.

Arah pengoptimuman strategi

  • Menambah penapisan untuk penunjuk lain, seperti MACD, KDJ dan lain-lain, untuk mengelakkan isyarat salah letak pada garis sejajar;

  • Mengoptimumkan pelbagai kombinasi untuk garis purata jangka pendek dan panjang garis purata jangka panjang untuk mencari kombinasi parameter yang terbaik;

  • Uji strategi penangguhan kerugian yang berbeza, seperti penangguhan kata, penangguhan bergerak;

  • Tambah modul pengurusan kedudukan untuk mengoptimumkan kecekapan penggunaan dana.

ringkaskan

Strategi ini keseluruhan idea yang jelas dan ringkas, berdasarkan garis lurus silang menilai arah trend, trend boleh dijejaki dengan berkesan, dan risiko boleh dikawal, sesuai untuk rujukan pembelajaran pemula. Tetapi bergantung kepada garis lurus sahaja mungkin terdapat isyarat yang salah, ruang pengoptimuman masih besar, boleh dilakukan dalam banyak aspek untuk meningkatkan pengoptimuman, menjadikan strategi lebih stabil dan dipercayai.

Kod 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')