Sumber daya yang dimuat... Pemuatan...

Strategi lintas MA

Penulis:ChaoZhang, Tanggal: 2024-06-03 11:25:43
Tag:SMAMA

img

Gambaran umum

Artikel ini memperkenalkan strategi perdagangan kuantitatif berdasarkan prinsip crossover rata-rata bergerak. Strategi menentukan arah panjang/pendek dengan membandingkan harga dengan rata-rata bergerak, dan menetapkan tingkat profit dan stop loss untuk mengendalikan risiko.

Prinsip Strategi

Inti dari strategi ini adalah rata-rata bergerak. Ini menghitung rata-rata bergerak sederhana dari harga penutupan selama periode tertentu sebagai dasar untuk menilai tren. Ketika harga melintasi di atas rata-rata bergerak, itu menghasilkan sinyal panjang, dan ketika melintasi di bawah, itu menghasilkan sinyal pendek. Fungsi exrem digunakan untuk menyaring sinyal duplikat terus menerus dan meningkatkan kualitas sinyal. Strategi menetapkan tingkat mengambil keuntungan dan stop loss yang sesuai berdasarkan arah posisi saat ini dan hubungan antara harga dan rata-rata bergerak, mengendalikan risiko dan pengembalian setiap perdagangan.

Keuntungan Strategi

Moving average crossover adalah metode trend-following yang sederhana dan mudah digunakan yang dapat secara efektif menangkap tren pasar jangka menengah hingga panjang. Dengan pengaturan parameter yang wajar, strategi dapat memperoleh pengembalian yang stabil di pasar tren. Pengaturan take profit dan stop loss membantu mengendalikan drawdown dan meningkatkan rasio risiko-imbalan. Logika kode strategi jelas, menggunakan modularisasi fungsi, dengan keterbacaan dan skalabilitas yang kuat. Selain itu, strategi mengintegrasikan API platform Dhan untuk mewujudkan eksekusi pesanan otomatis, meningkatkan efisiensi eksekusi.

Risiko Strategi

Rata-rata bergerak secara inheren adalah indikator yang tertinggal. Selama titik balik pasar, sinyal dapat tertunda, yang mengarah pada kesempatan perdagangan optimal yang hilang atau sinyal palsu. Pengaturan parameter yang tidak benar akan mempengaruhi kinerja strategi dan perlu dioptimalkan sesuai dengan karakteristik pasar dan kerangka waktu yang berbeda. Persentase tetap mengambil keuntungan dan stop loss mungkin tidak beradaptasi dengan perubahan dalam volatilitas pasar, dan juga ada risiko kerugian karena pengaturan parameter yang tidak tepat.

Arah Optimasi Strategi

  1. Beberapa rata-rata bergerak dari kerangka waktu yang berbeda dapat dikombinasikan untuk meningkatkan keandalan sinyal, seperti crossover rata-rata bergerak ganda atau tiga kali lipat.
  2. Pengaturan take profit dan stop loss dapat dioptimalkan lebih lanjut, seperti penyesuaian dinamis berdasarkan indikator volatilitas seperti ATR, atau mengadopsi strategi trailing stop.
  3. Lebih banyak kondisi penyaringan dapat ditambahkan, seperti terobosan harga dari level support/resistance yang penting, perubahan volume perdagangan, dll., untuk meningkatkan kualitas sinyal.
  4. Dalam aplikasi yang sebenarnya, perlu melakukan pengujian dan validasi strategi yang tepat dan mengelola dana untuk mengendalikan risiko perdagangan tunggal dan penarikan keseluruhan.

Ringkasan

Strategi crossover rata-rata bergerak adalah strategi perdagangan kuantitatif yang sederhana dan praktis yang dapat menghasilkan keuntungan di pasar tren melalui pelacakan tren dan kontrol stop loss. Namun, strategi itu sendiri memiliki keterbatasan tertentu dan perlu dioptimalkan dan ditingkatkan sesuai dengan karakteristik pasar dan preferensi risiko. Dalam penerapan praktis, juga perlu memperhatikan eksekusi disiplin yang ketat dan kontrol risiko yang tepat. Pemrograman strategi dapat memanfaatkan bahasa profesional seperti Pine Script dan mengintegrasikan API platform perdagangan untuk mewujudkan eksekusi strategi otomatis.


/*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) 



Berkaitan

Lebih banyak