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