시장 코트 데이터의 지원은 거래 전략을 연구, 설계 및 백테스트 할 때 필수적입니다. 모든 시장에서 모든 데이터를 수집하는 것은 현실적이지 않습니다. 결국 데이터 양이 너무 크습니다. 디지털 통화 시장에서 FMZ 플랫폼은 거래소 및 거래 쌍에 대한 제한된 백테스트 데이터를 지원합니다. FMZ 플랫폼에서 일시적으로 지원되지 않은 일부 거래소 및 거래 쌍을 백테스트하고 싶다면 백테스트를 위해 사용자 지정 데이터 소스를 사용할 수 있지만이 전제는 데이터가 필요하다는 것을 요구합니다. 따라서 실시간으로 지속되고 가장 잘 얻을 수있는 시장 코트 수집 프로그램이 절실히 필요합니다.
이렇게 하면 다음과 같은 여러 가지 요구를 해결할 수 있습니다.
그리고 더 많은...
우리는 이것을 달성하기 위해 파이썬을 사용할 계획입니다. 왜? 그것은 매우 편리하기 때문에
파이썬의 파이몬고 라이브러리
데이터베이스를 사용해야 하기 때문에 영구적인 저장. 데이터베이스 선택은MongoDB
그리고 파이썬 언어는 컬렉션 프로그램을 작성하는 데 사용되므로 이 데이터베이스의 드라이버 라이브러리가 필요합니다.
그냥 설치pymongo
파이썬에 대한 것입니다.
호스팅 장치에 MongoDB를 설치 예를 들어: MacOS는 MongoDB를 설치합니다. 또한 윈도우 시스템에서 MongoDB를 설치하는 것과 동일합니다. 온라인에는 많은 튜토리얼이 있습니다. MacOS 시스템의 설치를 예로 들어보죠:
다운로드 다운로드 링크:https://www.mongodb.com/download-center?jmp=nav#community
/usr/local
환경 변수를 구성합니다
터미널 입력:open -e .bash_profile
, 파일을 열고 나면 이렇게 써:exportPATH=${PATH}:/usr/local/MongoDB/bin
저장 후, 터미널에서, 사용source .bash_profile
변경사항이 효력을 발휘하도록 합니다.
데이터베이스 파일 디렉토리와 로그 디렉토리를 수동으로 구성합니다
디렉토리에서 해당 폴더를 생성합니다/usr/local/data/db
- 그래요
디렉토리에서 해당 폴더를 생성합니다/usr/local/data/logs
.
구성 파일을 편집합니다mongo.conf
:
#bind_ip_all = true # Any computer can connect
bind_ip = 127.0.0.1 # Local computer can access
port = 27017 # The instance runs on port 27017 (default)
dbpath = /usr/local/data/db # data folder storage address (db need to be created in advance)
logpath = /usr/local/data/logs/mongodb.log # log file address
logappend = false # whether to add or rewrite the log file at startup
fork = false # Whether to run in the background
auth = false # Enable user verification
명령어:
./mongod -f mongo.conf
use admin;
db.shutdownServer();
수집자는 FMZ 플랫폼에서 파이썬 로봇 전략으로 작동합니다. 이 기사의 아이디어를 보여주기 위해 간단한 예를 구현했습니다.
콜렉터 프로그램 코드:
import pymongo
import json
def main():
Log("Test data collection")
# Connect to the database service
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# Create a database
huobi_DB = myDBClient["huobi"]
# Print the current database table
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# Check if the table is deleted
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, "delete:", dropName)
ret = tab.drop()
collist = huobi_DB.list_collection_names()
if dropName in collist:
Log(dropName, "failed to delete")
else :
Log(dropName, "successfully deleted")
# Create the records table
huobi_DB_Records = huobi_DB["records"]
# Request data
preBarTime = 0
index = 1
while True:
r = _C(exchange.GetRecords)
if len(r) < 2:
Sleep(1000)
continue
if preBarTime == 0:
# Write all BAR data for the first time
for i in range(len(r) - 1):
# Write one by one
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)
전체 전략 주소:https://www.fmz.com/strategy/199120
데이터를 이용한 전략 로봇을 만들죠.
참고: 당신은
여기 주소가 있습니다.https://www.fmz.com/strategy/39066
import pymongo
import json
def main():
Log("Test using database data")
# Connect to the database service
myDBClient = pymongo.MongoClient("mongodb://localhost:27017") # mongodb://127.0.0.1:27017
# Create a database
huobi_DB = myDBClient["huobi"]
# Print the current database table
collist = huobi_DB.list_collection_names()
Log("collist:", collist)
# Query data printing
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)
# Use the line drawing library to draw the obtained K-line data
ext.PlotRecords(arrRecords, "K")
LogStatus(_D(), "records length:", len(arrRecords))
Sleep(10000)
데이터를 사용하는 전략 로봇 코드는 어떤 교환 인터페이스에도 액세스하지 않는다는 것을 볼 수 있습니다. 데이터는 데이터베이스에 액세스하여 얻을 수 있습니다. 시장 수집기 프로그램은 현재 BAR 데이터를 기록하지 않습니다. 완료 상태에서 K-라인 BAR를 수집합니다. 현재 BAR 실시간 데이터가 필요한 경우 약간 수정 할 수 있습니다.
현재 예제 코드는 단지 시범용입니다. 데이터베이스의 테이블에 있는 데이터 레코드에 액세스할 때, 모든 것이 얻을 수 있습니다. 이러한 방법으로, 데이터를 수집하는 시간이 증가함에 따라 더 많은 데이터가 수집됩니다. 모든 질의는 어느 정도 성능에 영향을 미치며 설계 될 수 있습니다. 현재 데이터보다 최신의 데이터만 질의되고 현재 데이터에 추가됩니다.
도커 프로그램을 실행
도커가 있는 장치에서 MongoDB 데이터베이스 서비스를 실행
수집자는 FMZ 플랫폼 WexApp 시뮬레이션 거래소의 BTC_USDT 거래 쌍을 수집하기 위해 실행됩니다. WexApp 주소: https://wex.app/trade?currency=BTC_USDT
데이터베이스 데이터를 이용한 로봇 A:
데이터베이스 데이터를 이용한 로봇 B:
WexApp 페이지:
그림에서 볼 수 있듯이, 서로 다른 ID를 가진 로봇들은 하나의 데이터 소스를 사용하여 K-라인 데이터를 공유합니다.
FMZ 플랫폼의 강력한 기능에 의존하여, 우리는 쉽게 모든 사이클에서 K-라인 데이터를 수집할 수 있습니다. 예를 들어, 3분 K 라인을 수집하고 싶다면 거래소가 3분 K 라인을 가지고 있지 않다면 어떻게 될까요?
우리는 수집 로봇의 구성을 수정합니다. K 라인 기간은 3분으로 설정됩니다. 그리고 FMZ 플랫폼은 자동으로 3분 K 라인을 수집 프로그램으로 합성합니다.
우리는 지우기 위해 매개 변수를 사용합니다.the name of the table
, 설정: [
시작collector program
, 그리고 다시 시작strategy robot using the data
.
K-라인 차트를 그려보실 수 있습니다. BAR 사이의 간격은 3분이고, 각 BAR는 3분 간격의 K-라인 바입니다.
다음 주에서는 사용자 지정 데이터 소스의 요구 사항을 구현하려고 노력할 것입니다.
읽어주셔서 감사합니다!