Type/to search
8
Follow
1364
Followers
FMZ Python لوکل بیک ٹیسٹنگ انجن جاری کرتا ہے۔
Tutorials
Created 2018-04-13 09:48:31  Updated 2019-08-19 16:30:05
 95
 15020

FMZ Python لوکل بیک ٹیسٹنگ انجن جاری کرتا ہے۔

FMZ backtest engine python package
ایف ایم زیڈ ریٹرننگ انجن پیتھون لائبریری
support python2 and python3, support Windows, Linux, Mac
پیتھون 2 اور پیتھون 3 کی حمایت کرتا ہے ، ونڈوز سسٹم ، لینکس سسٹم ، ایپل میک او ایس سسٹم کی حمایت کرتا ہے

install

انسٹال کریں
کمانڈ لائن پر درج ذیل کمانڈ درج کریں:

pip install https://github.com/fmzquant/backtest_python/archive/master.zip
  • نوٹس:
    ایپل میک سسٹم کی تنصیب کے وقت ، اگر حفاظتی پابندیاں ہیں تو ، پائپ کمانڈ سے پہلے سوڈو کمانڈ شامل کرنے کی ضرورت ہے ، اور پورے انسٹالیشن کمانڈ پر عمل درآمد سے پہلے ان پٹ کی ضرورت ہوگی۔ سسٹم کا پاس ورڈ <unk>

simple example

سادہ مثال

python
'''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.
ترتیب کی سٹرنگ کو خود کار طریقے سے پیدا کیا جا سکتا ہے کی طرف سے پالیسی ایڈیٹر انٹرفیس میں محفوظ کی گئی ریٹرننگ ترتیب

meta

documentation

API دستاویزات: (مثال کے طور پر GetAccount جیسے فنکشن کو کال کرنے کے لئے دستاویزات)

پیتھون کوڈ کا مختصر تبصرہ:

python
'''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 类构造函数构造对象。
  • اپنے ٹیسٹ کوڈ میں ترمیم کریں اور دیکھیں کہ مخصوص لاگ اور GetTicker فنکشن کو کس طرح بلایا جاتا ہے۔

    # 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 对象 显示回测结果
    • print exchange.GetAccount() کوڈ آؤٹ پٹ میں درج ذیل مواد دکھایا گیا ہے:
    {'Balance': 3.0, 'Stocks': 0.0, 'FrozenBalance': 0.0, 'FrozenStocks': 0.0}
    • Log (("\n کال لاگ") ، Log ((" کال ایکسچینج۔ گیٹ ٹکر: "، exchange. GetTicker: "))

    آؤٹ پٹ کے مواد پرنٹ ٹاسک. جوائن () آؤٹ پٹ ڈیٹا ڈھانچے میں:

    { "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 }
  • ایک حکمت عملی کا استعمال کرتے ہوئے کس طرح ایک مقامی ریٹرننگ انجن میں ریٹرننگ

python
# !/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 , 打印回测结果。
Related Recommendations
Comment
All comments (86)

    /Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py:793: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
    warnings.warn(FSADeprecationWarning(
    Traceback (most recent call last):
    File "/Users/taoxing/Desktop/quant/trading_api_study/fmz/fmz_extend_api_demo/app.py", line 152, in <module>
    db.create_all()
    File "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 963, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
    File "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 955, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
    File "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 896, in get_engine
    return connector.get_engine()
    File "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 556, in get_engine
    self._sa.apply_driver_hacks(self._app, info, options)
    File "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 861, in apply_driver_hacks
    info.database = os.path.join(app.root_path, info.database)
    AttributeError: can't set attribute

    错在什么地地方了,求大神指导!!!

    5 years ago

    我想运行实盘机器人,添加Wex.app交易所相当于实盘模拟交易是吧?谢谢

    6 years ago

    wexApp是FMZ的模拟盘,不计费的。

    6 years ago

    一键租用托管者,使用wexApp交易所不计费? img

    6 years ago

    这个一键部署租用的服务器是其它另外的计费。和机器人实盘费用无关,使用wexApp模拟盘只是说机器人运行免费(数字货币机器人添加了任意一个非WexApp模拟盘交易所对象都会计费)。

    6 years ago

    就是说,一键部署服务器,可以选择WexApp,机器人与模拟交易所,测试一下模拟效果, 是这样吧?

    6 years ago

    一件部署托管者,是部署在阿里云服务器上,是付费的,会从你的账号余额中计费。 机器人运行,只操作wexApp模拟盘,机器人费用是不计费的,和一件部署托管者服务器费用无关。

    6 years ago

    这个明白,就是托管者付费,运行机器人可以选择wexApp进行测试,也可以选择真实交易所实盘交易,对吧

    6 years ago

    托管者是免费使用的,但是一键部署是自动租用阿里云的服务器,这个费用是服务器的费用。一键部署好,做实盘或者模拟盘都行。

    6 years ago

    但是实盘回测的数据只有一点,还可以优化哪些设置,获取更多实盘数据呢? img img

    6 years ago

    实盘级别回测数据量比较大, 图上设置已经是最优了。

    6 years ago

    您好,我想使用火币现货husd/usdt交易对, 我试了exchange.IO("currency", "HUSD_USDT"),exchange.IO("currency", "HUSD/USDT"),exchange.IO("currency", "HUSDUSDT"),不是运行退出就是品种订阅失败,请问正确的写法是什么?谢谢

    6 years ago

    回测系统暂时没有这个交易对的数据。

    6 years ago

    真实交易可以获取此交易对吗?

    6 years ago

    实盘可以的,平台线上回测和本地回测引擎用的都是FMZ数据中心的数据,提供有限的交易对数据,并非全部的交易对都有。

    6 years ago

    img
    代码里面这样设置exchange.SetCurrency("BTC_USDT")
    但总提示“品种订阅失败 BTC_USDT_OKEX” 或者什么都不显示,直接退出

    6 years ago

    换最近的时间段试下。

    6 years ago

    改为了最近时间段,设置为ok交易对, exchange.SetCurrency("BTC_USDT") ,可以实盘了,非常感谢

    6 years ago

    这回测的结果看不懂啊,怎么可视化呢。

    6 years ago

    回测结果是个数据形式,如果要可视化要自己写代码解析。如果不会,就用线上的回测系统就可以了。

    6 years ago

    请问, 在windows系统,exchange 找不到怎么解决,谢谢

    6 years ago

    具体报错截图看下。

    6 years ago

    img
    exchange 无法识别,已经在python里面安装fmz包了

    6 years ago
    from fmz import * task = VCtx('''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}] ''') # 创建回测环境

    这样初始化一下,就好比在线回测的时候配置上了 交易所 、交易对 等信息。

    6 years ago

    img
    修改完初始化,但是exchange、Log还是无法识别

    6 years ago

    刚才测试了下:

    文件名testBackTest

    from fmz import * task = VCtx('''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}] ''') # create backtest print(exchange.GetAccount()) print(exchange.GetTicker())

    img

    6 years ago

    更新最新版的 fmz python 包试下,我刚下载测试的。

    6 years ago

    img
    导入ccxt的 exchange 竟然可以了,fmz里面用到了ccxt?,没发现呀?

    6 years ago

    不用的,普通python程序就能跑。我上面的代码就是直接命令行跑的。

    6 years ago

    这段代码我在.py文件运行时,需要导入ccxt,否则exchange无法识别。
    在 Python Consle编辑,则可以正常运行。

    6 years ago

    这个直接在命令行运行就可以。

    6 years ago

    请问,我初级教材、FMZ使用方法、api文档都看完了,接下来应该看那些知识?,谢谢

    6 years ago

    可以在策略广场上找一些策略例子看了,如果能全部看明白,就可以动手写一些简单策略了。

    6 years ago

    请问,代码里的收盘时间与回测的收盘都是北京时间早上8:00吗?
    如果收盘时间不是早上8:00,请问如何设置, 谢谢 img

    6 years ago

    这个是固定的K线起始时间,如果需要从零点开始的日K线,可以用一小时K线合成计算。

    6 years ago

    请问如何计算macd金叉\死叉角度,有没有计算公式?谢谢

    6 years ago

    这个要根据需求,在策略里面计算了,公式可以百度搜索下,找下。

    6 years ago

    A5:=MA(C,5);

    A10:=MA(C,10);夹角:IF(CROSS(A5,A10),ATAN((A5/REF(A5,1)-1)*100)-ATAN((A10/REF(A10,1)-1)*100),0)*180/3.1416;
    找到了这个公式,就是不知道REF如何实现

    6 years ago

    请问,在策略编辑器里面import statsmodels 无效,请问在那里可以导入第三方库?我在pycharm里可以导入,但是在编辑器里如何导入?

    6 years ago

    目前回测系统支持的交易对比较少,这个开源项目是否允许自己开发添加一些交易对?

    6 years ago

    暂时不行, 因为回测数据是从FMZ获取的。不过代码是开源的,可以随意修改,替换掉数据源。

    6 years ago

    什么时候可以支持本地的参数优化?

    7 years ago

    好的 ,这个记录下,暂时没有支持。

    7 years ago

    @小小梦 谢谢。有python3的模版么?我已经下载了fmz的库,但使用的时候报错,找不到包在哪。 img

    7 years ago

    您是不是有多个 python 版本,检查下 看这个包安装到哪里了。

    7 years ago

    我是用conda进行python版本管理的,我确认已经下载了fmz的python版本,本地也有了。但看官网上是写的支持python3的,但我去尝试的时候就出现这问题了。是我代码写错了么?我不知道exchange这个对象哪里来的,Log也无法找到。

    7 years ago

    您的操作系统是 Mac OSX么

    7 years ago

    是的,mac os 10.14.4

    7 years ago

    找到问题了,正在处理。

    7 years ago

    好的,谢谢。

    7 years ago

    如何设置Tick模式?默认貌似用的是模拟级Tick,怎么切换到实盘级Tick

    8 years ago
    /*backtest start: 2019-09-21 00:00:00 end: 2019-10-20 00:00:00 period: 1h exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}] mode: 1 */

    通过配置信息中的,mode 设置,可以在回测页面上设置,然后在策略编辑页面上直接保存回测设置获取到配置信息字符串。

    7 years ago

    同问?

    7 years ago

    7 years ago

    还是不会用,一个策略的main函数应该放在这个例子里的什么地方

    8 years ago

    帖子已经更新,您可以看下帖子最后的 范例。

    8 years ago

    main 函数写好, 直接 调用就行了。

    8 years ago

    回测只能用LTC_BTC吗?我改成BTC_USDT程序就报错了

    8 years ago

    这个要看是 选择的是 哪个交易所 回测。

    8 years ago

    print exchange.GetTicker() 在 python3 中是不是应该写成print (exchange.GetTicker())?

    8 years ago

    对的

    7 years ago

    在平台回测没问题,本地回测经常报错

    8 years ago

    要具体看下 报错信息 ,看下是错误位置。

    8 years ago

    在fmz中是自己写main函数,看到大多数策略都是自己写while True,然后一直循环调用策略的。但是在使用python的本地回测引擎时,while True会一直让程序运行,无法在__doc__指定的起始时间和结束时间内停止运行,并给出Log的输出。这时候应该怎么办?
    另外,我在其他的量化平台看到一般都是只由开发者编写指定的函数,然后由平台回调。fmz允许直接编写main入口,是有什么设计上或架构上的优势或考虑吗?

    8 years ago

    FMZ 采用的是 轮询架构 ,这样对于 程序 流程掌控力更强一点,编写策略更加灵活。

    8 years ago

    代码中的交互输入变量,怎么写在__doc__里面,或者是作为参数输入呢?

    8 years ago

    '''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}]
    '''
    这些 就是

    8 years ago

    代码已经改成fmz了,文档里面的示例代码要改一下package名。

    8 years ago

    修改了一下。

    8 years ago

    main()里是正常的
    在class里call exchange会报错,原因是?

    File "D:/workspace/strategy/strategy_001.py", line 101, in main
        account = self._exchange.GetAccount()
      File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", line 716, in GetAccount
        EOF()
      File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", line 569, in EOF
        raise EOFError()

    8 years ago
    def GetAccount(self): r = _ACCOUNT() ret = self.lib.api_Exchange_GetAccount(self.ctx, self.idx, ctypes.byref(r)) if ret == API_ERR_SUCCESS: return r.toObj() elif ret == API_ERR_FAILED: return None EOF()

    看了下代码 好像 api_Exchange_GetAccount 这个是一个 DLL 的接口, 您上面报错信息 显示 没有返回 调用成功 也没有返回调用失败, 然后就去执行 EOF 了。您 使用回测引擎 时 有配置 回测账户 数据么?

    8 years ago

    这配置应该是对的吧
    为什么不能写进class引用

    8 years ago

    文件 开始 加载 这个 模拟账户配置 , 如果写在 类里面 是不是 加载不到了。

    8 years ago

    回测账户数据,是下面几行吗?
    有喔,在global function main里正常引用。
    可是在class里却报错

    '''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 botvs import *
    task = VCtx(doc) # initialize backtest engine from doc

    8 years ago

    这个东西的作用是什么?没看懂哦

    8 years ago

    就是 把回测系统 打包成一个 python 库了, 可以让 本地 python 进行策略 回测。

    8 years ago

    没太看明白怎么用的,这个本地回测还需要跟botvs平台通信嘛?回测哪个策略是在哪里设置的呢?

    8 years ago

    会有 通信,回测时是有数据请求的,不过运行是在本地跑的回测系统。

    '''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 botvs import * task = VCtx(__doc__) # initialize backtest engine from __doc__ print exchange.GetAccount() print exchange.GetTicker() print task.Join() # print backtest result

    这个段代码 就类似 一个 策略, 回测系统 被封装成一个 库了, 测试 运行的时候 调用回测系统的功能。
    上面的 '''backtest ... ''' 内的 就是 回测参数设置, 可以在BotVS 策略回测页面生成。

    8 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)