@BurdenBear
2018-12-20T12:12:32.000000Z
字数 17504
阅读 765
国金因子
chocolatey致力于windows下成为类似yum或apt一类的软件包仓库工具
请安装官网的说明安装
安装此软件后,其他的所有其他依赖都可以使用choco来进行安装,建议直接跳转1.8使用脚本安装所有依赖,如果出现问题再手动安装。
git是最常用的代码管理工具之一。
下载地址: https://git-scm.com/
也可以使用
choco install git命令来安装
anaconda3是集成了许多科学计算相关包和模块管理工具conda的python3集成版本
下载地址: https://www.anaconda.com/download/
也可以使用
choco install anaconda3命令来安装
此为windows系统上的cpp编译器,许多python模块安装的编译阶段需要用到该编译器
安装命令 choco install visualcppbuildtools
nssm是一个开源免费工具,用于将.bat程序制作成windows上的服务,可以配置服务自动重启,日志输出,环境变量等。下载后将nssm.exe所在目录加入系统环境变量PATH中即可使用
下载地址: https://nssm.cc/download
使用说明: https://nssm.cc/usage
也可以使用
choco install nssm命令来安装
负责factor-api-server和dyupdater,发送计算任务信息。如果已有可访问的rabbtimq服务也可以直接配置使用
从该页面找到最新适配Rabbitmq和Erlang版本: https://www.rabbitmq.com/which-erlang.html
下载安装1.4.1中确定的相应版本的Erlang
地址:http://www.erlang.org/downloads
下载安装1.4.1中确定的相应版本的Rabbitmq
地址: https://www.rabbitmq.com/download.html
注意要在安装时勾选安装windows服务
也可以使用
choco install rabbitmq命令来安装
安装好rabbitmq后,打开cmd,进入rabbitmq安装目录中(C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.8\sbin),运行以下命令:
rabbitmq-plugins enable rabbitmq_management
负责factor-api-server和dyupdater,储存计算任务结果。如果已有可访问的redis服务也可以直接配置使用
github仓库: https://github.com/MicrosoftArchive/redis
安装文件下载地址: https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi
安装时建议勾选将安装目录添加到系统PATH环境变量;如需设置maxmemory,至少设置4G以上。
也可以使用
choco install redis-64命令来安装
进入redis安装目录,找到redis.windows-service.conf文件
默认位置在C:\Program Files\Redis\redis.windows-service.conf
用代码编辑器打开该文件(推荐vscode),搜索notify-keyspace-events
将对应行改成:
notify-keyspace-events "EA"
修改完成后在cmd中运行以下命令重启Redis服务
sc stop redissc start redis
install.bat文件即可
@echo offcd %~dp0@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"choco install -y gitchoco install -y anaconda3choco install -y visualcppbuildtoolschoco install -y nssmchoco install -y rabbitmqREM install redisset REDIS_MSI_FILE=Redis-x64.msiif not exist %TEMP%\%REDIS_MSI_FILE% (echo "Redis-x64.msi 下载中..."@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;(new-object System.Net.WebClient).DownloadFile('https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi','%TEMP%/%REDIS_MSI_FILE%')"echo "Redis-x64.msi 下载完成,开始安装...") else (echo "Redis-x64.msi 已存在,开始安装...")msiexec /passive /i %TEMP%\%REDIS_MSI_FILE%echo "Redis-x64.msi 安装完成"set REDIS_HOME=C:\Program Files\Redisset PATH=%PATH%;%REDIS_HOME%echo "拷贝Redis配置文件到C:\Program Files\Redis\redis.windows-service.conf(将覆盖之前的配置)"copy redis.windows-service.conf "C:\Program Files\Redis\redis.windows-service.conf"echo "重启Redis服务"redis-server --service-stopredis-server --service-startecho "Redis安装完成"pause
该脚本为幂等,如遇失败可多次重复运行。
该服务将多个数据源中的数据打包成统一的hdf5格式。
项目地址: http://gitlab.fxdayu.com:8888/xingetouzi/DataSync
在本地打开git命令行,使用以下命令克隆项目代码
1. git clone http://gitlab.fxdayu.com:8888/xingetouzi/DataSync.git
进入工程根目录
使用以下命令切换到guojin分支
1. git fetch2. git checkout guojin
在DataSync目录下打开命令行,输入以下命令
python setup.py install
配置信息以Excel表格形式存放,可根据需求新增表,但必须严格按照原有格式,否则服务会出现错误。
默认配置文件存放位置为:
\DataSync\config.xlsx
Daily_data sheet 存放的是日线配置信息,lb_data sheet存放的是季度数据配置信息,表格示例如下:
| 表名 | (例)dbo.AINDEXEODPRICES |
|---|---|
| origin | 数据源,目前支持SqlServer/Oracle |
| db_config | 数据库信息配置,包括数据库地址, |
| fields | 需要请求的数据字段,若为空则取表内全品种 |
| S_INFO_WINDCODE | 需要请求的证券代码,若为空则取表内全品种 |
| DATE_NAME | 日期索引的字段名 |
| start_date | 默认开始日期,若本地数据为空,则请求以该日期为起始时间的数据 |
| 其它字段 | …… |
1)打开windows任务计划程序
2)创建任务

3)在DataSync项目下找到run_sync.bat文件,在计划任务下设置以日频率执行该脚本。

jaqsmds是部署在本地的数据服务,jaqs客户端可与之交互并请求数据。该文档主要介绍其在win10上的安装及部署方法。
在安装和启动前请先确保:
1. 已按照 大鱼因子开发体系使用手册(部署文档windows版).pdf 安装好相应的依赖软件。
2. 已通过 datasync 同步本地数据。
安装参考 大鱼因子开发体系使用手册(部署文档windows版).pdf (1.2)
安装参考 大鱼因子开发体系使用手册(部署文档windows版).pdf (1.3)
安装参考 大鱼因子开发体系使用手册(部署文档windows版).pdf (1.4)
安装参考 大鱼因子开发体系使用手册(部署文档windows版).pdf (1.5)
安装均通过windows命令行(cmd)完成。安装前请确保 1. 中的依赖软件已全部装好。
为了不破坏其他项目的依赖包,这里创建一个只供该项目使用的虚拟环境。
conda create -n jaqsmds python=3.6 pymssql python-snappy pip=9.0.1 anaconda
activate jaqsmds
pip install git+http://gitlab.fxdayu.com:8888/xingetouzi/jaqsmds.git
在任意位置新建文件夹:jaqsmds (为了方便建议在用户目录或者除C盘外其他盘符的根目录)
在jaqsmds中创建日志文件夹: logs
其中(3.2.3.1 配置文件)定义了数据服务每个接口要用的数据源,文件格式为json。目前已根据国金环境各数据源配置完毕,请勿随意更改配置文件;(3.2.3.2 字段映射表)是一个设定本地的数据服务(server)和数据源的字段映射关系的文件,可以通过配置该表格指定所取数据的字段名。目前服务器上已有一个默认的字段映射关系,当前提供的因子脚本基于该映射关系编写,请勿随意更改已建立的映射关系,否则将因子脚本将不能正常工作。
在jaqsmds目录中创建配置文件 config.json。
下面为配置文件模板:
[{"type": "local","sqlite": {"file": "D:/hdf5_data/data.sqlite","table_map": {"lb.secIndustry": "[lb.secIndustry]","lb.indexWeightRange": "[lb.indexWeightRange]","jz.instrumentInfo": "[jz.instrumentInfo]"}},"hdf": {"index": "/date_flag","column": "/symbol_flag","exclude": ["trade_date", "symbol"],"predefine": true,"views": {"dyfactors": "C:/Users/bigfish01/.fxdayu/data/dyfactors","uqer_factor": "D:/oracle_data/uqer_factor","lb.secDailyIndicator": "D:/hdf5_data/dbo.ASHAREEODDERIVATIVEINDICATOR","daily": "D:/hdf5_data/dbo.ASHAREEODPRICES","lb.secAdjFactor": ["D:/hdf5_data/dbo.ASHAREEODPRICES/S_DQ_ADJFACTOR.hd5"]},"view_map":{"lb.secDailyIndicator": "dbo.ASHAREEODDERIVATIVEINDICATOR","daily": "dbo.ASHAREEODPRICES","lb.secAdjFactor": "dbo.ASHAREEODPRICES"}}},{"type": "mssql","connection_params": [],"predefine": true,"external": true,"exclude": ["dbo.ASHAREEODPRICES", "dbo.ASHAREEODDERIVATIVEINDICATOR"],"db_map": {"jz.secTradeCal": "dbo.ASHARECALENDAR","lb.balanceSheet": "dbo.ASHAREBALANCESHEET","lb.cashFlow": "dbo.ASHARECASHFLOW","lb.finIndicator": "dbo.ASHAREFINANCIALINDICATOR","lb.income": "dbo.ASHAREINCOME","lb.indexCons": "dbo.AINDEXMEMBERS","lb.profitExpress": "dbo.ASHAREPROFITEXPRESS","lb.secDividend": "dbo.ASHAREDIVIDEND","lb.secSusp": "dbo.ASHARETRADINGSUSPENSION","lb.secRestricted": "dbo.ASHARECOMPRESTRICTED"}},{"type": "sqlite","file": "D:/hdf5_data/data.sqlite","table_map": {"zyyx.conForecastStk": "[ZYYX.CON_FORECAST_STK]","zyyx.conRatingStk": "[ZYYX.CON_RATING_STK]"}}]
为解决本地数据库字段名过于复杂,不同表字段不唯一以及与jaqs字段名不匹配的问题,需要一张字段映射表来表示由数据源到服务端的字段映射关系。
在jaqsmds目录下新建Excel文件:name_map.xlsx
文件内容如下图:

在jaqsmds目录下创建启动脚本 service.bat:
@echo offset FRONTEND=tcp://0.0.0.0:23000set BACKEND=tcp://127.0.0.1:23001set FILE=./config.jsonset MAPPER=./name_map.xlsxcall activate jaqsmdscall jaqsmds server
环境变量参数说明
| 变量名 | 默认值 | 含义 |
|---|---|---|
| FRONTEND | tcp://0.0.0.0:23000 | 服务监听的地址,jaqs客户端可以通过该地址从服务请求数据。该地址不可与其他程序共用,如果在一台服务器上启动2个或以上jaqsmds服务需要分别设置不同的FRONTEND。 |
| BACKEND | tcp://127.0.0.1:23001 | 该地址不可与其他程序共用,如果在一台服务器上启动2个或以上jaqsmds服务需要分别设置不同的BACKEND。 |
| FILE | ./config.json | 数据源配置文件 |
| MAPPER | 字段映射表 |
在该目录下双击下service.bat 即可启动服务。服务启动后会弹出命令行窗口输出相关日志,关闭窗口即可关闭服务。
启动服务后可以参照 (3. 测试)进行测试,测试成功再将其注册为windows服务(参考 2.4)
2.3中创建的启动脚本只能单次启动服务,在服务因异常原因退出时无法自动重启服务。使用nssm将其部署为windows服务后可以实现开机启动,自动重启,持续运行等功能。安装完nssm并设置好环境变量后可以在cmd中运行nssm相关的命令。
注意: 运行nssm相关的命令时需要以管理员权限打开cmd
用管理员权限打开cmd。
nssm install jaqsmds
然后会弹出service installer:

按下表中的描述逐个设置参数(这里假设2.3中创建的文件夹为D:/jaqsmds):
| 选项卡 | 参数 | 描述 | 参考值 |
|---|---|---|---|
| Application | Path | 要运行的文件(2.3.2中创建的启动脚本)的绝对路径 | D:/jaqsmds/service.bat |
| Application | Startup directory | 运行时的工作目录(2.3中创建的文件夹) | D:/jaqsmds/ |
| Details | Display name | 在windows服务中显示的名字 | jaqsmds |
| Log on | This account | 使用指定用户运行程序 | 勾选,输入当前登录的用户 |
| Log on | Password | 用户密码 | 当前登录用户的密码 |
| Log on | Confirm | 确认用户密码 | 当前登录用户的密码 |
| Exit actions | Restart | 非人为关闭服务时执行的操作 | Restart application |
| I/O | Output | 标准输出(日志)的文件地址 | D:/jaqsmds/logs/output.log |
| I/O | Error | 标准错误输出(日志)的文件地址 | D:/jaqsmds/logs/output.log |
| File rotation | Rotate files | 是否*翻滚日志文件 | 勾选 |
| File rotation | Rotate while service is running | 服务正在运行时是否*翻滚日志文件 | 勾选 |
| File rotation | Restrict rotaion to files bigger then () bytes | 当前日志文件大于多少字节时*翻滚日志 | 10000000 |
*翻滚日志: 当前日志文件达到某一条件时关闭该文件并打开新的文件做为日志文件。
设置完成后点击窗口下方的 Install service 即完成服务注册。
nssm start jaqsmds
服务启动后会保持一直运行的状态,重启操作系统后服务也会自动启动。
nssm stop jaqsmds
停止当前运行的jaqsmds服务。
nssm remove jaqsmds
在弹出的对话框中选是即可删除服务。
打开windows服务管理器:控制面板->管理工具->服务,找到jaqsmds,双击打开其属性。

这里可以直接控制服务状态,例如:如果不想设为开机启动,可以将启动类型设置为手动或禁用。
服务注册成功后如果不使用命令行,可以通过该窗口启动或停止服务。
服务启动后可以通过测试脚本测试服务是否能够正常运行。
运行如下python脚本(python环境中需安装最新版 jaqs-fxdayu),当最后输出 Test Complete 并结束时说明服务已经在正常运行。
*注意 脚本第16行的 "remote.data.address" 对应的值应为服务启动时FRONTEND设置的值。 (参考 2.3.3)
# encoding: utf-8from __future__ import print_function# import jaqs_fxdayu# jaqs_fxdayu.patch_all()from jaqs_fxdayu.data import RemoteDataServicefrom jaqs_fxdayu.data import DataViewimport os# from config_path import DATA_CONFIG_PATHdaily_path = '../output/tests/test_dataview_d'quarterly_path = '../output/tests/test_dataview_q'data_config = data_config = {"remote.data.address": "tcp://127.0.0.1:23000","remote.data.username": "username","remote.data.password": "password",}def test_write():ds = RemoteDataService()ds.init_from_config(data_config)dv = DataView()secs = '600030.SH,000063.SZ,000001.SZ'props = {'start_date': 20160601, 'end_date': 20170601, 'symbol': secs,'fields': 'open,close,high,low,volume,pb,net_assets,pcf_ncf','freq': 1}dv.init_from_config(props, data_api=ds)dv.prepare_data()assert dv.data_d.shape == (281, 48)assert dv.dates.shape == (281, )# TODO"""PerformanceWarning:your performance may suffer as PyTables will pickle object types that it cannotmap directly to c-types [inferred_type->mixed,key->block1_values] [items->[('000001.SZ', 'int_income'), ('000001.SZ', 'less_handling_chrg_comm_exp'), ('000001.SZ', 'net_int_income'), ('000001.SZ', 'oper_exp'), ('000001.SZ', 'symbol'), ('000063.SZ', 'int_income'), ('000063.SZ', 'less_handling_chrg_comm_exp'), ('000063.SZ', 'net_int_income'), ('000063.SZ', 'oper_exp'), ('000063.SZ', 'symbol'), ('600030.SH', 'int_income'), ('600030.SH', 'less_handling_chrg_comm_exp'), ('600030.SH', 'net_int_income'), ('600030.SH', 'oper_exp'), ('600030.SH', 'symbol')]]"""dv.save_dataview(folder_path=daily_path)def test_load():dv = DataView()dv.load_dataview(folder_path=daily_path)assert dv.start_date == 20160601 and set(dv.symbol) == set('000001.SZ,600030.SH,000063.SZ'.split(','))# test get_snapshotsnap1 = dv.get_snapshot(20170504, symbol='600030.SH,000063.SZ', fields='close,pb')assert snap1.shape == (2, 2)assert set(snap1.columns.values) == {'close', 'pb'}assert set(snap1.index.values) == {'600030.SH', '000063.SZ'}# test get_tsts1 = dv.get_ts('close', symbol='600030.SH,000063.SZ', start_date=20170101, end_date=20170302)assert ts1.shape == (38, 2)assert set(ts1.columns.values) == {'600030.SH', '000063.SZ'}assert ts1.index.values[-1] == 20170302def test_add_field():dv = DataView()dv.load_dataview(folder_path=daily_path)nrows, ncols = dv.data_d.shapen_securities = len(dv.data_d.columns.levels[0])ds = RemoteDataService()ds.init_from_config(data_config)dv.add_field('total_share', ds)assert dv.data_d.shape == (nrows, ncols + 1 * n_securities)def test_add_formula_directly():ds = RemoteDataService()ds.init_from_config(data_config)dv = DataView()secs = '600030.SH,000063.SZ,000001.SZ'props = {'start_date': 20160601, 'end_date': 20170601, 'symbol': secs,'fields': 'open,close','freq': 1}dv.init_from_config(props, data_api=ds)dv.prepare_data()dv.add_formula("myfactor", 'close / open', is_quarterly=False)assert dv.data_d.shape == (281, 36)def test_add_formula():dv = DataView()dv.load_dataview(folder_path=daily_path)nrows, ncols = dv.data_d.shapen_securities = len(dv.data_d.columns.levels[0])formula = 'Delta(high - close, 1)'dv.add_formula('myvar1', formula, is_quarterly=False, add_data=True)assert dv.data_d.shape == (nrows, ncols + 1 * n_securities)formula2 = 'myvar1 - close'dv.add_formula('myvar2', formula2, is_quarterly=False, add_data=True)assert dv.data_d.shape == (nrows, ncols + 2 * n_securities)def test_dataview_universe():ds = RemoteDataService()ds.init_from_config(data_config)dv = DataView()props = {'start_date': 20170227, 'end_date': 20170327, 'universe': '000016.SH',# 'symbol': 'rb1710.SHF,rb1801.SHF','fields': ('open,high,low,close,vwap,volume,turnover,'+ 'sw1,'+ 'roe,net_assets,'+ 'total_oper_rev,oper_exp,tot_profit,int_income'),'freq': 1}dv.init_from_config(props, ds)dv.prepare_data()data_bench = dv.data_benchmark.copy()dv.data_benchmark = data_benchtry:dv.data_benchmark = data_bench.iloc[3:]except ValueError:passdv.remove_field('roe,net_assets')dv.remove_field('close')# quarterlydef test_q():ds = RemoteDataService()ds.init_from_config(data_config)dv = DataView()secs = '600030.SH,000063.SZ,000001.SZ'props = {'start_date': 20160609, 'end_date': 20170601, 'symbol': secs,'fields': ('open,close,'+ 'pb,net_assets,'+ 'total_oper_rev,oper_exp,'+ 'cash_paid_invest,'+ 'capital_stk,'+ 'roe'), 'freq': 1}dv.init_from_config(props, data_api=ds)dv.prepare_data()dv.save_dataview(folder_path=quarterly_path)def test_q_get():dv = DataView()dv.load_dataview(folder_path=quarterly_path)res = dv.get("", 0, 0, 'total_oper_rev')assert set(res.index.values) == set(dv.dates[dv.dates >= dv.start_date])def test_q_add_field():dv = DataView()dv.load_dataview(folder_path=quarterly_path)nrows, ncols = dv.data_q.shapen_securities = len(dv.data_d.columns.levels[0])ds = RemoteDataService()ds.init_from_config(data_config)dv.add_field("debttoassets", ds)assert dv.data_q.shape == (nrows, ncols + 1 * n_securities)def test_q_add_formula():dv = DataView()folder_path = '../output/prepared/20160609_20170601_freq=1D'dv.load_dataview(folder_path=quarterly_path)nrows, ncols = dv.data_d.shapen_securities = len(dv.data_d.columns.levels[0])formula = 'total_oper_rev / close'dv.add_formula('myvar1', formula, is_quarterly=False, add_data=True)df1 = dv.get_ts('myvar1')assert not df1.emptyformula2 = 'Delta(oper_exp * myvar1 - open, 3)'dv.add_formula('myvar2', formula2, is_quarterly=False, add_data=True)df2 = dv.get_ts('myvar2')assert not df2.emptyif __name__ == "__main__":g = globals()g = {k: v for k, v in g.items() if k.startswith('test_') and callable(v)}# for test_name, test_func in g.items():for test_name in ['test_write', 'test_load', 'test_add_field', 'test_add_formula_directly','test_add_formula', 'test_dataview_universe','test_q', 'test_q_get', 'test_q_add_field', 'test_q_add_formula',]:test_func = g[test_name]print("\n==========\nTesting {:s}...".format(test_name))test_func()print("Test Complete.")
项目地址: http://gitlab.fxdayu.com:8888/xingetouzi/factor-api-server.git
运行以下命令克隆项目代码
git clone http://gitlab.fxdayu.com:8888/xingetouzi/factor-api-server.git
进入代码根目录下,运行:
install-service.bat
屏幕会有以下输出:
Begin to install the factor calculation service as windows services.=======================================================================Do you want to set the parallel number?(Y/N)nSkip set the parallel number,the default value equals to the cpu number of this computer.=======================================================================Use custom window account to run service?(Y/N)yUse custom window account to run service.Enter windows account username: ***Enter windows account password: ***
其中出现两个选项:
- 第一个选项询问是否设置计算并行数,默认为cpu数,目前生产服务器该值设置为3。
- 第二个选项大部分情况是必填项,需要输入运行windows服务的windows用户账户名和密码。
填好这些选项后,安装脚本会自动安装所依赖的python包,然后将各启动脚本安装成windows服务,该脚本可以多次运行,所安装服务的相关配置以最后一次运行为准。
因子计算服务组件的配置基本上通过环境变量来设置,在使用nssm将.bat脚本安装为windows服务时可以为每个服务单独指定环境变量,也可以直接设置修改系统的环境变量来进行统一的设置。
主要需要配置的环境变量和默认值如下:
FACTOR_CONDA_ENV=base #表示运行因子计算服务的conda虚拟python环境名CELERY_BROKER=amqp://guest:guest@localhost:5672 #指向rabbitmq的服务端口CELERY_=
fc-updater服务负责每日在计算开始前预读取常用数据到计算节点本地。
nssm install fc-updater
start-updater.batfc-flower是提供celery服务监控和转接http协议的功能
nssm install fc-flower
start-flower.bat0.0.0.0:5555celery-worker,转发给fc-manager进行计算。
nssm install fc-worker
start-worker.batfc-worker转发的任务,真正负责因子计算的组件。
nssm install fc-manager
start-manager.batcelery-worker
nssm install fc-oracle
start-oracle.batcelery-worker
nssm install fc-stores
start-stores.batdyupdater服务每日检查因子值记录的完整性,并根据找到的缺失发布相关因子计算任务,得到结果后再进行入库。
下载地址: https://github.com/xingetouzi/dyupdater/releases/download/v1.0/dyupdater.exe
配置文件示例:(详细配置请查看使用手册生产模块部分)
base:cal-start-date: 20140101celery:default:host: localhost:5555broker: amqp://guest:guest@localhostbackend: redis://localhostqueues:- factor- stores- oraclesources:uqer:type: filesystempath: ./factor-scripts/uqer复现合格# regex: (C010021A)guojin:type: filesystempath: ./factor-scripts/国金专用因子calculators:default:type: celerycelery: defaultstores:# default:# type: mongo# url: mongodb://192.168.0.102,192.168.0.101# local:# type: csv# path: ./factorshdf5:type: hdf5celery: defaultoracle0:type: oraclecelery: defaulturl: FXDAYU/FXDAYU@localhost:1521/EE.oracle.dockerindexer:type: windserver: XXX.XXX.XXX.XXXdb: NWindDBuid: bigfishpwd: bigfishmapper:type: csvstores: oracle0file: ./mapping.csvcron:enabled: truetasks:# This cron means to check factor data in the last week every 120 minutes during 01:00 ~ 09:00 at every workday.# You can test a cron rule at https://crontab.gurueveryday:# At every 120th minute past every hour from 1 through 9 on every day-of-week from Monday through Friday.rule: "0 */120 1-8 * * 1-6"# start time from now , in seconds, 604800 = 7*24*60*60 = 7days.start: 20140101# This cron means to check all factor data from 20100101 every 8 hour at every weekends.everyweekends:# past every 8th hour on Sunday.rule: "0 0 */8 * * 0"# start time in format "20060102"start: 20140101
其中与服务部署方式相关的配置选项主要是以下,根据实际部署情况填写,一般单机部署使用以下值即可:
...celery:default:host: localhost:5555 # 指向fc-flower服务端口broker: amqp://guest:guest@localhost # zhi'xian指向rabbitmq地址backend: redis://localhost # 指向redis地址queues:- factor- stores- oracle...
fc-updater日志中提示预读取数据完成后。在有管理员权限的cmd命令行中运行
nssm install dyupdater
dyupdater.exerun --check (web界面只可在本机访问) 或 run --check -H 0.0.0.0 (web界面可通过局域网访问)