FMZ backtest engine python package Perpustakaan python enjin pengukuran FMZ support python2 and python3, support Windows, Linux, Mac Menyokong python2 dan python3, menyokong sistem windows, sistem Linux, sistem Mac OS Apple
Pemasangan Dalam bar arahan, masukkan arahan berikut:
pip install https://github.com/fmzquant/backtest_python/archive/master.zip
Contoh mudah
'''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. String konfigurasi boleh dihasilkan secara automatik melalui penyusunan semula konfigurasi yang disimpan dalam antara muka penyuntingan dasar
Dokumen API: (iaitu dokumen yang memanggil fungsi seperti GetAccount dalam contoh)
'''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}
Kandungan output adalah dalam struktur output data 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 , 打印回测结果。
Alextao/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. Set it to True or False to suppress this warning.
Warnings.warn ((FSADeprecationWarning))
Traceback (terakhir panggilan terkini):
File "/Users/taoxing/Desktop/quant/trading_api_study/fmz/fmz_extend_api_demo/app.py", baris 152, dalam
Guanyuwanglei 我想运行实盘机器人,添加Wex.app交易所相当于实盘模拟交易是吧?谢谢
GuanyuwangleiTetapi hanya ada sedikit data yang diuji semula pada cakera sebenar, apakah tetapan yang boleh dioptimumkan untuk mendapatkan lebih banyak data cakera sebenar? /upload/asset/105f604eaceb0d3928a90.png /upload/asset/1066714d9a32c82eab7f1.png
GuanyuwangleiHai, saya ingin menggunakan pasangan dagangan token cash husd/usdt, saya telah mencuba exchange.IO (("currency", "HUSD_USDT"), exchange.IO (("currency", "HUSD/USDT"), exchange.IO (("currency", "HUSDUSDT"), bukan menjalankan keluar atau jenis langganan gagal, sila tanyakan penulisan yang betul? terima kasih
Hari demi hari.Hasil ujian ini tidak dapat difahami, bagaimana untuk dilihat?
GuanyuwangleiTolong, saya tidak dapat mencari penyelesaian di sistem windows, terima kasih.
koshiyituoshiAdakah projek sumber terbuka ini membenarkan pemaju untuk menambah beberapa pasangan transaksi?
1058715329Bilakah anda boleh menyokong pengoptimuman parameter tempatan?
Berjaya@cilokcilom. terima kasih. adakah anda mempunyai templat python3? saya telah memuat turun perpustakaan fmz, tetapi ketika menggunakannya, saya mendapat kesilapan dan tidak dapat mencari di mana pakej tersebut terletak. /upload/asset/1042a0deeb6624376f8fb.png
kamiBagaimana untuk menetapkan mod Tick? Secara lalai kelihatan seperti menggunakan Tick peringkat analog, bagaimana untuk beralih ke Tick peringkat cakera sebenar
XiaojianJika tidak, di mana fungsi utama untuk satu strategi harus diletakkan dalam contoh ini?
XiaojianAdakah ujian semula hanya boleh dilakukan dengan LTC_BTC?
teddyAdakah print exchange.GetTicker ()) harus ditulis sebagai print (exchange.GetTicker ()) dalam Python 3?
yxybyqTidak ada masalah dengan penyesuaian platform, penyesuaian tempatan sering membuat kesilapan.
liputDalam fmz adalah menulis sendiri fungsi utama, melihat kebanyakan dasar adalah menulis sendiri sementara True, dan kemudian terus berputar memanggil dasar. Tetapi apabila menggunakan enjin semula semula asli Python, sementara True akan membiarkan program berjalan sepanjang masa, tidak dapat berhenti berjalan pada masa permulaan dan akhir yang ditetapkan oleh __doc__, dan memberikan output Log. Apa yang harus dilakukan? Di samping itu, saya melihat pada platform kuantiti yang lain yang biasanya hanya menulis fungsi yang ditetapkan oleh pembangun dan ditarik balik oleh platform. fmz membenarkan penulisan masuk utama secara langsung, adakah ada kelebihan atau pertimbangan reka bentuk atau seni bina?
liputVariabel input interaktif dalam kod, bagaimana ia ditulis dalam __doc__, atau input sebagai parameter?
liputKod telah ditukar kepada fmz, contoh kod dalam dokumen perlu ditukar kepada nama pakej.
YaYamain (() adalah normal Jika anda ingin membuat pertukaran panggilan dalam kelas, anda perlu membuat pertukaran panggilan dalam kelas. File "D:/workspace/strategy/strategy_001.py", baris 101, dalam utama account = self._exchange.GetAccount ((() File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", baris 716, dalam GetAccount EOF ((() File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", baris 569, dalam EOF raise EOFError ((()
topscienApakah fungsi benda ini? Saya tidak faham.
LizzaSaya tidak faham bagaimana ia digunakan, adakah penyesuaian tempatan ini juga memerlukan komunikasi dengan platform botvs?
Pencipta Kuantiti - Impian KecilCuba gunakan pakej fmz terkini.
Pencipta Kuantiti - Impian KecilHost adalah percuma untuk digunakan, tetapi penyebaran satu butang adalah penyewaan automatik pelayan Ali Cloud, dengan bayaran yang dikenakan oleh pelayan. Satu butang adalah baik untuk digunakan, sama ada untuk membuat cakera sebenar atau cakera analog.
GuanyuwangleiYang jelas, adalah bahawa pengurus membayar, robot yang menjalankan wexapp boleh memilih untuk menguji, atau anda boleh memilih untuk berdagang secara langsung di bursa sebenar, betul?
Pencipta Kuantiti - Impian KecilSeorang hos yang digunakan, yang digunakan di pelayan awan Ali, adalah berbayar dan akan dikenakan bayaran dari baki akaun anda. Bot yang dijalankan hanya menggunakan wexApp analog, kos bot tidak dikenakan, dan kos pelayan hos yang digunakan tidak berkaitan.
GuanyuwangleiIni bermakna, dengan satu butang, anda boleh menggunakan pelayan, pilih WexApp, bot dan pertukaran analog, dan menguji kesan analog, bukan?
Pencipta Kuantiti - Impian KecilIni adalah satu lagi bayaran tambahan. Tidak ada kaitan dengan kos sebenar bot, menggunakan wexApp Analog hanya mengatakan bahawa bot berjalan secara percuma (robot mata wang digital akan dikenakan sebarang objek pertukaran bukan WexApp Analog yang ditambahkan).
GuanyuwangleiSatu butang sewa pengurus, menggunakan bursa wexApp percuma? /upload/asset/1066e4b56fa103356dbc1.png
Pencipta Kuantiti - Impian KecilWexApp adalah sebuah aplikasi analog FMZ, percuma.
Pencipta Kuantiti - Impian KecilTidak sopan.
Pencipta Kuantiti - Impian KecilPengukuran semula data pada tahap rak sebenar adalah lebih besar, dan tetapan di atas sudah menjadi yang terbaik.
GuanyuwangleiUntuk jangka masa yang lebih baru, seting untuk pasangan perdagangan ok, exchange.SetCurrency (("BTC_USDT"), boleh berdagang secara langsung, terima kasih banyak.
Pencipta Kuantiti - Impian KecilCuba tukar tempoh masa terkini.
Guanyuwanglei/upload/asset/1063627010637fee333ad.png Setup exchange.SetCurrency dalam kod seperti ini (("BTC_USDT") Tetapi isyarat biasa untuk langganan jenis gagal BTC_USDT_OKEX langganan atau tidak ada yang ditunjukkan, keluar terus
GuanyuwangleiTerima kasih.
Pencipta Kuantiti - Impian KecilData dari pusat data FMZ yang digunakan oleh mesin pemindaian talian platform dan mesin pemindaian tempatan, yang boleh digunakan pada cakera sebenar, menyediakan data pasangan transaksi yang terhad, tetapi tidak semua pasangan transaksi tersedia.
GuanyuwangleiAdakah transaksi sebenar boleh mendapatkan transaksi ini?
Pencipta Kuantiti - Impian KecilSistem pengesanan tidak mempunyai data untuk pasangan transaksi ini buat masa ini.
Pencipta Kuantiti - Impian KecilHasil pengesanan adalah bentuk data, jika anda ingin memvisualisasikan, anda perlu menulis kod sendiri untuk menguraikan. Jika tidak, anda boleh menggunakan sistem pengesanan dalam talian.
GuanyuwangleiA5: = MA ((C,5); A10: = MA (C,10); sudut: IF (CROSS) (A5, A10), ATAN (A5/REF) (A5, 1) -1) * 100) - ATAN (A10/REF) (A10, 1) -1) * 100),0) * 180/3.1416; Dan saya tidak tahu bagaimana REF boleh melakukannya.
Pencipta Kuantiti - Impian KecilRumus ini dikira mengikut keperluan, dalam strategi, dan formula boleh dicari di Baidu.
GuanyuwangleiSaya ingin tahu bagaimana untuk mengira macd golden fork / mati garpu sudut, adakah ada formula untuk mengira? terima kasih
GuanyuwangleiTolong, import statsmodels dalam editor dasar tidak sah, bolehkah saya mengimport perpustakaan pihak ketiga di mana? Saya boleh mengimport di pycharm, tetapi bagaimana saya mengimport di editor?
Pencipta Kuantiti - Impian KecilIni adalah masa permulaan garis K yang tetap, dan jika anda memerlukan garis K hari yang bermula dari titik sifar, anda boleh menggunakan gabungan garis K satu jam.
GuanyuwangleiBoleh saya tanya, apakah waktu penutupan di dalam kod dan waktu penutupan di dalam ulasan adalah 8:00 pagi waktu Beijing? Jika waktu penutupan bukan jam 8:00, sila setkan, terima kasih /upload/asset/1067eabe09e92d1610d71.png
Pencipta Kuantiti - Impian KecilContoh strategi boleh didapati di Strategy Square, dan jika anda dapat memahami semuanya, anda boleh menulis beberapa strategi mudah dengan tangan anda.
GuanyuwangleiSaya sudah membaca semua bahan ajar, kaedah FMZ, dan dokumen api, bolehkah saya melihat pengetahuan seterusnya? terima kasih
Pencipta Kuantiti - Impian KecilTidak sopan.
GuanyuwangleiTerima kasih.
Pencipta Kuantiti - Impian KecilIni boleh dijalankan secara langsung di barisan arahan.
GuanyuwangleiKod ini perlu diimport ke dalam ccxt apabila saya menjalankan fail.py, jika tidak, pertukaran tidak dapat mengenalinya. Dalam penyuntingan Python Consle, ia boleh berjalan dengan baik.
Pencipta Kuantiti - Impian KecilTidak perlu, program Python biasa boleh dijalankan. Kod di atas saya adalah perintah langsung untuk menjalankan.
Guanyuwanglei/upload/asset/106d6ff1919bdac419875.png Jika anda ingin mengimport ccxt ke Exchange, anda boleh menggunakan ccxt di dalam fmz?
Pencipta Kuantiti - Impian KecilSaya baru sahaja menguji: Nama fail: testBackTest `` dari fmz import * task = VCtx (('''backtest mula: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 tempoh: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') # create backtest print ((exchange.GetAccount)) print ((exchange.GetTicker)) `` /upload/asset/16bea6055e58a9ef7d5c.png
Pencipta Kuantiti - Impian KecilSaya telah memuat turun versi terbaru dari fmz python package dan cubalah, saya baru sahaja memuat turun versi ujian.
Guanyuwanglei/upload/asset/1068d63bc6203599fc1c8.png Ubah initialization, tetapi exchange, log masih tidak dapat dikenali
Pencipta Kuantiti - Impian Kecil`` dari fmz import * task = VCtx (('''backtest mula: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 tempoh: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') # Mencipta persekitaran untuk mengulas semula `` Dengan cara ini, anda akan dapat menghidupkan semula maklumat seperti yang telah dikonfigurasi semasa mengulas semula secara dalam talian.
Guanyuwanglei/upload/asset/106581e23604bb2d701d8.jpg Exchange tidak dapat diiktiraf, telah memasang pakej fmz di dalam python
Pencipta Kuantiti - Impian KecilDi bawah ini adalah rakaman skrin laporan kesalahan.
Pencipta Kuantiti - Impian KecilUntuk sementara tidak boleh, kerana data pengukuran semula diperoleh dari FMZ. Walau bagaimanapun, kodnya adalah sumber terbuka, dan anda boleh mengubah atau menggantikan sumber data sesuka hati.
Pencipta Kuantiti - Impian Kecil`` /* backtest mula: 2019-09-21 00:00:00 end: 2019-10-20 00:00:00 tempoh: 1h Pertukaran: [{"eid:"Bitfinex","currency:"BTC_USD"}] mod: 1 */ `` Dengan menggunakan tetapan, ``mode`` dalam maklumat konfigurasi, anda boleh menetapkannya di halaman retargeting dan kemudian menyimpan tetapan retargeting secara langsung di halaman penyuntingan dasar untuk mendapatkan rentetan maklumat konfigurasi.
SelepasAdakah saya boleh bertanya?
ChujiuYa, betul.
XenidaPuncak
Pencipta Kuantiti - Impian KecilBaiklah, catatan ini tidak disokong buat masa ini.
BerjayaBaiklah, terima kasih.
Pencipta Kuantiti - Impian KecilKami telah menemui masalah dan sedang mengatasinya.
BerjayaYa, Mac OS 10.14.4
Pencipta Kuantiti - Impian KecilAdakah sistem operasi anda Mac OSX?
BerjayaSaya menggunakan conda untuk menguruskan versi python, dan saya mengesahkan bahawa saya telah memuat turun versi python fmz, dan ia juga terdapat di dalam negara. Tetapi saya melihat di laman web bahawa ia menyokong python3, tetapi masalah ini muncul ketika saya cuba. Adakah saya menulis kod yang salah?
Pencipta Kuantiti - Impian KecilJika anda mempunyai lebih daripada satu versi python, lihat di mana pakej ini dipasang.
Pencipta Kuantiti - Impian KecilPosting ini telah dikemas kini, anda boleh lihat contoh di akhir post.
Pencipta Kuantiti - Impian KecilFungsi main ditulis dengan baik, langsung dipanggil dan selesai.
Xiaojian https://github.com/fmzquant/backtest_python/issues/4,看看这个有没有帮助
Pencipta Kuantiti - Impian KecilBerita yang salah, boleh dilihat di bawah ini.
XiaojianIni adalah contoh kod yang berubah menjadi BTC_USDT yang salah.
Pencipta Kuantiti - Impian KecilIni bergantung kepada mana bursa yang dipilih untuk mengulas semula.
Pencipta Kuantiti - Impian KecilUntuk melihat secara lebih spesifik, lihat di mana mesej kesalahan itu berada.
Pencipta Kuantiti - Impian KecilFMZ menggunakan struktur rundingan, yang memberikan sedikit kawalan yang lebih kuat terhadap proses program dan lebih fleksibel dalam menulis strategi.
Pencipta Kuantiti - Impian Kecil''Backtest mula: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 tempoh: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' Ini adalah:
Pencipta Kuantiti - Impian KecilDi sini, anda boleh melihat beberapa gambar yang berbeza.
Pencipta Kuantiti - Impian KecilFile mula dimuat Konfigurasikan akaun simulasi ini, jika ditulis di dalam kelas apakah tidak dapat dimuat.
YaYaPerancangan ini sepatutnya betul. Kenapa tidak boleh menulis rujukan ke dalam kelas?
YaYaPeriksa data akaun anda, apakah beberapa baris di bawah? Ada, ia adalah rujukan normal dalam fungsi global utama. Tetapi anda membuat kesilapan dalam kelas. ''Backtest mula: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 tempoh: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' daripada botvs import * task = VCtx ((__doc__) # initialize backtest engine from __doc__
Pencipta Kuantiti - Impian Kecil`` 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: return Tiada EOF ((() `` Dengan melihat kod di bawah ini, ia kelihatan seperti API_Exchange_GetAccount ini adalah antara muka DLL, anda akan mendapat mesej ralat yang menunjukkan tiada panggilan yang berjaya atau gagal, kemudian anda akan menjalankan EOF.
Pencipta Kuantiti - Impian KecilIni adalah untuk membungkus sistem ulangan ke dalam perpustakaan Python, yang membolehkan Python tempatan menjalankan strategi ulangan.
Pencipta Kuantiti - Impian KecilTerdapat komunikasi, permintaan data yang dibuat pada masa ulangan, tetapi sistem ulangan berjalan di tempat. `` ''Backtest mula: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 tempoh: 15m exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' daripada botvs import * task = VCtx ((__doc__) # initialize backtest engine from __doc__ print exchange.GetAccount (dalam bahasa Inggeris) print exchange.GetTicker (dalam bahasa Inggeris) print task.Join ((() # print backtest result `` Perenggan kod ini menyerupai satu strategi, di mana sistem penyesuaian dibungkus ke dalam sebuah perpustakaan, ujian, dan panggilan fungsi sistem penyesuaian semasa berjalan. ''Backtest... '' di atas adalah tetapan parameter backtest yang boleh dihasilkan pada halaman backtest dasar BotVS.