उच्च आवृत्ति ट्रेडिंग रणनीतियों के बारे में सोचना)))

लेखक:घास, बनाया गयाः 2023-08-03 16:14:16, अद्यतन किया गयाः 2023-12-08 16:37:21

img

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

मैंने पहले दो लेख लिखे हैं डिजिटल मुद्राओं के उच्च आवृत्ति लेनदेन के बारे मेंडिजिटल मुद्रा के लिए उच्च आवृत्ति रणनीति का विस्तार से परिचय, 5 तार 80 गुना, उच्च आवृत्ति रणनीति की शक्ति... लेकिन केवल अनुभव साझा करने के लिए, व्यापक रूप से बात करने के लिए... इस बार मैं एक श्रृंखला लिखने की योजना बना रहा हूं, शुरुआत से उच्च आवृत्ति व्यापार के विचार का परिचय देने के लिए, मैं जितना संभव हो उतना संक्षिप्त होने की उम्मीद करता हूं, लेकिन अपने सीमित स्तर के कारण, उच्च आवृत्ति व्यापार के बारे में गहराई से समझ नहीं है, यह लेख केवल कुंजी फेंकने के लिए है, आशा है कि भगवान सही हैं.

उच्च आवृत्ति लाभ स्रोत

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

हल करने के लिए समस्या

1.策略同时挂买单和卖单,第一个问题就是在哪里挂单。挂的离盘口越近,成交的概率越高,但在剧烈波动的行情中,瞬间成交的价格可能离盘口较远,挂的那太近没有能吃到足够的利润。挂的太远的单子成交概率又低。这是一个需要优化的问题。

2.控制仓位。为了控制风险,策略就不能长时间累计过多的仓位。可以通过控制挂单距离、挂单量、总仓位限制等办法解决。

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

आवश्यक डेटा

Binance ने एक-एक लेन-देन और सबसे अच्छे लंबित ऑर्डर डेटा प्रदान किए हैं।डाउनलोड करें, गहराई के डेटा को एपीआई के साथ डाउनलोड करने की आवश्यकता होती है, जिसे श्वेतसूची में रखा जाता है, या फिर इसे स्वयं एकत्र किया जा सकता है। पुनर्मूल्यांकन उद्देश्यों के लिए, पुनर्मूल्यांकन के लिए उपयोग किए जाने वाले लेनदेन डेटा को एकत्र किया जा सकता है। यह लेख HOOKUSDT-aggTrades-2023-01-27 के डेटा का उदाहरण देता है।

from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

एक-एक लेनदेन में निम्नलिखित शामिल हैंः

  1. agg_trade_id: लेनदेन के लिए वर्गीकृत आईडी,
  2. price: लेनदेन की कीमत
  3. quantity: लेनदेन की मात्रा
  4. first_trade_id: एग्रीगेटेड ट्रेड में एक साथ कई लेनदेन हो सकते हैं, केवल एक आंकड़ा सांख्यिकीय है, जो कि पहले लेनदेन का आईडी है
  5. last_trade_id: अंतिम लेनदेन का आईडी
  6. transact_time: लेनदेन का समय
  7. is_buyer_maker: लेन-देन की दिशा, True का प्रतिनिधित्व करता है खरीदार-निर्माता लेन-देन, विक्रेता-निर्माता

आप देख सकते हैं कि उस दिन 660,000 लेनदेन डेटा थे, और लेनदेन सक्रिय थे.

trades = pd.read_csv('COMPUSDT-aggTrades-2023-07-02.csv')
trades

664475 पंक्तियाँ × 7 स्तंभ

agg_trade_id मूल्य मात्रा first_trade_id last_trade_id लेन-देन_समय is_buyer_maker
120719552 52.42 22.087 207862988 207862990 1688256004603 गलत
120719553 52.41 29.314 207862991 207863002 1688256004623 सच
120719554 52.42 0.945 207863003 207863003 1688256004678 गलत
120719555 52.41 13.534 207863004 207863006 1688256004680 सच
121384024 68.29 10.065 210364899 210364905 1688342399863 गलत
121384025 68.30 7.078 210364906 210364908 1688342399948 गलत
121384026 68.29 7.622 210364909 210364911 1688342399979 सच

एकमुश्त लेनदेन का मॉडल

पहले डेटा को संसाधित किया जाता है, मूल ट्रेडों को भुगतान के लिए सक्रिय लेनदेन समूह और बिक्री के लिए सक्रिय लेनदेन समूह में विभाजित किया जाता है। इसके अलावा, मूल संचयी लेनदेन का डेटा एक ही समय में एक ही कीमत पर एक ही दिशा में एक डेटा है, एक सक्रिय लेनदेन की मात्रा 100 हो सकती है, यदि कई लेनदेन में विभाजित किया जाता है और कीमतें अलग-अलग होती हैं, जैसे कि 60 और 40 के लिए दो टुकड़े, तो दो डेटा उत्पन्न होते हैं, जो भुगतान के लेनदेन के अनुमान को प्रभावित करते हैं। इसलिए, लेनदेन के आधार पर एक बार फिर से संचयी करने की आवश्यकता होती है। संचयीकरण के बाद डेटा की मात्रा 140,000 कम हो जाती है।

trades['date'] = pd.to_datetime(trades['transact_time'], unit='ms')
trades.index = trades['date']
buy_trades = trades[trades['is_buyer_maker']==False].copy()
sell_trades = trades[trades['is_buyer_maker']==True].copy()
buy_trades = buy_trades.groupby('transact_time').agg({
    'agg_trade_id': 'last',
    'price': 'last',
    'quantity': 'sum',
    'first_trade_id': 'first',
    'last_trade_id': 'last',
    'is_buyer_maker': 'last',
    'date': 'last',
    'transact_time':'last'
})
sell_trades = sell_trades.groupby('transact_time').agg({
    'agg_trade_id': 'last',
    'price': 'last',
    'quantity': 'sum',
    'first_trade_id': 'first',
    'last_trade_id': 'last',
    'is_buyer_maker': 'last',
    'date': 'last',
    'transact_time':'last'
})
buy_trades['interval']=buy_trades['transact_time'] - buy_trades['transact_time'].shift()
sell_trades['interval']=sell_trades['transact_time'] - sell_trades['transact_time'].shift()
print(trades.shape[0] - (buy_trades.shape[0]+sell_trades.shape[0]))
146181

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

buy_trades['quantity'].plot.hist(bins=200,figsize=(10, 5));

png

为了观察方便,截掉尾部观察.可以看到成交量越大,出现频率越低,且减少的趋势更快。

buy_trades['quantity'][buy_trades['quantity']<200].plot.hist(bins=200,figsize=(10, 5));

png

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

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

png

जहाँ N मानकीकृत पैरामीटर है. यहाँ औसत लेनदेन M का चयन किया गया है, अल्फा 2.06 का चयन किया गया है. विशिष्ट अल्फा का अनुमान तब किया जा सकता है जब D = N P मानों के साथ उलटा हो जाता है. विशेष रूप सेः अल्फा = log ((P ((d>M)) /log ((2)) । अलग-अलग बिंदुओं का चयन करके अल्फा लेने का मूल्य थोड़ा भिन्न होगा।

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
alpha = np.log(np.mean(buy_trades['quantity'] > mean_quantity))/np.log(2)
mean_quantity = buy_trades['quantity'].mean()
probabilities_s = np.array([(1+depth/mean_quantity)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)

img

plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

png

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

png

संक्षेप में, यहाँ r = q/M के साथ मानकीकृत लेनदेन का प्रतिनिधित्व किया गया है. पैरामीटर को ऊपर के समान तरीके से अनुमानित किया जा सकता है. नीचे दिए गए चित्र में आप देख सकते हैं कि संशोधन के बाद अधिकतम विचलन 2% से अधिक नहीं है। यह सैद्धांतिक रूप से आगे भी संशोधित किया जा सकता है, लेकिन यह सटीकता पर्याप्त है।

depths = range(0, 250, 2)
probabilities = np.array([np.mean(buy_trades['quantity'] > depth) for depth in depths])
mean = buy_trades['quantity'].mean()
alpha = np.log(np.mean(buy_trades['quantity'] > mean))/np.log(2.05)
probabilities_s = np.array([(((1+20**(-depth/mean))*depth+mean)/mean)**alpha for depth in depths])

plt.figure(figsize=(10, 5))
plt.plot(depths, probabilities)
plt.plot(depths, probabilities_s)
plt.xlabel('Depth')
plt.ylabel('Probability of execution')
plt.title('Execution probability at different depths')
plt.grid(True)
plt.figure(figsize=(10, 5))
plt.grid(True)
plt.title('Diff')
plt.plot(depths, probabilities_s-probabilities);

png

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

यह लेख लगभग समाप्त हो गया है, और अभी भी बहुत सारे प्रश्न हैं जिनका उत्तर देने की आवश्यकता है, और निम्नलिखित लेखों की श्रृंखला में उत्तर देने का प्रयास किया जाएगा।


अधिक

ओक मात्रा 🐂🍺

fmzeroयह बहुत बड़ा है!

घासcsv बहुत बड़ा है, आप इसे स्वयं डाउनलोड कर सकते हैं