Strategi Persilangan Purata Bergerak

SMA MA
Tarikh penciptaan: 2024-06-03 11:25:43 Akhirnya diubah suai: 2024-06-03 11:25:43
Salin: 0 Bilangan klik: 643
1
fokus pada
1617
Pengikut

Strategi Persilangan Purata Bergerak

Gambaran keseluruhan

Artikel ini memperkenalkan strategi perdagangan kuantitatif berdasarkan prinsip persilangan purata bergerak. Strategi ini membandingkan hubungan harga dengan purata bergerak, menilai arah polygon, dan menetapkan titik stop loss untuk mengawal risiko. Kod strategi ditulis menggunakan Pine Script, mengintegrasikan API platform perdagangan Dhan, yang membolehkan perdagangan automatik dengan isyarat strategi.

Prinsip Strategi

Inti strategi ini adalah rata-rata bergerak, dengan mengira purata bergerak mudah harga penutupan dalam tempoh tertentu sebagai asas penilaian trend. Apabila harga melintasi garis rata-rata, ia menghasilkan isyarat melakukan banyak, dan apabila ia melintasi garis bawah, ia menghasilkan isyarat kosong. Pada masa yang sama, menggunakan fungsi extrem untuk menapis isyarat berulang secara berturut-turut, meningkatkan kualiti isyarat.

Kelebihan Strategik

Persaingan rata-rata bergerak adalah kaedah pelacakan trend yang mudah digunakan yang dapat menangkap trend jangka panjang dan sederhana di pasaran. Dengan parameter yang ditetapkan dengan bijak, strategi ini dapat memperoleh keuntungan yang stabil dalam keadaan trend. Tetapan stop loss membantu mengawal penarikan balik dan meningkatkan nisbah risiko dan keuntungan.

Risiko Strategik

Rata-rata bergerak pada dasarnya adalah penunjuk keterlambatan, pada masa pasaran bertukar, isyarat mungkin mengalami kelewatan, yang menyebabkan kehilangan masa perdagangan terbaik atau menghasilkan isyarat palsu. Tetapan parameter yang tidak betul akan mempengaruhi prestasi strategi, yang perlu dioptimumkan mengikut ciri-ciri dan kitaran pasaran yang berbeza.

Arah pengoptimuman strategi

  1. Anda boleh cuba menggunakan beberapa kombinasi garis rata berkala yang berbeza untuk meningkatkan kebolehpercayaan isyarat, seperti garis rata ganda, garis rata tiga dan sebagainya.
  2. Tetapan untuk stop loss boleh dioptimumkan lebih jauh, seperti penyesuaian dinamik mengikut indikator kadar turun naik seperti ATR, atau menggunakan strategi tracking stop loss.
  3. Lebih banyak syarat penapisan boleh dimasukkan, seperti harga menembusi tahap rintangan sokongan penting, perubahan jumlah transaksi, dan sebagainya, untuk meningkatkan kualiti isyarat.
  4. Dalam aplikasi dalam talian, strategi yang baik diperlukan untuk mengesahkan dan menguruskan dana, mengawal risiko transaksi tunggal dan penarikan balik keseluruhan.

ringkaskan

Strategi crossover rata-rata bergerak adalah strategi perdagangan kuantitatif yang mudah dan praktikal, yang boleh mendapat keuntungan dalam keadaan trend melalui trend tracking dan kawalan stop loss. Tetapi strategi itu sendiri mempunyai batasan tertentu, yang perlu dioptimumkan dan diperbaiki mengikut ciri-ciri pasaran dan keutamaan risiko. Dalam aplikasi praktikal, anda juga perlu berhati-hati untuk melaksanakan disiplin yang ketat dan mengawal risiko.

Kod sumber strategi
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © syam-mohan-vs @ T7 - wwww.t7wealth.com www.t7trade.com
//This is an educational code done to describe the fundemantals of pine scritpting language and integration with Indian discount broker Dhan. This strategy is not tested or recommended for live trading. 

//@version=5
strategy("Pine & Dhan - Moving Average Crossover Strategy", overlay=true)

//Remove excess signals
exrem(condition1, condition2) =>
    temp = false
    temp := na(temp[1]) ? false : not temp[1] and condition1 ? true : temp[1] and condition2 ? false : temp[1]
    ta.change(temp) == true ? true : false

// Define MA period
ma_period = input(20, title = "MA Length")

// Define target and stop loss levels
target_percentage = input.float(title="Target Profit (%)", defval=2.0)
stop_loss_percentage = input.float(title="Stop Loss (%)", defval=1.0)

// Calculate the MA
ma = ta.sma(close, ma_period)

// Entry conditions
long_entry = close >= ma
short_entry = close < ma

// Calculate target and stop loss prices
target_price = long_entry ? strategy.position_avg_price + (close * (target_percentage / 100)) : strategy.position_avg_price - (close * (target_percentage / 100)) 
stop_loss_price = short_entry ? strategy.position_avg_price + (close * (stop_loss_percentage/ 100)) : strategy.position_avg_price - (close * (stop_loss_percentage / 100)) 

long_entry := exrem(long_entry,short_entry)
short_entry := exrem(short_entry,long_entry)

// Plot the MA
plot(ma, color=color.blue, linewidth=2, title="MA")

// Plot the entry and exit signals
plotshape(long_entry, style=shape.arrowup, color=color.green, size=size.small,location = location.belowbar)
plotshape(short_entry, style=shape.arrowdown, color=color.red, size=size.small,location = location.abovebar)

//Find absolute value of positon size to exit position properly
size = math.abs(strategy.position_size)

//Replace these four JSON strings with those generated from user Dhan account
long_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"I","sort_order":"1","price":"0"}]}'
long_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"S","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'
short_exit_msg = '{"secret":"C0B2u","alertType":"multi_leg_order","order_legs":[{"transactionType":"B","orderType":"MKT","quantity":"1","exchange":"NSE","symbol":"NIFTY1!","instrument":"FUT","productType":"M","sort_order":"1","price":"0"}]}'

// Submit orders based on signals
if(strategy.position_size == 0)
    if long_entry 
        strategy.order("Long", strategy.long,alert_message=long_msg)          

    if short_entry
        strategy.order("Short", strategy.short,alert_message=short_msg)        
    
if(strategy.position_size > 0)
    
    if(short_entry)
        strategy.order("Short", strategy.short, qty = size, alert_message=short_msg)     
    else
        strategy.exit("Long Exit", from_entry="Long", qty = size, stop=stop_loss_price, limit= target_price, alert_message=long_exit_msg)

if(strategy.position_size < 0)
    
    if(long_entry)
        strategy.order("Long", strategy.long, qty = size, alert_message=long_msg)    
    else           
        strategy.exit("Short Exit", from_entry="Short", qty = size, stop=stop_loss_price, limit= target_price, alert_message=short_exit_msg)