2
ध्यान केंद्रित करना
19
समर्थक

DATADATA ग्रिड रणनीति (II) का समर्थन करता है: ग्रिड की संख्या और वापसी की दर के बीच संबंध

में बनाया: 2025-02-13 16:22:36, को अपडेट: 2025-02-17 17:38:52
comments   0
hits   350

पिछले लेख में, हमने आयाम और वृद्धि और गिरावट के आधार पर DATADATA प्लेटफॉर्म पर मुद्राओं की प्रारंभिक स्क्रीनिंग की थी। आगे, हम ग्रिड ट्रेडिंग में एक प्रमुख कारक - ग्रिड की संख्या निर्धारित करना - का पता लगाएंगे। ग्रिडों की संख्या लेनदेन की आवृत्ति और प्रत्येक लेनदेन के लिए धनराशि की मात्रा निर्धारित करती है, जो बदले में ग्रिड ट्रेडिंग के कुल रिटर्न और जोखिम के स्तर को प्रभावित करती है। इसलिए, सर्वोत्तम संतुलन बिंदु प्राप्त करने के लिए ग्रिडों की संख्या को उचित रूप से कैसे निर्धारित किया जाए, यह एक महत्वपूर्ण मुद्दा है जिस पर प्रत्येक ग्रिड व्यापारी को विचार करने की आवश्यकता है।

ग्रिडों की संख्या निर्धारित करने की चुनौतियाँ

  • बहुत कम ग्रिडयदि ग्रिड की संख्या बहुत कम निर्धारित की जाती है, तो ग्रिड के बीच का अंतराल बड़ा होगा, जिसका अर्थ है कि अगले ग्रिड तक पहुंचने के लिए मूल्य में अधिक उतार-चढ़ाव की आवश्यकता होगी। यद्यपि प्रत्येक ग्रिड की लेन-देन राशि बड़ी होती है और बड़े उतार-चढ़ाव वाले मुनाफे को प्राप्त किया जा सकता है, लेकिन कम व्यापारिक अवसरों के कारण, छोटे उतार-चढ़ाव से प्राप्त कुछ लाभ छूट सकते हैं। इसलिए, समग्र लाभप्रदता अपेक्षा से कम हो सकती है।

  • बहुत अधिक ग्रिडजब ग्रिड की संख्या बहुत अधिक निर्धारित की जाती है, तो प्रत्येक ग्रिड की मूल्य सीमा छोटी होती है, व्यापार के अवसर बढ़ जाते हैं, और खरीद और बिक्री अधिक बार की जा सकती है। हालांकि, प्रत्येक लेनदेन में शामिल पूंजी की छोटी राशि के कारण, ऐसी रणनीतियों में लाभ कमाने के लिए अक्सर उच्च आवृत्ति वाले व्यापार की आवश्यकता होती है। इससे लेनदेन शुल्क में आसानी से वृद्धि हो सकती है, तथा बहुत अधिक बार व्यापार करने से बाजार में छोटे-मोटे उतार-चढ़ाव लाभ का मुख्य स्रोत बन सकते हैं, तथा लाभ की ऊपरी सीमा भी सीमित हो सकती है।

  • ग्रिडों की उचित संख्याग्रिड की उचित संख्या का चयन करते समय बाजार की अस्थिरता, खाते के आकार और अपेक्षित व्यापार आवृत्ति को ध्यान में रखना आवश्यक है। जब बाजार में अस्थिरता अधिक होती है, तो ग्रिडों की संख्या को उचित रूप से बढ़ाने से उतार-चढ़ाव को बेहतर ढंग से पकड़ा जा सकता है, जबकि जब फंड अधिक होता है, तो ग्रिडों की कम संख्या निर्धारित करने से एकल लेनदेन की मात्रा अधिक हो सकती है और लेनदेन शुल्क का दबाव कम हो सकता है। ग्रिड स्पेसिंग और लगातार ट्रेडिंग की लागत को संतुलित करके, रणनीति के रिटर्न और जोखिम नियंत्रण को अधिकतम किया जा सकता है।

ग्रिड की संख्या निम्न के आधार पर निर्धारित की जाती है

1. ग्रिड स्पेसिंग और फंड आवंटन

ग्रिड ट्रेडिंग की एक मुख्य विशेषता यह है कि इसमें अनेक ग्रिड अंतराल निर्धारित करके प्रत्येक अंतराल के लिए धन आवंटित किया जाता है। ग्रिडों की संख्या निर्धारित करते समय, आपको सबसे पहले प्रत्येक ग्रिड के बीच के अंतराल और प्रत्येक ग्रिड में निधियों की मात्रा की गणना करनी होगी। ग्रिडों की संख्या निर्धारित करने से न केवल प्रत्येक ग्रिड में निधियों की मात्रा प्रभावित होती है, बल्कि प्रत्येक ग्रिड की खरीद और बिक्री मूल्य सीमा भी निर्धारित होती है।

  • ग्रिड स्पेसिंग: जब ग्रिड बहुत घना होता है, हालांकि अधिक व्यापारिक अवसर होते हैं, प्रत्येक लेनदेन के लिए धन की मात्रा छोटी होती है, जिससे कुल रिटर्न की ऊपरी सीमा कम हो सकती है; इसके विपरीत, जब ग्रिड बहुत विरल होता है, हालांकि प्रत्येक लेनदेन के लिए धन की मात्रा बड़ी होती है, कम लेनदेन आवृत्ति के कारण, लाभ के अवसर छूट सकते हैं।
  • धन आवंटनग्रिडों की संख्या निर्धारित करते समय, हमें प्रत्येक ग्रिड में बहुत अधिक धनराशि वितरित होने से बचने और प्रभावी रूप से लाभ प्राप्त करने में विफल होने से बचने के लिए धन के आवंटन को संतुलित करने की आवश्यकता होती है।

2. खाता निधि और जोखिम प्रबंधन

ग्रिडों की संख्या निर्धारित करने में खाता निधि एक महत्वपूर्ण कारक है। बड़े खाता कोषों से अधिक ग्रिडों की स्थापना की जा सकती है, जबकि छोटे खाता कोषों के लिए ग्रिडों की संख्या सीमित करने की आवश्यकता होती है, ताकि कोषों के अत्यधिक वितरण से बचा जा सके, जिसके परिणामस्वरूप प्रत्येक ग्रिड में कोषों की मात्रा बहुत कम हो जाती है और प्रभावी रूप से लाभ कमाने में असमर्थता होती है।

इसके अलावा, ग्रिड ट्रेडिंग की जोखिम प्रबंधन रणनीति को भी ग्रिड की संख्या की स्थापना को ध्यान में रखना होगा। विशेषकर जब बाजार में अत्यधिक उतार-चढ़ाव हो रहा हो, तो बहुत अधिक ग्रिडों के कारण अधिक नुकसान हो सकता है, इसलिए अत्यधिक व्यापार से बचने के लिए ग्रिडों की संख्या को यथोचित रूप से नियंत्रित किया जाना चाहिए।

ग्रिड ट्रेडिंग रणनीति कार्यान्वयन

ग्रिड ट्रेडिंग रणनीतियों के वास्तविक अनुप्रयोग में, विशेष रूप से ग्रिड की संख्या और रिटर्न की दर के बीच संतुलन को अनुकूलित करते समय, डेटाडाटा प्लेटफॉर्म का डीक्यूएल (डेटाडाटा क्वेरी लैंग्वेज) बहुत लचीलापन प्रदान करता है। डीक्यूएल न केवल कुशल डेटा क्वेरी, प्रसंस्करण और विश्लेषण का समर्थन करता है, बल्कि व्यापारियों को सबसे उपयुक्त ग्रिड नंबर और अन्य पैरामीटर कॉन्फ़िगरेशन खोजने के लिए ग्रिड ट्रेडिंग रणनीतियों के प्रदर्शन का अनुकरण और बैकटेस्ट करने में भी मदद करता है।

डीक्यूएल के माध्यम से, हम आसानी से कई एक्सचेंजों (जैसे कि बिनेंस) से ऐतिहासिक के-लाइन डेटा प्राप्त कर सकते हैं और इस डेटा के आधार पर ग्रिड ट्रेडिंग रणनीतियों को समायोजित कर सकते हैं। इस तरह, विभिन्न बाजार परिवेशों और विशिष्ट मुद्राओं की अस्थिरता के अनुसार इष्टतम ग्रिड ट्रेडिंग रणनीति की सटीक जांच की जा सकती है।

1. डेटा प्राप्त करें

इससे पहले कि हम अपनी ग्रिड ट्रेडिंग रणनीति का बैकटेस्टिंग शुरू करें, हमें पहले लक्ष्य मुद्रा के लिए बाजार डेटा प्राप्त करना होगा। डेटाबेस से किसी निर्दिष्ट मुद्रा के K-लाइन डेटा की क्वेरी करने के लिए कोड निम्नलिखित है:

# 获取目标币种的K线数据
data = query("select * from klines.spot_1d where Exchange = 'Binance' and Symbol = '???_usdt' order by Time")

व्याख्या:

  • डेटाबेस से पूछताछ करके, हम किसी विशिष्ट मुद्रा (जैसे, अमेरिकी डॉलर, आदि) का मूल्य प्राप्त कर सकते हैं।???_usdt) बिनेंस ट्रेडिंग प्लेटफॉर्म पर (समय, शुरुआती मूल्य, उच्चतम मूल्य, निम्नतम मूल्य और समापन मूल्य, आदि सहित)। यह रणनीति क्रियान्वयन के लिए बुनियादी डेटा प्रदान करता है।

2. ग्रिड रणनीति फ़ंक्शन

ग्रिड ट्रेडिंग रणनीति का मूल एक पूर्व निर्धारित ग्रिड मात्रा और मूल्य सीमा का उपयोग करके व्यापार करना है। विशिष्ट चरण इस प्रकार हैं:

  1. ग्रिड अंतराल (गैप) और प्रति ग्रिड लेनदेन राशि (काल्पनिक) की गणना करें

    • ग्रिड स्पेसिंग (अंतराल): बाजार में उच्चतम और निम्नतम कीमतों के बीच के अनुपात के आधार पर गणना की जाती है। सूत्र इस प्रकार है: [ \text{gap} = \frac{\log(\text{max_p} / \text{min_p})}{\text{grid_num}} ] में,max_pउच्चतम मूल्य के लिए,min_pसबसे कम कीमत के लिए,grid_numग्रिडों की संख्या है.

    • प्रति ग्रिड लेनदेन राशि (काल्पनिक)प्रत्येक ग्रिड की लेनदेन राशि की गणना कुल फंड और ग्रिड की संख्या से की जाती है। सूत्र है: [ \text{notional} = \frac{\text{balance}}{\text{grid_num}} ]

  2. ग्रिड प्रारंभ और समाप्ति मूल्य

    • प्रत्येक ग्रिड की आरंभिक और अंतिम कीमतों की गणना ग्रिड अंतराल के आधार पर गतिशील रूप से की जाती है। उदाहरण के लिए, पहले ग्रिड की शुरुआती कीमत सबसे कम कीमत है, और दूसरे ग्रिड की शुरुआती कीमत सबसे कम कीमत को से गुणा करके प्राप्त होती हैexp(gap), और इसी तरह।
  3. ट्रेडिंग संचालन

    • खुलने की शर्तेंजब कीमत एक निश्चित ग्रिड के शुरुआती मूल्य तक गिर जाती है, तो खरीद ऑपरेशन निष्पादित किया जाता है।
    • बराबरी शर्तेंजब कीमत एक निश्चित ग्रिड के अंतिम मूल्य तक बढ़ जाती है, तो विक्रय ऑपरेशन निष्पादित किया जाता है।
  4. लेनदेन शुल्कयह मानते हुए कि प्रत्येक लेनदेन के लिए हैंडलिंग शुल्क 0.0001 है, हमें प्रत्येक लेनदेन के लिए हैंडलिंग शुल्क की गणना और संचय करना होगा।

def grid_trading_strategy(
    raw,
    grid_num,              # 网格数量
    min_p,                # 最低价格
    max_p,                # 最高价格
):
    """
    执行网格交易策略的函数
    """
    # 初始化变量
    balance = 1000                # 初始资金
    raw = raw[['Time', 'Open', 'High', 'Low', 'Close']]  # 只选择相关列

    # 网格交易策略的设置
    gap = math.log(max_p / min_p) / grid_num   # 计算网格间隔
    notional = balance / grid_num            # 每个网格的交易额

    # 初始化网格
    net = []
    for i in range(grid_num):
        net.append({
            'start_p': min_p * math.exp(i * gap),   # 每个网格的起始价格
            'end_p': min_p * math.exp((i + 1) * gap),  # 每个网格的结束价格
            'amt': notional / (min_p * math.exp(i * gap)),  # 每个网格的购买量
            'status': 'idle'                     # 初始状态为闲置
        })

    # 记录状态
    state = {
        'stock': 0,           # 当前持仓
        'fee': 0,             # 交易费用
        'longTradeVol': 0,    # 长期交易量
        'shortTradeVol': 0,   # 短期交易量
        'profitTbl': [],      # 存储每个时刻的利润
        'feeTbl': [],         # 存储每个时刻的费用
        'netCnt': 0,          # 记录净交易次数
        'idx': 0              # 当前数据的索引
    }

    # 检查开盘交易
    def check_open_orders(state, net):
        for i in range(len(net)):
            if net[i]['status'] == 'idle' and raw['Low'][state['idx']] <= net[i]['start_p'] and raw['Open'][state['idx']] > net[i]['start_p']:
                net[i]['status'] = 'taken'  # 网格被占用
                tradeVol = net[i]['amt'] * net[i]['start_p']
                state['stock'] += net[i]['amt']
                state['longTradeVol'] += tradeVol
                state['fee'] += tradeVol * 0.0001  # 假设手续费为0.0001

    # 检查平仓交易
    def check_close_orders(state, net):
        for i in range(len(net)):
            if net[i]['status'] == 'taken' and raw['High'][state['idx']] >= net[i]['end_p'] and raw['Open'][state['idx']] < net[i]['end_p']:
                net[i]['status'] = 'idle'  # 网格状态恢复为空闲
                tradeVol = net[i]['amt'] * net[i]['end_p']
                state['stock'] -= net[i]['amt']
                state['shortTradeVol'] += tradeVol
                state['fee'] += tradeVol * 0.0001  # 假设手续费为0.0001
                state['netCnt'] += 1

    # 日志记录利润和费用
    def log(state):
        addVol = state['stock'] * raw['Close'][state['idx']]  # 当前仓位的总价值
        pl = state['shortTradeVol'] - state['longTradeVol'] + addVol  # 计算利润
        state['profitTbl'].append(pl)
        state['feeTbl'].append(state['fee'])

    # 主交易循环
    for i in range(len(raw)):
        state['idx'] = i
        if raw['Close'][state['idx']] >= raw['Open'][state['idx']]:
            check_open_orders(state, net)
            check_close_orders(state, net)
        else:
            check_close_orders(state, net)
            check_open_orders(state, net)
        log(state)

    # 将利润和费用数据整理为DataFrame
    pl = DataFrame({'pl' : state['profitTbl'],  'fee' : state['feeTbl']})
    pl['time'] = raw['Time']
    pl['pl-net'] = pl['pl'] - pl['fee']
    
    return pl

3. बैकटेस्ट चलाएँ

लक्ष्य मुद्रा के लिए, हम ‘oax_usdt’ मुद्रा चुनते हैं। पिछले लेख में कोड की जाँच करने के बाद, यह मुद्रा बिना किसी महत्वपूर्ण एकतरफा प्रवृत्ति को दिखाए लंबे समय तक उच्च आयाम बनाए रखती है। हम अलग-अलग ग्रिड नंबरों के प्रभावों को देखने और फिर एक उपयुक्त ग्रिड नंबर खोजने के लिए सिम्युलेटेड बैकटेस्टिंग के लिए अलग-अलग ग्रिड नंबर (उदाहरण के लिए: 5, 10, 15, आदि) का उपयोग करने का प्रयास कर सकते हैं। उदाहरण के लिए, प्रत्येक ग्रिड संख्या के लिए शुद्ध लाभ (पीएल-नेट) की गणना करके, हम मूल्यांकन कर सकते हैं कि कौन सी ग्रिड संख्या वर्तमान बाजार परिवेश में सर्वोत्तम रिटर्न ला सकती है। बैकटेस्ट चलाने के लिए कोड यहां दिया गया है:

grid_nums = [5*i+5 for i in range(5)]
out = []
for g in grid_nums:
    pl = grid_trading_strategy(
        data,
        grid_num=g,
        min_p=min(data['Close']),
        max_p=max(data['Close'])
    )
    out.append({
        'num': g,
        'pl-net': pl['pl-net'][-1],
        'min_pl': min(pl['pl-net']),
        'max_pl': max(pl['pl-net'])
    })

return out

4. प्रायोगिक परिणाम विश्लेषण

विभिन्न ग्रिड संख्या विन्यासों के साथ बैकटेस्टिंग के बाद, हमें निम्नलिखित परिणाम प्राप्त हुए:

विश्लेषण:

  • जैसे-जैसे ग्रिडों की संख्या बढ़ती है, शुद्ध लाभ में पहले वृद्धि और फिर कमी की प्रवृत्ति दिखाई देती है। जब ग्रिडों की संख्या 15 हो जाती है, तो शुद्ध लाभ अधिकतम मूल्य पर पहुंच जाता है। जैसे-जैसे ग्रिडों की संख्या बढ़ती गई, शुद्ध लाभ कम होता गया।
  • न्यूनतम और अधिकतम रिटर्न का उतार-चढ़ाव शुद्ध रिटर्न की प्रवृत्ति के समान है, जो दर्शाता है कि ग्रिड संख्या के चयन का रिटर्न पर महत्वपूर्ण प्रभाव पड़ता है।

संक्षेप

ग्रिड ट्रेडिंग रणनीति में ग्रिड की संख्या को उचित रूप से निर्धारित करना एक महत्वपूर्ण कार्य है। ग्रिडों की संख्या को अनुकूलित करके, ग्रिड ट्रेडिंग रणनीतियों के लाभ प्रदर्शन को प्रभावी ढंग से सुधारा जा सकता है तथा जोखिमों को बेहतर ढंग से नियंत्रित किया जा सकता है। यह आलेख ग्रिड संख्या सेटिंग्स का विश्लेषण करता है और विशिष्ट गणना विधियों और नमूना कोड प्रदान करता है, जिससे सभी को ग्रिड ट्रेडिंग रणनीतियों को अनुकूलित करने और रणनीतियों की स्थिरता और लाभप्रदता में सुधार करने में मदद मिलेगी।

नोट: इस लेख में ग्रिड बैकटेस्टिंग कोड झिहु दा शेन से अनुकूलित किया गया है हेल्सियन, कृपया स्रोत कोड स्पष्टीकरण के लिए लेख देखेंएल्गोरिदमिक ट्रेडिंग प्रैक्टिस डायरी (XVIII) - ग्रिड ट्रेडिंग में विवरण: ग्रिड नंबर और दीर्घकालिक रिटर्न के बीच संबंध