टिक क्या है? उदाहरण के लिए, लेनदेन डेटा को एक नदी के रूप में कल्पना की जा सकती है, और टिक नदी के एक खंड का डेटा है। घरेलू वायदा की सबसे अच्छी दानेदारता प्रति सेकंड दो बार है। दूसरे शब्दों में, घरेलू वायदा 500 मिलीसेकंड में एक टिक तक भेजते हैं।
अधिकांश घरेलू (इस लेख में चीन का मतलब है) सॉफ्टवेयर टिक कैसे प्राप्त करते हैं?
फिर अक्सर 500 मिलीसेकंड में एक से अधिक लेनदेन होता है, और इसमें विशिष्ट स्थिति पूरी तरह से एक ब्लैक बॉक्स है। विशेष रूप से कमोडिटी वायदा की उच्च आवृत्ति व्यापार रणनीति में, टिक बाजार की प्राप्ति गति रणनीति की लाभप्रदता पर एक निर्णायक प्रभाव डालती है।
बाजार पर अधिकांश ट्रेडिंग फ्रेमवर्क कॉलबैक मोड का उपयोग करते हैं, जिसका अर्थ है कि आदर्श स्थिति में 500 मिलीसेकंड में अधिकतम एक टिक होता है। ऑनबार/ऑनटिक की वास्तविक स्थिति के तहत, टिक को याद नहीं करना अच्छा है। क्यों? क्योंकि आपको ऑनबार/ऑनटिक फ़ंक्शन में पूरे कोड तर्क से निपटना पड़ता है, जो बहुत समय लेता है। चाहे आप इसे चाहते हों या नहीं, आपकी रणनीति तर्क को बाधित किया जाना चाहिए, आपको इस तरह से राज्य निष्क्रिय का उपयोग करना चाहिएः
अधिक उन्नत तंत्र
एफएमजेड मात्रात्मक ट्रेडिंग प्लेटफॉर्म इस बैकवर्ड कॉलबैक तंत्र को अपनाता नहीं है, लेकिन मुख्य कार्य तंत्र को अपनाता है जो रणनीति तर्क को बाधित नहीं करता है, जिससे उपयोगकर्ताओं को रणनीति प्रवाह को अधिक स्वाभाविक रूप से नियंत्रित करने की अनुमति मिलती है। एक रणनीति अंतर्निहित स्तर के रूप में सी ++ और गोलांग का उपयोग करके, रणनीति के ऊपरी स्तर में तर्क समस्याओं को संभालने के लिए जावास्क्रिप्ट / पायथन का उपयोग किया जाता है। घटना ट्रिगर तंत्र के साथ संयुक्त, रणनीति का उपयोग पहली बार में सबसे तेज गति से बाजार को संसाधित करने के लिए भी किया जा सकता है।
यह मत कहो कि स्क्रिप्टिंग भाषा धीमी है, जब तक कि आप इसे तंत्रिका नेटवर्क प्रशिक्षण के लिए उपयोग नहीं करते हैं, भले ही यह था, यह Jit गर्म संकलन जोड़ने के बाद किसी भी अवसर पर इस्तेमाल किया जा सकता है। प्रवेश स्तर की रणनीति यहां नहीं लिखी गई है, और वायदा उच्च आवृत्ति टिक के संश्लेषण के बारे में बात करते हैं। उदाहरण के लिए, यदि हम एक वायदा कंपनी से कनेक्ट होते हैं, तो हम केवल इस वायदा कंपनी के बाजार को प्राप्त कर सकते हैं। हमारे प्राप्त करने की गति और गुणवत्ता हमारे अपने नेटवर्क से संबंधित है, और वायदा कंपनी के फ्रंट-एंड मशीन के भार से भी संबंधित है।
तो, हम अधिक सटीक वायदा टिक डेटा तेजी से कैसे प्राप्त कर सकते हैं? एफएमजेड क्वांट के रणनीति मॉडल के तहत, आप आसानी से विभिन्न वायदा कंपनियों के खातों का संचालन कर सकते हैं, और सबसे तेज गति से आदेशों को संसाधित करने के लिए उनकी कीमतों को जोड़ सकते हैं। सामान्य परिस्थितियों में, हम वायदा कंपनी से प्रति सेकंड दो टिक प्राप्त कर सकते हैं, लेकिन बाजार को जोड़ने की तकनीक के माध्यम से, उदाहरण के रूप में MA801 लेते हुए, हम प्रति सेकंड छह बार तक और कोई पुनरावृत्ति नहीं के साथ टिक प्राप्त कर सकते हैं।
कोड डेमो
यह कोड केवल वास्तविक बाजार में इस्तेमाल किया जा सकता है और बैकटेस्ट नहीं किया जा सकता है। यदि आप इसे FMZ क्वांट प्लेटफॉर्म पर उपयोग नहीं करते हैं, तो आप केवल सिद्धांत का संदर्भ ले सकते हैं। एक्सचेंज को जोड़ते समय, बाजार के समवर्ती संलयन प्रसंस्करण को करने के लिए कई वायदा कंपनियों को जोड़ा जा सकता है। यहां दो एक्सचेंजों को जोड़ने के लिए कहा गया हैः
कोड इस प्रकार है:
डेमो प्रभाव
जैसा कि ऊपर दिखाया गया है, 21:24:44 पर, पहली वायदा कंपनी का डेटा दूसरे की तुलना में पहले है। दो वायदा कंपनियों को जोड़ने से प्रभाव दिख सकता है, यदि आप एक साथ विलय करने के लिए 5 से अधिक वायदा कंपनियों को जोड़ते हैं, तो आपके पास मूल रूप से टिक को याद करने की कोई संभावना नहीं है; यदि आप एक उच्च आवृत्ति व्यापार रणनीति विकसित कर रहे हैं, तो आपने एक बहुत ही महत्वपूर्ण और निर्णायक कदम हल किया है, अर्थात् टिक प्राप्त करने की गति और स्थिरता।
पूरा कोड प्राप्त करेंः
function main() {
log("Prepare to connect to the exchange and subscribe to the market")
//step 1:All futures front-end machines are starting to subscribe to the variety
_.each(exchanges, function(e){
/*Waiting to connect to the exchange. The strategy is running without
interruption, and it is not the logic of the event callback. */
while(!e.IO("status"))Sleep(1000);
/*Use _C function to troubleshoot network errors. If subscribe to the market just
after connecting to exchanges, there may be a CTP unprepared error. */
_C(e.SetContractType, "MA801")
/*Switch the market receiving mode to the immediate return mode instead of the
event trigger mode. Refer to the API documentation on FMZ website. */
e.IO("mode", 0)
})
Log("start fusing the data")
//step 2: the important part begins
var preVolume = 0
while (true) {
var ts = new Date().getTime()
//Return if any exchanges occur tick event
var ret = exchange.IO("wait_any")
//Reset Volume at the right time
if (ret.Nano/1000000 - ts > 60000) {
preVolume = 0
}
//Target the exchange where the event occurred
var e = exchanges[ret.Index]
//Get ticker, because of switching mode as return before, so here is the updated market, and GetTicker won't fail
//Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
var ticker = e.GetTicker()
if (ticker.Volume >= preVolume){
Log(ret,ticker.Last, ticker.Volume)
preVolume = ticker.Volume
}
}
}