FMZ backtest engine python пакет ФМЗ рекурсионный двигатель Python поддержка python2 и python3, поддержка Windows, Linux, Mac Поддержка python2 и python3, поддержка Windows, Linux, Apple Mac 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. The config string can be generated automatically by saving the backtest configuration in the strategy edit page. The config string can be generated automatically by saving the backtest configuration in the strategy edit page. 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__用来访问模块,类声明或者函数的声明中第一个未被赋值的字符串,
可以是被""" ""","" "",' ',括起来的,作用就是把 代码中 '''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.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/python 3.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. /Users/taoxing/opt/anaconda3/envs/ai4f/lib/python 3.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 (последний последний звонок):
Файл "/Users/taoxing/Desktop/quant/trading_api_study/fmz/fmz_extend_api_demo/app.py", строка 152, в
Гуаньюванглей 我想运行实盘机器人,添加Wex.app交易所相当于实盘模拟交易是吧?谢谢
ГуаньюванглейНо данные, которые просматриваются на реальном диске, немного, и какие настройки можно оптимизировать, чтобы получить больше данных на реальном диске? /upload/asset/105f604eaceb0d3928a90.png /upload/asset/1066714d9a32c82eab7f1.png
ГуаньюванглейЗдравствуйте, я хочу использовать токены на наличных husd/usdt торговые пары, я попробовал exchange.IO (("currency", "HUSD_USDT"), exchange.IO (("currency", "HUSD/USDT"), exchange.IO (("currency", "HUSDUSDT"), не работает выход или разновидность подписки не удалось, пожалуйста, как правильно написать? спасибо
Каждый день.Как же можно визуализировать результаты этого повторного тестирования?
ГуаньюванглейПрошу, на Windows Exchange не может найти решение, спасибо.
ВошитуошиВ настоящее время в системе рецензирования поддерживается относительно небольшое количество транзакций, но позволяет ли этот открытый проект разработчикам добавлять некоторые транзакции?
1058715329Когда можно поддерживать локальную оптимизацию параметров?
Однозначно.@ маленький маленький сон. Спасибо. Есть ли шаблон для python3? Я загрузил библиотеку fmz, но при использовании я получил ошибку, не могу найти пакет.
МысКак настроить режим Tick? По умолчанию кажется, что используется Tick аналогового уровня, как переключиться на Tick реального уровня
СкиаоцянИли нет, где в этом примере должна быть главная функция стратегии?
СкиаоцянЯ перехожу на программу BTC_USDT и получаю ошибку.
Тедди.print exchange.GetTicker (()) в python3 следует писать как print (exchange.GetTicker (())?
yxybyqНа платформе нет проблем, локальное повторение часто дает ошибки.
липутВ fmz пишется собственная main функция, видишь большинство стратегий пишется собственным while True, а затем все время циркулирует призыв стратегии. Но при использовании натурного ретровизионного двигателя python, while True всегда запускает программу, не может остановиться в течение указанного времени начала и окончания __doc__, и дает выход Log. Что делать? Кроме того, я вижу, что на других платформах количественного измерения обычно только определенные функции, написанные разработчиком, и затем отозванные платформой. fmz позволяет прямо писать главный вход, есть ли какие-либо конструктивные или архитектурные преимущества или соображения?
липутКак вводить интерактивные входные переменные в код, как их записывать в _doc__ или как параметры?
липутКод был переименован в fmz, и примерный код в документации должен быть переименован в package name.
Да, да.В main (()) это нормально Почему в классе call exchange возвращает ошибки? Файл "D:/workspace/strategy/strategy_001.py", строка 101, в основном account = self._exchange.GetAccount ((() Файл "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", строка 716, в GetAccount EOF ((() Файл "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", строка 569, в EOF raise EOFError (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
ТопсьенЧто это за штука?
Лиза.Не совсем понятно, как это сделать, но местный реверс также должен взаимодействовать с платформой botvs?
Изобретатели количественного измерения - мечтыПопробуйте с помощью последнего пакета fmz.
Изобретатели количественного измерения - мечтыХостинг бесплатный, однако настройка с одной клавиатурой автоматически арендует сервер Ali Cloud за счет платы за сервер.
ГуаньюванглейЭто понятно, потому что хозяин платит, и робот может использовать WexApp для тестирования, или он может использовать реальные биржи для торговли, верно?
Изобретатели количественного измерения - мечтыРазвертывающий хост, развертываемый на сервере Ali Cloud, является платным и будет взиматься с баланса вашего аккаунта.
ГуаньюванглейЭто означает, что с помощью одной клавиши вы можете развернуть сервер, выбрать WexApp, бота и аналогичную биржу, чтобы проверить аналогию, верно?
Изобретатели количественного измерения - мечтыЭтот ключ для развертывания сервера для аренды является другой дополнительной платой. Не имеет отношения к плате за реальный диск робота, а использование wexApp-диска просто говорит о том, что робот работает бесплатно (цифровой валютный робот будет взимать плату за любой объект не-WexApp-диска).
ГуаньюванглейОдин ключ для аренды хранителя, использование wexApp биржи бесплатно? /upload/asset/1066e4b56fa103356dbc1.png
Изобретатели количественного измерения - мечтыWexApp - это бесплатный анимационный диск FMZ.
Изобретатели количественного измерения - мечтыНепристойность.
Изобретатели количественного измерения - мечтыНа самом деле, если вы хотите, чтобы вы были в состоянии получить больше данных, то вы должны использовать эти параметры, чтобы получить больше данных.
ГуаньюванглейДля более поздних периодов времени настройка на пары OK, exchange.SetCurrency (("BTC_USDT"), может быть реализована, спасибо большое.
Изобретатели количественного измерения - мечтыПопробуйте перейти на более поздний период времени.
Гуаньюванглей/upload/asset/1063627010637fee333ad.png В коде установлено следующее: exchange.SetCurrency (("BTC_USDT") Но все подсказки для подписки на разновидности не удалось BTC_USDT_OKEX подсказки или ничего не показывают, сразу выйти
ГуаньюванглейСпасибо.
Изобретатели количественного измерения - мечтыНа физическом диске, платформенном реместе и локальном реместе используются данные FMZ Data Center, которые предоставляют ограниченное количество данных о парах сделок, но не все пары сделок.
ГуаньюванглейА что, если реальная сделка принесет сделку?
Изобретатели количественного измерения - мечтыВ настоящее время в системе обратной связи нет данных об этой транзакционной паре.
Изобретатели количественного измерения - мечтыРезультаты рецензирования являются формой данных, и если вы хотите визуализировать их, вам нужно написать свой собственный код. Если нет, вы можете использовать онлайн-рецензирование.
Гуаньюванглей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 работает.
Изобретатели количественного измерения - мечтыЭта формула рассчитывается в соответствии с потребностями, в стратегии, и ее можно найти в поиске на Baidu.
ГуаньюванглейПрошу, как вычислить угол macd золотого вилка \ мертвого вилка, есть ли формула для вычисления?
ГуаньюванглейСпросите, import statsmodels в редакторе политики недействителен, где можно импортировать сторонние библиотеки?
Изобретатели количественного измерения - мечтыЭто фиксированное время начала K-линии, если требуется дневная K-линия, начинающаяся с нуля, можно вычислить с синтезом K-линии в час.
ГуаньюванглейСпросите, время закрытия в коде и время закрытия в обратном сообщении - 8:00 утра по Пекинскому времени? Если время закрытия не 8:00 утра, пожалуйста, расскажите, как это сделать.
Изобретатели количественного измерения - мечтыЕсли вы можете найти примеры стратегий на площади стратегий, и если вы понимаете все, вы можете написать несколько простых стратегий.
ГуаньюванглейПожалуйста, я прочитал начальные учебные материалы, методы использования FMZ и документацию API, а теперь я должен посмотреть на эти знания?
Изобретатели количественного измерения - мечтыНепристойность.
ГуаньюванглейСпасибо.
Изобретатели количественного измерения - мечтыЭто может быть выполнено прямо с командной строки.
ГуаньюванглейЭтот код, когда я работаю в файле.py, требует ввода ccxt, иначе exchange не сможет его распознать. В Python Consle это работает нормально.
Изобретатели количественного измерения - мечтыНе используется, обычные программы Python могут работать.
Гуаньюванглей/upload/asset/106d6ff1919bdac419875.png Как получилось, что в fmz используется ccxt?
Изобретатели количественного измерения - мечтыЯ только что проверил: Файл testBackTest `` import * из fmz task = VCtx (('''backtest start: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 Период: 15 м exchange: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') # создать backtest print ((exchange.GetAccount)) print ((exchange.GetTicker)) `` /upload/asset/16bea6055e58a9ef7d5c.png
Изобретатели количественного измерения - мечтыПопробуйте обновленную версию пакета fmz python, которую я только что загрузил.
Гуаньюванглей/upload/asset/1068d63bc6203599fc1c8.png Изменения в инициализации, но Exchange, Log все еще не распознают
Изобретатели количественного измерения - мечты`` import * из fmz task = VCtx (('''backtest start: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 Период: 15 м exchange: [{"eid:"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] ''') # Создание среды для рецензирования `` В этом случае, если вы хотите, чтобы ваш сайт был доступен для всех пользователей, вы должны установить его, как это делается в Интернете, чтобы получить доступ к информации об обмене, паре сделок и т.д.
Гуаньюванглей/upload/asset/106581e23604bb2d701d8.jpg /upload/asset/106581e23604bb2d701d8.jpg /upload/asset/106581e23604bb2d701d8.jpg Exchange не может быть идентифицирован, в Python уже установлен пакет FMZ
Изобретатели количественного измерения - мечтыПосмотрите скриншот с конкретными сообщениями об ошибках.
Изобретатели количественного измерения - мечтыВ настоящее время это не возможно, поскольку данные отслеживания получены из FMZ. Однако код является открытым, и его можно изменить и заменить на любой источник данных.
Изобретатели количественного измерения - мечты`` /* backtest start: 2019-09-21 00:00:00 end: 2019-10-20 00:00:00 Период: 1h [{"eid:"Bitfinex","currency":"BTC_USD"}] режим: 1 */ `` С помощью настройки ```mode `` в конфигурационной информации, которая может быть установлена на странице обратной проверки, а затем сохранена непосредственно на странице редактирования политики для получения строки конфигурационной информации.
ПозжеСпросите?
ЧжуцзюДа, это так.
ксенидВершина
Изобретатели количественного измерения - мечтыХорошо, но эта запись пока не поддерживается.
Однозначно.Хорошо, спасибо.
Изобретатели количественного измерения - мечтыМы нашли проблему, и мы ее исправляем.
Однозначно.Да, для mac os 10.14.4
Изобретатели количественного измерения - мечтыВаша операционная система Mac OSX?
Однозначно.Я управляю версией python с помощью conda, я подтвердил, что загрузил версию python fmz, которая есть на месте. Но я посмотрел на веб-сайт, где написано, что поддерживает python3, но когда я попытался, это вызвало проблему.
Изобретатели количественного измерения - мечтыЕсли у вас есть несколько версий Python, проверьте, где этот пакет установлен.
Изобретатели количественного измерения - мечтыПост был обновлен, вы можете посмотреть пример в конце сообщения.
Изобретатели количественного измерения - мечтыmain-функция написана, прямой вызов выполнен.
Скиаоцян https://github.com/fmzquant/backtest_python/issues/4,看看这个有没有帮助
Изобретатели количественного измерения - мечтыПозже, в апреле, в Twitter появилась публикация, в которой сообщалось, что в Twitter появилась информация о том, что в Facebook написано неправдоподобное сообщение.
СкиаоцянЭто пример кода, который ошибается, когда его переводят в BTC_USDT.
Изобретатели количественного измерения - мечтыЭто зависит от того, какая биржа выберет для повторного тестирования.
Изобретатели количественного измерения - мечтыЕсли посмотреть на информацию об ошибке, то это неправильное местоположение.
Изобретатели количественного измерения - мечтыFMZ использует архитектуру консультаций, что дает более сильный контроль над процессом и гибкость в написании стратегии.
Изобретатели количественного измерения - мечты'' 'Backtest start: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 Период: 15 м exchange: [{"eid:"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' Это
Изобретатели количественного измерения - мечтыВ этом случае мы не будем делать никаких ошибок.
Изобретатели количественного измерения - мечтыФайлы начинают загружаться Эта конфигурация симуляторной учетной записи, если она написана в классе, не может быть загружена.
Да, да.Эта конфигурация должна быть правильной. Почему я не могу написать в класс ссылки?
Да, да.Проверьте данные с аккаунта, это несколько строк? Есть, но это нормальное ссылка в глобальной функции main. Но в классе ошибки. '' 'Backtest start: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 Период: 15 м exchange: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' Из botvs import * task = VCtx ((__doc__) # initialize backtest engine from __doc__
Изобретатели количественного измерения - мечты`` 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 Ничего EOF ((() `` Посмотрите на код, который выглядит как API_Exchange_GetAccount. Это интерфейс для DLL, и вы получите сообщение об ошибке, которое показывает, что не было возвращения, вызов был успешным и не было возвращения, вызов не был успешным, и вы выполните EOF.
Изобретатели количественного измерения - мечтыЭто означает, что вы можете упаковать систему повторного тестирования в библиотеку Python, чтобы Python мог выполнять свои собственные стратегии повторного тестирования.
Изобретатели количественного измерения - мечтыЕсть коммуникация, когда запрос на данные выполняется, но он работает на локальной системе. `` '' 'Backtest start: 2018-02-19 00:00:00 end: 2018-03-22 12:00:00 Период: 15 м exchange: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] '' Из botvs import * task = VCtx ((__doc__) # initialize backtest engine from __doc__ print exchange.GetAccount (англ.) русск.) print exchange.GetTicker (англ.) русский print task.Join ((() # print backtest result Выполнение задания `` Этот фрагмент кода похож на политику, в которой система рецензирования упакована в библиотеку, тестируется и приводится в действие при вызове функции системы рецензирования. Выше '' 'backtest... '' входит в параметры рецензирования, которые могут быть сгенерированы на странице рецензирования политики BotVS.