avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

만든 날짜: 2020-04-16 12:44:03, 업데이트 날짜: 2024-12-12 20:55:38
comments   7
hits   3870

시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

프로그래밍 방식 거래와 양적 거래에서 전략 조사, 전략 설계, 백테스팅 분석은 시장 데이터의 뒷받침과 분리될 수 없습니다. 결국 시장의 모든 데이터를 수집하는 것은 현실적으로 불가능합니다. 데이터의 양이 너무 많기 때문입니다. 디지털 통화 시장의 경우, Inventor Quantitative Trading Platform은 제한된 거래소 및 거래 쌍에 대한 백테스팅 데이터를 지원합니다. 현재 데이터를 지원하지 않는 일부 거래소와 거래 쌍을 백테스트하려는 경우 백테스팅에는 사용자 정의 데이터 소스를 사용할 수 있지만, 이를 위해서는 사용자 정의 데이터가 필요합니다. 따라서 지속적으로 저장할 수 있고, 실시간으로 수집할 수 있는 시장 정보 수집 프로그램이 시급히 필요합니다.

이를 통해 다음과 같은 여러 가지 요구 사항이 해결됩니다.

  • 데이터 소스를 여러 로봇에 제공하면 각 로봇이 거래소 인터페이스에 액세스하는 빈도를 줄일 수 있습니다.
  • 로봇이 시동되면 충분한 수의 K-라인 BAR로 K-라인 데이터를 얻을 수 있으므로 로봇이 시동될 때 K-라인 BAR의 수가 부족한 것에 대해 더 이상 걱정할 필요가 없습니다.
  • 소규모 통화의 시장 데이터를 수집하여 Inventor Quantitative Trading Platform의 백테스팅 시스템을 위한 사용자 정의 데이터 소스를 제공하고, 이를 통해 백테스팅 시스템을 사용하여 전략을 백테스팅할 수 있습니다.
  • 등..

왜 Python을 사용하여 구현하려고 계획하시나요? 편리하거든요 :) 도움이 필요하면, 행동하세요!

준비하다

  • 파이썬의 pymongo 라이브러리

지속적인 저장을 위해서는 데이터베이스가 필요하기 때문입니다. 데이터 선택 사용MongoDB, Python 언어를 사용하여 수집 프로그램을 작성하므로 이 데이터베이스의 드라이버 라이브러리가 필요합니다. Python에 설치pymongo다 그거죠.

  • 호스트 머신에 MongoDB 설치

예를 들어: 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                               # 开启校验用户
  • MongoDB 서비스 실행

주문하다:

  ./mongod -f mongo.conf
  • 서비스 중지
  use admin;
  db.shutdownServer();

수집가 프로그램 구현

수집기는 Inventor Quantitative Trading Platform에서 Python 로봇 전략으로 실행됩니다. 제 Python 실력이 부족해서 이 글의 아이디어를 보여주기 위해 간단한 예제만 구현했습니다.

수집가 전략 코드:

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는 데이터베이스 데이터를 사용합니다: 시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

로봇 B는 데이터베이스 데이터를 사용합니다: 시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

wexApp페이지: 시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

그림에서 볼 수 있듯이, 서로 다른 ID를 가진 로봇은 동일한 데이터 소스에서 K-라인 데이터를 공유합니다.

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

Inventor의 양적 거래 플랫폼의 강력한 기능을 활용하여 모든 기간의 K-라인 데이터를 쉽게 수집할 수 있습니다. 예를 들어, 3분 K-라인을 수집하고 싶은데, 거래소에 3분 K-라인이 없는 경우 어떻게 해야 하나요? 괜찮습니다. 쉽게 달성할 수 있습니다.

수집기 로봇의 구성을 수정하고 K-라인 기간을 3분으로 설정합니다. Inventor Quantitative Trading Platform은 수집기 프로그램에 대한 3분 K-라인을 자동으로 합성합니다. 시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

우리는 매개변수를 사용합니다删除表的名称,설정:["records"]이전에 수집된 1분 K-라인 데이터 표를 삭제합니다. 3분 분량의 K-라인 데이터를 수집할 준비를 하세요.

시작하다收集器程序, 재시작使用数据的策略机器人

시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

시장 수집기를 구현하는 방법을 단계별로 알려드립니다.

그려진 K-라인 차트에서 BAR 간 간격이 3분이며, 각 BAR는 3분 주기의 K-라인 열임을 알 수 있습니다.

다음 호에서는 사용자 정의 데이터 소스의 요구 사항을 구현해 보겠습니다. 읽어주셔서 감사합니다