
प्रोग्रामेटिक ट्रेडिंग और क्वांटिटेटिव ट्रेडिंग में, रणनीतियों पर शोध करना, रणनीतियों को डिजाइन करना और बैकटेस्टिंग विश्लेषण बाजार डेटा के समर्थन से अविभाज्य हैं। बाजार का सारा डेटा एकत्र करना यथार्थवादी नहीं है, आखिरकार, डेटा की मात्रा बहुत बड़ी है। डिजिटल मुद्रा बाजार के लिए, इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म सीमित एक्सचेंजों और ट्रेडिंग जोड़ों के लिए बैकटेस्टिंग डेटा का समर्थन करता है। यदि आप कुछ एक्सचेंजों और ट्रेडिंग जोड़ों का बैकटेस्ट करना चाहते हैं जो वर्तमान में डेटा का समर्थन नहीं करते हैं। आप बैकटेस्टिंग के लिए कस्टम डेटा स्रोतों का उपयोग कर सकते हैं, लेकिन इसके लिए आपके पास अपना स्वयं का डेटा होना आवश्यक है। इसलिए, एक ऐसे बाजार सूचना संग्रहण कार्यक्रम की तत्काल आवश्यकता है जिसे लगातार संग्रहीत किया जा सके और अधिमानतः वास्तविक समय में प्राप्त किया जा सके।
इससे कई आवश्यकताएं हल हो जाती हैं, जैसे:
इसे क्रियान्वित करने के लिए पायथन का उपयोग करने की योजना है, क्यों? क्योंकि यह सुविधाजनक है :) यदि आपकी कोई आवश्यकता है, तो कार्रवाई करें!
क्योंकि स्थायी भंडारण के लिए डेटाबेस की आवश्यकता होती है। डेटा चयन उपयोगMongoDBसंग्रह कार्यक्रम लिखने के लिए पायथन भाषा का उपयोग करें, इसलिए इस डेटाबेस की ड्राइवर लाइब्रेरी की आवश्यकता है।
पायथन पर स्थापनाpymongoइतना ही।
उदाहरण के लिए: MAC पर MongoDB इंस्टॉल करें। बेशक, WIN पर MongoDB इंस्टॉल करना भी ऐसा ही है। ऑनलाइन कई ट्यूटोरियल हैं। Apple MAC पर इंस्टॉलेशन को उदाहरण के तौर पर लें:
डाउनलोड करना डाउनलोड लिंक: https://www.mongodb.com/download-center?jmp=nav#community
खोलना
डाउनलोड करने के बाद, इसे इस निर्देशिका में अनज़िप करें:/usr/local。
पर्यावरण चर कॉन्फ़िगर करना
टर्मिनल इनपुट:open -e .bash_profileफ़ाइल खोलने के बाद लिखें:export PATH=${PATH}:/usr/local/MongoDB/bin
सेव करने के बाद, टर्मिनल का उपयोग करेंsource .bash_profileपरिवर्तनों को प्रभावी बनाएं।
डेटाबेस फ़ाइल निर्देशिका और लॉग निर्देशिका को मैन्युअल रूप से कॉन्फ़िगर करें
एक निर्देशिका बनाएँ/usr/local/data/db. में संबंधित फ़ोल्डर.
एक निर्देशिका बनाएँ/usr/local/data/logs. में संबंधित फ़ोल्डर.
कॉन्फ़िगरेशन फ़ाइल का संपादनmongo.conf:
#bind_ip_all = true # 任何机器可以连接
bind_ip = 127.0.0.1 # 本机可以访问
port = 27017 # 实例运行在27017端口(默认)
dbpath = /usr/local/data/db # 数据文件夹存放地址(db要预先创建)
logpath = /usr/local/data/logs/mongodb.log # 日志文件地址
logappend = false # 启动时 添加还是重写日志文件
fork = false # 是否后台运行
auth = false # 开启校验用户
आदेश देना:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
कलेक्टर इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म पर पायथन रोबोट रणनीति के रूप में चलता है। पायथन में मेरी सीमित दक्षता के कारण, मैंने इस लेख के विचारों को प्रदर्शित करने के लिए केवल एक सरल उदाहरण लागू किया है।
कलेक्टर रणनीति कोड:
import pymongo
import json
def main():
Log("测试数据收集")
# 连接数据库服务
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# 创建数据库
huobi_DB = myDBClient["huobi"]
# 打印目前数据库表
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# 检测是否删除表
arrDropNames = json.loads(dropNames)
if isinstance(arrDropNames, list):
for i in range(len(arrDropNames)):
dropName = arrDropNames[i]
if isinstance(dropName, str):
if not dropName in collist:
continue
tab = huobi_DB[dropName]
Log("dropName:", dropName, "删除:", dropName)
ret = tab.drop()
collist = huobi_DB.list_collection_names()
if dropName in collist:
Log(dropName, "删除失败")
else :
Log(dropName, "删除成功")
# 创建records表
huobi_DB_Records = huobi_DB["records"]
# 请求数据
preBarTime = 0
index = 1
while True:
r = _C(exchange.GetRecords)
if len(r) < 2:
Sleep(1000)
continue
if preBarTime == 0:
# 首次写入所有BAR数据
for i in range(len(r) - 1):
# 逐根写入
bar = r[i]
huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
index += 1
preBarTime = r[-1]["Time"]
elif preBarTime != r[-1]["Time"]:
bar = r[-2]
huobi_DB_Records.insert_one({"index": index, "High": bar["High"], "Low": bar["Low"], "Open": bar["Open"], "Close": bar["Close"], "Time": bar["Time"], "Volume": bar["Volume"]})
index += 1
preBarTime = r[-1]["Time"]
LogStatus(_D(), "preBarTime:", preBarTime, "_D(preBarTime):", _D(preBarTime/1000), "index:", index)
Sleep(10000)
पूर्ण पॉलिसी पता:जोड़ना
डेटा का उपयोग करने वाले रणनीतिक बॉट बनाएं।
नोट: आपको जांचना होगारेखाचित्र लाइब्रेरीयदि आपके पास यह नहीं है, तो आप इसे अपनी रणनीति लाइब्रेरी में कॉपी कर सकते हैं।

import pymongo
import json
def main():
Log("测试使用数据库数据")
# 连接数据库服务
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# 创建数据库
huobi_DB = myDBClient["huobi"]
# 打印目前数据库表
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# 查询数据打印
huobi_DB_Records = huobi_DB["records"]
while True:
arrRecords = []
for x in huobi_DB_Records.find():
bar = {
"High": x["High"],
"Low": x["Low"],
"Close": x["Close"],
"Open": x["Open"],
"Time": x["Time"],
"Volume": x["Volume"]
}
arrRecords.append(bar)
# 使用画线类库,把取到的K线数据画出来
ext.PlotRecords(arrRecords, "K")
LogStatus(_D(), "records length:", len(arrRecords))
Sleep(10000)
यह देखा जा सकता है कि डेटा का उपयोग करने वाला रणनीति रोबोट कोड किसी भी एक्सचेंज इंटरफ़ेस तक नहीं पहुँचता है। यह डेटाबेस तक पहुँच कर डेटा प्राप्त करता है। मार्केट कलेक्टर प्रोग्राम वर्तमान BAR के डेटा को रिकॉर्ड नहीं करता है। यह K-लाइन BAR को एकत्रित करता है पूर्ण स्थिति। यदि वर्तमान BAR को वास्तविक समय में अपडेट करने की आवश्यकता है, तो डेटा को थोड़ा संशोधित किया जा सकता है। वर्तमान उदाहरण कोड केवल प्रदर्शन के लिए है। डेटाबेस में तालिका में डेटा रिकॉर्ड तक पहुँचने पर, सभी डेटा रिकॉर्ड प्राप्त होते हैं। जैसे-जैसे डेटा संग्रह समय बढ़ता है, अधिक से अधिक डेटा एकत्र किया जाता है। सभी डेटा को क्वेरी करने से प्रदर्शन प्रभावित होगा एक निश्चित सीमा तक। आप केवल क्वेरी डेटा डिज़ाइन कर सकते हैं जो वर्तमान डेटा से नया है और इसे वर्तमान डेटा में जोड़ सकते हैं।
होस्ट प्रोग्राम चलाएँ

होस्ट के डिवाइस पर, चलाएँMongoDBडेटाबेस सेवाएँ
./mongod -f mongo.conf

कलेक्टर आविष्कारक के मात्रात्मक व्यापार मंच की नकली डिस्क इकट्ठा करने के लिए दौड़ता हैwexAppकाBTC_USDTट्रेडिंग जोड़े:
पता:wexApp

रोबोट A डेटाबेस डेटा का उपयोग कर रहा है:

रोबोट बी डेटाबेस डेटा का उपयोग कर रहा है:

wexAppपेज:

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

हम पैरामीटर का उपयोग करते हैं删除表的名称,स्थापित करना:["records"]पहले से एकत्रित 1-मिनट K-लाइन डेटा तालिका को हटाएँ। 3 मिनट का K-लाइन डेटा एकत्र करने के लिए तैयार रहें।
चालू होना收集器程序, पुनः आरंभ करें使用数据的策略机器人。


खींचे गए K-लाइन चार्ट से आप देख सकते हैं कि BAR के बीच का अंतराल 3 मिनट है, और प्रत्येक BAR 3 मिनट की अवधि वाला एक K-लाइन स्तंभ है।
अगले अंक में, हम कस्टम डेटा स्रोतों की आवश्यकताओं को क्रियान्वित करने का प्रयास करेंगे। पढ़ने के लिए धन्यवाद