Strategi Crossover Rata-rata Bergerak

SMA MA
Tanggal Pembuatan: 2024-06-03 11:25:43 Akhirnya memodifikasi: 2024-06-03 11:25:43
menyalin: 0 Jumlah klik: 643
1
fokus pada
1617
Pengikut

Strategi Crossover Rata-rata Bergerak

Ringkasan

Artikel ini membahas strategi perdagangan kuantitatif yang didasarkan pada prinsip lintas rata-rata bergerak. Strategi ini menilai arah polygon dengan membandingkan hubungan harga dengan rata-rata bergerak, sambil mengatur titik stop loss untuk mengendalikan risiko. Kode strategi ditulis menggunakan Pine Script, mengintegrasikan API platform perdagangan Dhan, yang memungkinkan perdagangan otomatis dari sinyal strategi.

Prinsip Strategi

Inti dari strategi ini adalah moving average, dengan menghitung nilai rata-rata bergerak sederhana dari harga penutupan dalam periode tertentu sebagai dasar untuk menilai tren. Ketika harga melewati garis rata-rata, sinyal melakukan lebih banyak, dan ketika harga melewati garis rata-rata, sinyal melakukan lebih banyak. Pada saat yang sama, menggunakan fungsi ekstrim untuk memfilter sinyal berulang secara berurutan, meningkatkan kualitas sinyal.

Keunggulan Strategis

Moving Average Crossover adalah metode pelacakan tren yang sederhana dan mudah digunakan, yang dapat secara efektif menangkap tren jangka menengah dan panjang pasar. Dengan parameter yang diatur secara wajar, strategi ini dapat memperoleh keuntungan yang stabil dalam situasi tren. Pengaturan stop loss menguntungkan untuk mengontrol penarikan balik, meningkatkan rasio risiko / keuntungan.

Risiko Strategis

Moving average pada dasarnya adalah indikator yang tertinggal, pada saat pasar berbalik, sinyal dapat mengalami keterlambatan, yang menyebabkan kesalahan waktu perdagangan terbaik atau menghasilkan sinyal palsu. Pengaturan parameter yang tidak tepat dapat memengaruhi kinerja strategi, yang perlu dioptimalkan sesuai dengan karakteristik dan siklus pasar yang berbeda.

Arah optimasi strategi

  1. Untuk meningkatkan keandalan sinyal, Anda dapat mencoba menggunakan beberapa kombinasi garis rata-rata periode yang berbeda, seperti garis rata-rata ganda, garis rata-rata tiga silang, dll.
  2. Pengaturan untuk stop loss dapat dioptimalkan lebih lanjut, seperti penyesuaian dinamis berdasarkan indikator volatilitas seperti ATR, atau dengan strategi tracking stop loss.
  3. Anda dapat menambahkan lebih banyak kondisi penyaringan, seperti harga menembus resistensi pendukung penting, perubahan volume transaksi, dan lain-lain, untuk meningkatkan kualitas sinyal.
  4. Dalam penerapan di tempat kerja, diperlukan strategi untuk melakukan verifikasi dan pengelolaan dana, mengendalikan risiko transaksi tunggal dan penarikan secara keseluruhan.

Meringkaskan

Strategi moving average crossover adalah strategi perdagangan kuantitatif yang sederhana dan praktis, yang dapat menghasilkan keuntungan dalam situasi tren melalui pelacakan tren dan pengendalian stop loss. Namun, strategi itu sendiri memiliki keterbatasan tertentu, yang perlu dioptimalkan dan diperbaiki sesuai dengan karakteristik pasar dan preferensi risiko. Dalam aplikasi praktis, juga perlu memperhatikan disiplin yang ketat dan pengendalian risiko yang baik.

Kode 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)