시장 코트 수집기를 구현하는 법을 가르쳐

저자:선함, 2020-05-30 10:03:39, 업데이트: 2023-11-02 19:52:02

img

시장 코트 데이터의 지원은 거래 전략을 연구, 설계 및 백테스트 할 때 필수적입니다. 모든 시장에서 모든 데이터를 수집하는 것은 현실적이지 않습니다. 결국 데이터 양이 너무 크습니다. 디지털 통화 시장에서 FMZ 플랫폼은 거래소 및 거래 쌍에 대한 제한된 백테스트 데이터를 지원합니다. FMZ 플랫폼에서 일시적으로 지원되지 않은 일부 거래소 및 거래 쌍을 백테스트하고 싶다면 백테스트를 위해 사용자 지정 데이터 소스를 사용할 수 있지만이 전제는 데이터가 필요하다는 것을 요구합니다. 따라서 실시간으로 지속되고 가장 잘 얻을 수있는 시장 코트 수집 프로그램이 절실히 필요합니다.

이렇게 하면 다음과 같은 여러 가지 요구를 해결할 수 있습니다.

  • 여러 로봇이 데이터 소스를 제공받을 수 있으며, 이는 각 로봇이 교환 인터페이스에 접근하는 빈도를 용이하게 할 수 있습니다.
  • 로봇이 시작될 때 충분한 수의 K-라인 BAR를 가지고 K-라인 데이터를 얻을 수 있습니다. 로봇이 시작될 때
  • 희귀 통화 시장 데이터를 수집하고 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
  • MongoDB 서비스를 실행합니다

명령어:

./mongod -f mongo.conf
  • MongoDB 서비스를 중지
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

사용 데이터

데이터를 이용한 전략 로봇을 만들죠. 참고: 당신은 python PlotLine Template을 확인해야 합니다. 만약 당신이 그것을 가지고 있지 않다면, 당신은 당신의 전략 라이브러리에 전략 광장에서 하나를 복사할 수 있습니다.

img

여기 주소가 있습니다.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 실시간 데이터가 필요한 경우 약간 수정 할 수 있습니다.

현재 예제 코드는 단지 시범용입니다. 데이터베이스의 테이블에 있는 데이터 레코드에 액세스할 때, 모든 것이 얻을 수 있습니다. 이러한 방법으로, 데이터를 수집하는 시간이 증가함에 따라 더 많은 데이터가 수집됩니다. 모든 질의는 어느 정도 성능에 영향을 미치며 설계 될 수 있습니다. 현재 데이터보다 최신의 데이터만 질의되고 현재 데이터에 추가됩니다.

도망가자

도커 프로그램을 실행

img

도커가 있는 장치에서 MongoDB 데이터베이스 서비스를 실행

img

수집자는 FMZ 플랫폼 WexApp 시뮬레이션 거래소의 BTC_USDT 거래 쌍을 수집하기 위해 실행됩니다. WexApp 주소: https://wex.app/trade?currency=BTC_USDT

img

데이터베이스 데이터를 이용한 로봇 A:

img

데이터베이스 데이터를 이용한 로봇 B:

img

WexApp 페이지:

img

그림에서 볼 수 있듯이, 서로 다른 ID를 가진 로봇들은 하나의 데이터 소스를 사용하여 K-라인 데이터를 공유합니다.

모든 기간의 K-라인 데이터를 수집

FMZ 플랫폼의 강력한 기능에 의존하여, 우리는 쉽게 모든 사이클에서 K-라인 데이터를 수집할 수 있습니다. 예를 들어, 3분 K 라인을 수집하고 싶다면 거래소가 3분 K 라인을 가지고 있지 않다면 어떻게 될까요?

우리는 수집 로봇의 구성을 수정합니다. K 라인 기간은 3분으로 설정됩니다. 그리고 FMZ 플랫폼은 자동으로 3분 K 라인을 수집 프로그램으로 합성합니다.

img

우리는 지우기 위해 매개 변수를 사용합니다.the name of the table, 설정: [records] 이전에 수집된 1분 K-라인 데이터 테이블을 삭제합니다. 3분 K-라인 데이터를 수집할 준비를 합니다.

시작collector program, 그리고 다시 시작strategy robot using the data.

img

img

K-라인 차트를 그려보실 수 있습니다. BAR 사이의 간격은 3분이고, 각 BAR는 3분 간격의 K-라인 바입니다.

다음 주에서는 사용자 지정 데이터 소스의 요구 사항을 구현하려고 노력할 것입니다.

읽어주셔서 감사합니다!


관련

더 많은