avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

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

میں تخلیق کیا: 2018-04-13 09:48:31, تازہ کاری: 2019-08-19 16:30:05
comments   95
hits   14346

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
  • نوٹس: ایپل میک سسٹم کی تنصیب کے وقت ، اگر حفاظتی پابندیاں ہیں تو ، پائپ کمانڈ سے پہلے سوڈو کمانڈ شامل کرنے کی ضرورت ہے ، اور پورے انسٹالیشن کمانڈ پر عمل درآمد سے پہلے ان پٹ کی ضرورت ہوگی۔ سسٹم کا پاس ورڈ

simple example

سادہ مثال

'''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 جیسے فنکشن کو کال کرنے کے لئے دستاویزات)

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

'''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
  }
  • ### ایک حکمت عملی کا استعمال کرتے ہوئے کس طرح ایک مقامی ریٹرننگ انجن میں ریٹرننگ
# !/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  , 打印回测结果。