策略配置文件
使用不同引擎的策略需要的策略配置文件不同,回测与仿真/实盘也有所区别,可以在对应的demo中,获取对应的配置文件信息
策略配置文件可以采用yaml格式或者json格式,由于json格式无法添加注释,因此现在已经逐渐替换为yaml格式了
Tip
策略配置文件一般与策略可执行程序或run.py位于同级目录中
configbt.yaml
策略回测的相关配置,包括以下部分
replayer: # 数据回放设置
basefiles: # 各个基础配置文件所在目录
commodity: ../common/commodities.json
contract: ../common/contracts.json
holiday: ../common/holidays.json
hot: ../common/hots.json
second: ../common/seconds.json
session: ../common/sessions.json
fees: ../common/fees.json
stime: 202101040900 # 回测开始时间
etime: 202101061500 # 回测结束时间
mode: csv # 数据回放模式,包括csv与bin
# 不管是何种模式,首先回去his目录下查找
# 如果his没有的话,csv模式会去csv模式下查找对应的csv文件,
# 并转换为his目录下的dsb文件。
path: ../storage/ # 数据存放路径
tick: true # 是否开启tick回测,HFT回测时必须开启
env:
mocker: cta # 回测引擎,cta/hft/sel/uft
slippage: 1 # 滑点,仅cta sel引擎的滑点有效
# CTA策略配置,当mocker为cta时会读取该配置项
cta:
module: WtCtaStraFact.dll # 模块名,linux下为xxxx.so
strategy: # 策略信息
id: dt_if # 策略ID,自定义的
name: DualThrust # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供,不要被示例中所限制
code: CFFEX.IF.HOT
count: 50
days: 30
k1: 0.6
k2: 0.6
period: m5
stock: false
# HFT策略配置,当mocker为hft时会读取该配置项
hft:
module: WtHftStraFact.dll # 模块名,linux下为xxxx.so
use_newpx: true # hft与uft中特有的选项,是否仅用最新价撮合,为false则会采用盘口撮合
agent: true # 允许hft想cta一样记录成交信息
strategy: # 策略信息
id: hft_if # 策略ID,自定义的
name: SimpleHft # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供
code: CFFEX.IF.HOT
second: 5
freq: 10
offset: 0
stock: false
# UFT策略配置,当mocker为uft时会读取该配置项
uft:
module: WtUftStraFact.dll # 模块名,linux下为xxxx.so
use_newpx: true # hft与uft中特有的选项,是否仅用最新价撮合,为false则会采用盘口撮合
strategy: # 策略信息
id: uft_if # 策略ID,自定义的
name: SimpleUft # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供
code: CFFEX.IF.HOT
second: 5
freq: 10
offset: 0
lots: 1
config.yaml
实盘相关的配置
replayer: # 数据回放设置
basefiles: # 各个基础配置文件所在目录
commodity: ../common/commodities.json
contract: ../common/contracts.json
holiday: ../common/holidays.json
hot: ../common/hots.json
second: ../common/seconds.json
session: ../common/sessions.json
bspolicy: actpolicy.yaml # 执行配置文件名
data:
store:
path: ../storage/ # 数据存放目录
his_path: ./storage/his # 历史数据存放路径,如果历史数据单独存放,可以设置该选项
env:
fees: \\WIN-52AMQLH0TIA\WonderTrader\common\fees.json
filters: filters.json
mode: product # 模式
name: hft
product:
session: TRADING # 交易时段,TRADING能够覆盖国内主要的交易时段
mocker: cta # 回测引擎,cta/hft/sel/uft
slippage: 1 # 滑点,仅cta sel引擎的滑点有效
# CTA策略配置,当mocker为cta时会读取该配置项
cta:
module: WtCtaStraFact.dll # 模块名,linux下为xxxx.so
strategy: # 策略信息
id: dt_if # 策略ID,自定义的
name: DualThrust # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供,不要被示例中所限制
code: CFFEX.IF.HOT
count: 50
days: 30
k1: 0.6
k2: 0.6
period: m5
stock: false
# HFT策略配置,当mocker为hft时会读取该配置项
hft:
module: WtHftStraFact.dll # 模块名,linux下为xxxx.so
use_newpx: true # hft与uft中特有的选项,是否仅用最新价撮合,为false则会采用盘口撮合
strategy: # 策略信息
id: hft_if # 策略ID,自定义的
name: SimpleHft # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供
code: CFFEX.IF.HOT
second: 5
freq: 10
offset: 0
stock: false
# UFT策略配置,当mocker为uft时会读取该配置项
uft:
module: WtUftStraFact.dll # 模块名,linux下为xxxx.so
use_newpx: true # hft与uft中特有的选项,是否仅用最新价撮合,为false则会采用盘口撮合
strategy: # 策略信息
id: uft_if # 策略ID,自定义的
name: SimpleUft # 策略名,要和factory中的匹配
params: # 策略初始化参数,这个根据策略的需要提供
code: CFFEX.IF.HOT
second: 5
freq: 10
offset: 0
lots: 1
actpolicy.yaml
WT的一个重要优势,就是净持仓交易,对于期货这种交易流程较为复杂的品种来说尤其方便。策略将生成多或空信号后,交给执行器转换为实际的开平指令,发给交易所。而开平指令的生成就是根据actpolicy.yaml文件中一个个执行策略产生的。
actpolicy配置包含多个执行策略
stockindex: # 执行策略名,自定义,但要求同一个actpolicy中不重复
filters: # 适用该执行策略的品种
- CFFEX.IF
- CFFEX.IC
- CFFEX.IH
order: # 订单顺序
# 比如股指因为监管的原因,日内手续费很高,所以顺序为:平昨->开仓->平今
- action: closeyestoday # 平昨
limit: 0 # 当日开仓次数限制,为0表示没有限制,达到限制后跳过该步骤
pure: True # 是否检查净值仓,
# 主要针对平昨和平今,如果为true,则只有持仓全部为昨仓或今仓,才
# 也就是说,如果当天有开新仓的话,则不再平昨,转为下一个执行动作。
- action: open # 开仓
limit: 500 # 如果当天开仓超过500次,则跳过该动作,转为下一个
- action: closetoday # 平今
limit: 0
pure: false
Tip
如果使用的品种不支持平今平昨,wt内部会自动转为普通的平仓
executers.yaml
执行器,主要用于cta引擎,通过配置执行器,将信号的执行细节从策略中剥离出来,同时可以将同一个策略的信号,分发到多个交易通道(账户)中,实现多账户。
#一个组合可以配置多个执行器,所以executers是一个list
executers:
- active: false # 是否启用
id: exec # 执行器id,不可重复
trader: simnow # 执行器绑定的交易通道id,如果不存在,无法执行
scale: 1 # 数量放大倍数,即该执行器的目标仓位,是组合理论目标仓位的多少倍,可以为小数
policy: # 执行单元分配策略,系统根据该策略创建对一个的执行单元
default: # 默认策略,根据品种ID设置,如SHFE.rb,如果没有针对品种设置,则使用默认策略
name: WtExeFact.WtMinImpactExeUnit #执行单元名称
offset: 0 # 委托价偏移跳数
expire: 5 # 订单超时没秒数
pricemode: 1 # 基础价格模式,-1-己方最优,0-最新价,1-对手价
span: 500 # 下单时间间隔(tick驱动的)
byrate: false # 是否按对手盘挂单量的比例挂单,配合rate使用
lots: 1 # 固定数量
rate: 0 # 挂单比例,配合byrate使用
clear: # 过期主力自动清理配置
active: false # 是否启用
excludes: # 排除列表
- CFFEX.IF
- CFFEX.IC
includes: # 包含列表
- SHFE.rb
filters.yaml
当盘中或策略出现突发情况时,有时需要针对某个策略,甚至品种进行人工干预,这就需要暂时过滤掉这个品种或者策略的信号,这一功能是由filters.yaml实现的。
code_filters: # 品种过滤
CFFEX.IF0: # 过滤的品种代码
action: ignore # 过滤标志
target: 0
strategy_filters:
Q3LS00_if0:
action: ignore
target: 0
logcfg.yaml
logcfg.yaml中规定了各类日志的输出格式以及目录,包括以下几类日志
- executer 执行器日志
- parser 行情服务日志
- trader 交易服务日志
- strategy 策略日志
- risk 风控日志
- root 根日志
每个日志配置需包括是否异步、日志等级、槽设置。槽设置包括日志保存路径、格式、是否截断保存、日志类型等
dyn_pattern:
executer:
async: false
level: debug
sinks:
- filename: Logs/Executer/%s.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
parser:
async: false
level: debug
sinks:
- filename: Logs/Parser/%s.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
strategy:
async: false
level: debug
sinks:
- filename: Logs/Strategy/%s.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
trader:
async: false
level: debug
sinks:
- filename: Logs/Trader/%s.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
risk:
async: false
level: debug
sinks:
- filename: Logs/Riskmon/Riskmon.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
root:
async: false
level: debug
sinks:
- filename: Logs/Runner.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: daily_file_sink
- pattern: '[%m.%d %H:%M:%S - %-5l] %v'
type: ostream_sink
logcfgbt.yaml
与logcfg.yaml同样是配置日志文件,区别在于logcfgbt.yaml用于回测日志的输出
dyn_pattern:
strategy:
async: false
level: debug
sinks:
- filename: BtLogs/Strategy_%s.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: false
type: basic_file_sink
root:
async: false
level: debug
sinks:
- filename: BtLogs/Runner.log
pattern: '[%Y.%m.%d %H:%M:%S - %-5l] %v'
truncate: true
type: basic_file_sink
- pattern: '[%m.%d %H:%M:%S - %^%-5l%$] %v'
type: console_sink
tdparsers.yaml
tdparsers.yaml用于配置行情服务,通常可以向自己所用的券商申请,或者通过simnow注册获取
parsers:
- active: true
bport: 9001
filter: ''
host: 127.0.0.1
id: parser1
module: ParserUDP
sport: 3997
tdtraders.yaml
tdtraders.yaml用于配置交易服务,与tdparsers一样,通过券商或者simnow获取
traders:
- active: true
front: mocker://localhost
id: mocker
maxqty: 100
minqty: 1
mockerid: 9999
module: TraderMocker
newpx: true # 是否采用最新价撮合
savedata: true # 是否落地交易数据,即会在generated中落地成交情况等信息,有开销,自行决定是否开启
span: 100
udp_port: 9001
user: mocker9999