
स्व-अनुकूली सम-रेखा ग्रिड क्वांटिटेटिव ट्रेडिंग रणनीति एक मात्रात्मक रणनीति है जो सम-रेखा और ग्रिड ट्रेडिंग के विचार पर आधारित है। यह रणनीति बाजार की प्रवृत्ति के केंद्र रेखा के रूप में मूल्य की एक सरल चलती औसत (एसएमए) की गणना करके बनाई गई है, और फिर केंद्र रेखा के नीचे एक आनुपातिक ग्रिड लाइन स्थापित की गई है। जब कीमत इन ग्रिड लाइनों के बीच में उतार-चढ़ाव करती है, तो रणनीति खरीदती है जब कीमत नीचे की ग्रिड लाइन को छूती है, और बेचती है जब यह ऊपरी ग्रिड लाइन को छूती है। यह ट्रेडिंग विधि विशेष रूप से बाजार के वातावरण में उपयोग के लिए उपयुक्त है जहां कीमतें उतार-चढ़ाव करती हैं लेकिन समग्र रूप से सम-रेखा के आसपास हिलती हैं।
स्व-अनुकूली सम-रेखीय ग्रिड क्वांटिफाइड ट्रेडिंग रणनीति का मूल सिद्धांत बाजार मूल्य की औसत वापसी की विशेषता पर आधारित है। रणनीति निम्नलिखित चरणों के माध्यम से लागू होती हैः
इस रणनीति का सार यह है कि कीमतों में उच्च आवृत्ति वाले उतार-चढ़ावों को एक निश्चित सीमा के भीतर पकड़ना है, जिससे “कम खरीदें और अधिक बेचें” संभव हो सके। रणनीति एक साथ कई पदों को रखने की अनुमति देती है (अधिकतम 15), प्रत्येक पद अलग-अलग ग्रिड लाइनों के अनुरूप होता है। इस डिजाइन ने रणनीति को मूल्य उतार-चढ़ाव का अधिक लाभ उठाने की अनुमति दी है।
अनुकूलित सम-रेखीय ग्रिड क्वांटिफाइड ट्रेडिंग रणनीतियों के निम्नलिखित उल्लेखनीय फायदे हैंः
हालांकि, इस रणनीति के तर्कसंगत डिजाइन के बावजूद, निम्नलिखित संभावित जोखिम हैं:
कोड के विश्लेषण के आधार पर, इस रणनीति को निम्नलिखित दिशाओं में अनुकूलित किया जा सकता हैः
स्व-अनुकूली सम-रेखा ग्रिड मात्रात्मक व्यापार रणनीति एक सम-मूल्य वापसी सिद्धांत पर आधारित ग्रिड व्यापार प्रणाली है, जो चलती औसत के आसपास ग्रिड सेट करके मूल्य उतार-चढ़ाव के कारण व्यापार के अवसरों को पकड़ती है। रणनीति को सरल बनाया गया है, इसमें कम पैरामीटर हैं और इसे आसानी से समायोजित किया जा सकता है। यह विशेष रूप से अस्थिर बाजारों में उपयोग के लिए उपयुक्त है। रणनीति का मुख्य लाभ इसकी आत्म-अनुकूली और जोखिम-वितरण विशेषताओं में है, जो स्वचालित रूप से विभिन्न मूल्य स्तरों के लिए अनुकूल है और जोखिम को कई ग्रिड स्थानों के माध्यम से वितरित करता है।
हालांकि, इस रणनीति में मजबूत प्रवृत्ति बाजारों में जोखिम हो सकता है, प्रवृत्ति फ़िल्टरिंग और स्टॉप-लॉस तंत्र को बढ़ाने की आवश्यकता है। इसके अलावा, ग्रिड चौड़ाई को गतिशील रूप से समायोजित करने, धन प्रबंधन में सुधार करने और कई समय चक्रों की पुष्टि करने जैसे अनुकूलन दिशाओं का भी पता लगाना उचित है। इन अनुकूलन के माध्यम से, रणनीति को विभिन्न बाजार स्थितियों में अधिक स्थिर और उत्कृष्ट प्रदर्शन की उम्मीद है।
अनुभवी क्वांटिटेटिव ट्रेडर्स के लिए, यह रणनीति एक अच्छा आधारभूत ढांचा प्रदान करती है, जिसे व्यक्तिगत ट्रेडिंग शैली और जोखिम वरीयताओं के अनुसार और अनुकूलित और अनुकूलित किया जा सकता है, जिससे बाजार में उतार-चढ़ाव को पकड़ने में ग्रिड ट्रेडिंग का लाभ उठाया जा सकता है।
/*backtest
start: 2025-04-01 00:00:00
end: 2025-06-22 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy('Grid Trading Strategy', overlay=true, pyramiding=15)
// 输入参数设置
ma_length = input.int(300, '移动平均线长度', group='移动平均线条件', step=10)
std = input.float(0.03, title='网格上下偏差率', group='网格条件', step=0.01)
grid = input.int(15, maxval=15, title='网格线数量', group='网格条件')
// 计算移动平均线及网格边界
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
// 创建网格价格数组
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
array.push(grid_array, lower_bound + grid_width * i)
// 创建订单状态布尔数组(只初始化一次)
var order_array = array.new_bool(grid, false)
// 执行交易逻辑
for i = 0 to grid - 1 by 1
// 买入逻辑:价格低于网格线且该位置未持仓
if close < array.get(grid_array, i) and not array.get(order_array, i)
buy_id = i
array.set(order_array, buy_id, true)
strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
// 卖出逻辑:价格高于网格线且下一个网格位置持仓
if close > array.get(grid_array, i) and i != 0
if array.get(order_array, i - 1)
sell_id = i - 1
array.set(order_array, sell_id, false)
strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))
// 可视化网格线
plot(grid > 0 ? array.get(grid_array, 0) : na, color=color.yellow, transp=10)
plot(grid > 1 ? array.get(grid_array, 1) : na, color=color.yellow, transp=10)
plot(grid > 2 ? array.get(grid_array, 2) : na, color=color.yellow, transp=10)
plot(grid > 3 ? array.get(grid_array, 3) : na, color=color.yellow, transp=10)
plot(grid > 4 ? array.get(grid_array, 4) : na, color=color.yellow, transp=10)
plot(grid > 5 ? array.get(grid_array, 5) : na, color=color.yellow, transp=10)
plot(grid > 6 ? array.get(grid_array, 6) : na, color=color.yellow, transp=10)
plot(grid > 7 ? array.get(grid_array, 7) : na, color=color.yellow, transp=10)
plot(grid > 8 ? array.get(grid_array, 8) : na, color=color.yellow, transp=10)
plot(grid > 9 ? array.get(grid_array, 9) : na, color=color.yellow, transp=10)
plot(grid > 10 ? array.get(grid_array, 10) : na, color=color.yellow, transp=10)
plot(grid > 11 ? array.get(grid_array, 11) : na, color=color.yellow, transp=10)
plot(grid > 12 ? array.get(grid_array, 12) : na, color=color.yellow, transp=10)
plot(grid > 13 ? array.get(grid_array, 13) : na, color=color.yellow, transp=10)
plot(grid > 14 ? array.get(grid_array, 14) : na, color=color.yellow, transp=10)