FMZ 백테스트 엔진 python 패키지 FMZ 재검토 엔진 python 라이브러리 python2와 python3를 지원합니다. 파이썬2 및 파이썬3를 지원합니다. 윈도우 시스템, 리눅스 시스템, 애플 맥 OS 시스템을 지원합니다.
설치 명령줄에서 다음 명령을 입력합니다:
pip install https://github.com/fmzquant/backtest_python/archive/master.zip
간단한 예
'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import *
task = VCtx(__doc__) # initialize backtest engine from __doc__
print exchange.GetAccount()
print exchange.GetTicker()
print task.Join() # print backtest result
The config string can be generated automatically by saving the backtest configuration in the strategy edit page. 이 컨피그 문자열은 전략 편집 페이지에서 백테스트 구성을 저장하여 자동으로 생성될 수 있습니다. 설정 문자열은 정책 편집 인터페이스에서 저장된 검색 설정으로 자동으로 생성됩니다.
API 문서: (예: 예제에서 GetAccount 같은 함수를 호출하는 문서)
'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import * # 引用 发明者量化 库
task = VCtx(__doc__) # initialize backtest engine from __doc__ # 调用 VCtx 函数 根据 __doc__初始化。
print exchange.GetAccount() # 测试 GetAccount 函数,并打印 回测系统测试交易所账户信息
print exchange.GetTicker() # 测试 GetTicker 函数,并打印 回测系统 行情信息
print task.Join() # print backtest result # 调用 初始化后的 task 对象 显示回测结果
__doc__
是两个下划线。__doc__用来访问模块,类声明或者函数的声明中第一个未被赋值的字符串,
可以是被""" ""","" "",' ',括起来的,作用就是把 代码中 '''backtest ... ''' 的回测配置信息 传入 VCtx 类构造函数构造对象。
# coding=UTF-8
'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import * # 引用 发明者量化 库
task = VCtx(__doc__) # initialize backtest engine from __doc__ # 调用 VCtx 函数 根据 __doc__初始化。
print exchange.GetAccount() # 测试 GetAccount 函数,并打印 回测系统测试交易所账户信息
Log("\n 调用Log")
Log("调用 exchange.GetTicker() : ", exchange.GetTicker())
print task.Join() # print backtest result # 调用 初始化后的 task 对象 显示回测结果
{'Balance': 3.0, 'Stocks': 0.0, 'FrozenBalance': 0.0, 'FrozenStocks': 0.0}
출력된 내용은 print task.Join ((() 출력 데이터의 구조에서:
{
"Chart": {
"Cfg": "",
"Datas": []
},
"Elapsed": 42000000,
"Finished": true,
"Indicators": {},
"LoadBytes": 441845,
"LoadElapsed": 24000000,
"LogsCount": 2,
"Profit": 0.0,
"ProfitLogs": [],
"Progress": 100.0,
"RuntimeLogs": [ # 调用输出内容在此处
[1, 1518969600200, 5, "", 0, 0.0, 0.0, "\n 调用Log", "", ""],
[2, 1518969600400, 5, "", 0, 0.0, 0.0, "调用 exchange.GetTicker() : {'Sell': 0.02113476, 'Volume': 519.6953, 'Buy': 0.02113474, 'Last': 0.02113475, 'High': 0.02113476, 'Time': 1518969600000L, 'Low': 0.02113474}", "", ""]
],
"Snapshort": [{
"Balance": 3.0,
"BaseCurrency": "LTC",
"Commission": 0.0,
"FrozenBalance": 0.0,
"FrozenStocks": 0.0,
"Id": "OKEX",
"QuoteCurrency": "BTC",
"Stocks": 0.0,
"Symbols": {
"LTC_BTC_OKEX": {
"Last": 0.01893785
}
},
"TradeStatus": {}
}],
"Status": "",
"Task": {
"Args": null,
"Exchanges": [{
"Balance": 3,
"BaseCurrency": "LTC",
"BasePeriod": 300000,
"BasePrecision": 4,
"DepthDeep": 5,
"FaultTolerant": 0,
"FeeDenominator": 5,
"FeeMaker": 75,
"FeeMin": 0,
"FeeTaker": 80,
"Id": "OKEX",
"Label": "OKEX",
"PriceTick": 1e-08,
"QuoteCurrency": "BTC",
"QuotePrecision": 8,
"SlipPoint": 0,
"Stocks": 0
}],
"Options": {
"DataServer": "q.botvs.net",
"MaxChartLogs": 800,
"MaxProfitLogs": 800,
"MaxRuntimeLogs": 800,
"NetDelay": 200,
"Period": 900000,
"RetFlags": 189,
"SnapshortPeriod": 300000,
"TimeBegin": 1518969600,
"TimeEnd": 1521691200,
"UpdatePeriod": 5000
}
},
"TaskStatus": 1,
"Time": 1521691200000
}
# !/usr/local/bin/python
# -*- coding: UTF-8 -*-
'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD","balance":10000,"stocks":3}]
'''
import sys
sys.path.append("/usr/local/lib/python2.7/site-packages") # 测试时添加了路径,如不需要可以删除
from fmz import *
import math
import talib
task = VCtx(__doc__) # initialize backtest engine from __doc__
# ------------------------------ 策略部分开始 --------------------------
print exchange.GetAccount() # 调用一些接口,打印其返回值。
print exchange.GetTicker()
def adjustFloat(v): # 策略中自定义的函数
v = math.floor(v * 1000)
return v / 1000
def onTick(e):
Log("onTick")
# ....
#
# ...
#
# 此处省略 自定义函数实现等代码。
def main():
InitAccount = GetAccount()
while True:
onTick(exchange)
Sleep(1000)
# ------------------------------ 策略部分结束 --------------------------
try:
main() # 回测结束时会 raise EOFError() 抛出异常,来停止回测的循环。所以要对这个异常处理,在检测到抛出的异常后调用 task.Join() 打印回测结果。
except:
print task.Join() # print backtest result , 打印回测结果。
알렉스타오/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:793: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS는 상당한 오버헤드를 추가하고 미래에 기본적으로 비활성화됩니다. Set it to True or False to suppress this warning.
warnings.warn ((FSADeprecationWarning))
트레이스백 (최근 통화 마지막):
파일 "/Users/taoxing/Desktop/quant/trading_api_study/fmz/fmz_extend_api_demo/app.py", 152, in
매일매일 예쁘다이 테스트 결과는 이해가 안되는데 어떻게 시각화할 수 있을까요?
와시이투시현재 리테스트 시스템이 지원하는 트랜잭션은 거의 없습니다. 이 오픈소스 프로젝트는 개발자가 트랜잭션 쌍을 추가하도록 허용합니까?
1058715329언제 로컬 파라미터 최적화를 지원할 수 있을까요?
한쪽 길@小小梦 감사합니다. ◎ 파이썬3의 템플릿이 있나요? fmz 라이브러리를 다운로드했지만 사용 중 오류가 발생하여 패키지가 어디에 있는지 찾을 수 없습니다. /upload/asset/1042a0deeb6624376f8fb.png
위스Tick 모드를 설정하는 방법. 기본적으로는 아날로그 레벨의 Tick을 사용하는 것처럼 보입니다. 실제 디스크 레벨의 Tick로 전환하는 방법
시아오기안이 예제에서 메인 함수가 어디에 있어야 하는지
시아오기안다시 테스트하는 것은 LTC_BTC로만 가능한가요? BTC_USDT로 변경하면 오류가 발생합니다.
테디print exchange.GetTicker ((() 는 Python3에서 print (exchange.GetTicker ((()) 로 쓰여야 하는가?
yxybyq플랫폼에서 검색하는 것은 문제가 없습니다.
리푸트fmz에서는 main 함수를 직접 작성하고, 대부분의 정책이 while True를 직접 작성하고, 반복적으로 호출되는 것을 볼 수 있다. 그러나 python의 로컬 검색 엔진을 사용하는 경우, while True는 프로그램을 계속 실행하도록 하고, __doc__가 지정한 시작 시간과 종료 시간 내에 실행을 중지할 수 없으며, Log의 출력을 부여한다. 또한, 나는 다른 양화 플랫폼에서 일반적으로 개발자가 지정한 함수를 작성하고 플랫폼이 호출하는 것을 보았습니다. fmz는 직접 메인 입력을 작성하도록 허용합니다. 어떤 디자인적 또는 구조적 장점이나 고려가 있습니까?
리푸트코드에 있는 상호작용 입력 변수는 __doc__에 어떻게 쓰나요, 아니면 변수로 입력하나요?
리푸트코드가 fmz로 변경되었습니다. 문서의 예제 코드는 패키지 이름을 변경해야 합니다.
그래요main (()) 는 정상입니다. 그래서, 만약 우리가 이 문제를 해결하기 위해 파일 "D:/workspace/strategy/strategy_001.py", 101, in main 계정 = self._exchange.GetAccount 파일 "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", 라인 716, in GetAccount EOF ((() 파일 "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", line 569, in EOF raise EOFError ((()
토프시언이 물건이 뭘 하는 건지 모르겠어요
리자이 로컬 리코딩은 botvs 플랫폼과 통신해야 하는가? 리코딩의 어떤 정책이 어디에 설정되어 있는지 잘 모르겠습니다.
발명가들의 수량화 - 작은 꿈최신 fmz 패키지를 사용해 보세요.
발명가들의 수량화 - 작은 꿈호스트는 무료로 사용할 수 있지만, 한 키 배포는 알리 클라우드의 서버를 자동으로 임대하는 것입니다. 이 비용은 서버의 비용입니다. 한 키 배포는 좋습니다.
발명가들의 수량화 - 작은 꿈알리 클라우드 서버에 배포된 배포 호스트는 지불되며 귀하의 계정 잔액에서 청구됩니다. 로봇이 실행되면 wexApp 모형 디스크만 작동합니다. 로봇 요금은 청구되지 않으며 배포 호스트 서버 요금과 관련이 없습니다.
발명가들의 수량화 - 작은 꿈이 키를 배포하는 렌터 서버는 다른 추가 요금이다. 로봇의 실제 디스크 요금과 관련이 없으며, wexApp 디스크를 사용하는 것은 로봇이 무료로 작동한다고 말합니다.
발명가들의 수량화 - 작은 꿈wexApp는 FMZ의 시뮬레이션 디스크이며 무료입니다.
발명가들의 수량화 - 작은 꿈이 모든 것은 매우 무례합니다.
발명가들의 수량화 - 작은 꿈실제 디스크 수준에서 재 측정 데이터의 양이 더 많기 때문에 이미 그래프 설정이 최적화되어 있습니다.
발명가들의 수량화 - 작은 꿈최근 시간대를 바꾸어 보세요.
발명가들의 수량화 - 작은 꿈실제 디스크가 가능하고, 플랫폼 라인 리모테이션 및 로컬 리모테이션 엔진은 FMZ 데이터 센터의 데이터로 제한된 거래 쌍 데이터를 제공하며, 모든 거래 쌍은 없습니다.
발명가들의 수량화 - 작은 꿈이 트랜잭션 쌍의 데이터는 현재 리테이크 시스템에 없습니다.
발명가들의 수량화 - 작은 꿈재검토 결과는 데이터 형식이며, 시각화하려면 코드를 직접 작성해야 합니다. 그렇지 않으면 온라인 재검토 시스템을 사용할 수 있습니다.
발명가들의 수량화 - 작은 꿈이것은 필요에 따라 계산되고, 전략에 포함되어 있으며, 공식은 바이오사이트 검색을 통해 찾을 수 있습니다.
발명가들의 수량화 - 작은 꿈이것은 고정된 K 라인의 시작 시간이며, 0에서 시작하는 일일 K 라인이 필요한 경우 1시간 K 라인의 합성으로 계산될 수 있다.
발명가들의 수량화 - 작은 꿈전략 광장에서 몇 가지 전략 예제를 찾을 수 있습니다. 모든 것을 이해하면 간단한 전략을 직접 작성 할 수 있습니다.
발명가들의 수량화 - 작은 꿈이 모든 것은 매우 무례합니다.
발명가들의 수량화 - 작은 꿈이것은 명령줄에서 바로 실행될 수 있습니다.
발명가들의 수량화 - 작은 꿈이 코드는 직접 명령어를 실행하는 것입니다.
발명가들의 수량화 - 작은 꿈이 글은 한 가지 더 중요한 부분입니다. 파일 이름 testBackTest `` fmz에서 가져오기 * task = VCtx (('''백테스트 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 기간: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') #createbacktest print ((exchange.GetAccount)) print ((exchange.GetTicker)) `` /upload/asset/16bea6055e58a9ef7d5c.png
발명가들의 수량화 - 작은 꿈최신 버전의 fmz 파이썬 패키지를 사용해 보세요.
발명가들의 수량화 - 작은 꿈`` fmz에서 가져오기 * task = VCtx (('''backtest) 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 기간: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') # 재검토 환경을 만드는 `` 이렇게 초기화하면 온라인 리모컨을 구성하는 것처럼 거래소, 거래 쌍 등 정보를 설정합니다.
발명가들의 수량화 - 작은 꿈이 글은 이 사건에 대한 자세한 내용입니다.
발명가들의 수량화 - 작은 꿈FMZ에서 검색 데이터를 얻었기 때문에 일시적으로 불가능합니다. 그러나 코드는 오픈 소스이며, 원하는 대로 변경하고 데이터 소스를 대체할 수 있습니다.
발명가들의 수량화 - 작은 꿈`` /* 백테스트 2019-09-21 00:00:00 end: 2019-10-20 00:00:00 기간: 1h [이이드: Bitfinex, currency, BTC_USD] 모드: 1 */ `` 설정 정보의,``mode`` 설정으로, 재검토 페이지에서 설정할 수 있으며, 정책 편집 페이지에서 바로 재검토 설정을 저장하여 설정 정보 문자열에 액세스할 수 있습니다.
후속같은 질문?
크세네이드꼭대기
발명가들의 수량화 - 작은 꿈이 기록은 현재 지원되지 않습니다.
한쪽 길좋아요, 감사합니다.
발명가들의 수량화 - 작은 꿈이 글은 이쪽에서 작성되었습니다.
한쪽 길네, mac os 10.14.4
발명가들의 수량화 - 작은 꿈Mac OSX 운영 체제인가요?
한쪽 길저는 conda로 python 버전을 관리하고 있습니다. 저는 fmz의 python 버전을 다운로드 한 것을 확인했습니다. 그러나 웹 사이트에서 python3를 지원하는 것을 보았지만 시도했을 때 문제가 발생했습니다.
발명가들의 수량화 - 작은 꿈이 패키지가 어디에 설치되었는지 확인해 보세요.
발명가들의 수량화 - 작은 꿈이 게시물은 업데이트 되었습니다. 게시물의 마지막에 있는 예제를 참조하세요.
발명가들의 수량화 - 작은 꿈main 함수가 작성되어 있고, 바로 호출하면 됩니다.
시아오기안 https://github.com/fmzquant/backtest_python/issues/4,看看这个有没有帮助
발명가들의 수량화 - 작은 꿈이 글의 내용은 이쪽 스크린샷에서 확인할 수 있습니다.
시아오기안예를 들어, BTC_USDT로 코드를 변경하면 오류가 발생합니다.
발명가들의 수량화 - 작은 꿈이 문제는 어떤 거래소를 선택하느냐에 달려 있습니다.
발명가들의 수량화 - 작은 꿈이 글은 한 가지 다른 문제와 관련이 있습니다.
발명가들의 수량화 - 작은 꿈FMZ는
발명가들의 수량화 - 작은 꿈''백테스트 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 기간: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' 이 모든 것들은
발명가들의 수량화 - 작은 꿈이 글은 다른 글과 비교해 볼 수 있습니다.
발명가들의 수량화 - 작은 꿈파일 로딩 시작 이 시뮬레이션 계정 구성, 만약 클래스에 적혀 있다면 로딩 안될지 확인합니다.
그래요이 구성은 맞아야 합니다. 왜 클래스 참조를 쓸 수 없나요?
그래요계정 데이터를 검색합니다. 아래 몇 줄인가요?
발명가들의 수량화 - 작은 꿈`` def GetAccount ((self): r = _ACCOUNT ret = self.lib.api_Exchange_GetAccount ((self.ctx, self.idx, ctypes.byref))) if ret == API_ERR_SUCCESS: return r.toObj (() elif ret == API_ERR_FAILED: 반환 None EOF ((() `` 아래 코드를 보면 api_Exchange_GetAccount라는 DLL의 인터페이스처럼 보이는데, 당신은 오류 메시지를 표시하고, 호출이 성공하지 않았고, 호출이 실패하지 않았으며, EOF를 실행합니다. 당신은 재검토 엔진을 사용했을 때 재검토 계정 데이터를 구성하고 있습니까?
발명가들의 수량화 - 작은 꿈이 방법은 재검토 시스템을 파이썬 라이브러리로 포장하여, 로컬 파이썬이 재검토 정책을 수행할 수 있도록 하는 것입니다.
발명가들의 수량화 - 작은 꿈통신이 있을 수 있고, 재검토시에는 데이터 요청이 있지만, 로컬로 실행되는 재검토 시스템에서 실행된다. `` ''백테스트 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 기간: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' botvs에서 가져오기 * task = VCtx ((__doc__) # initialize backtest engine from __doc__ print exchange.GetAccount (프린트 교환.GetAccount) 인쇄 교환.GetTicker print task.Join ((() # print backtest result [프린트 테스트 결과] `` 이 코드는 마치 정책과 같으며, 리테크 시스템은 리버리로 포장되어 테스트를 실행할 때 리테크 시스템의 기능을 호출합니다. 위의 '' 'backtest... '' 안에는 BotVS 정책에서 생성될 수 있는 재검토 파라미터 설정이다.