Files
playbook/skills/tsl-api-reference/references/codegen/module/ts-backtesting.md
T
2026-08-14 17:15:41 +08:00

59 KiB

回测 / 策略回测

TSBackTesting

声明:class

执行策略历史回测,并查询资产、持仓、交易、收益与绩效结果

fBegT

声明:field

回测开始时间 从当前系统时间往前推 1 年

可见性:public

类型:date_time

fEndT

声明:field

回测截止时间 当前系统时间

可见性:public

类型:date_time

fCycle

声明:field

调仓周期 月线

可见性:public

类型:string

fGroupType

声明:field

组合类型 1:比例类组合

可见性:public

类型:integer

fIndexId

声明:field

基准代码 SH000300

可见性:public

类型:string

fIniCash

声明:field

初始资金 100,000,000 元

可见性:public

类型:real

fAccountingCycle

声明:field

清算周期 1:沪深交易日序列

可见性:public

类型:integer

fPriceType

声明:field

成交价类别 3:日均价

可见性:public

类型:integer

fFeeType

声明:field

费用类别 1:费率法

可见性:public

类型:integer

fRateType

声明:field

比例类组合资金分配方式 4:等权重

可见性:public

类型:integer

fIndustryMethod

声明:field

是否进行行业中性处理 0:不进行行业中性处理

可见性:public

类型:integer

fIndustryType

声明:field

行业分类 1:申万一级行业

可见性:public

类型:integer

fSumOfRate

声明:field

证券配比之和 100

可见性:public

类型:numeric

fFeeType2

声明:field

比例类费率 1: 历史明细中查找开、 平仓费率

可见性:public

类型:integer

fPriceRateTo0

声明:field

比例类成交价 3:日均价

可见性:public

类型:integer

fDividendType

声明:field

是否分红再投资 0:分红不再投资

可见性:public

类型:integer

fDividendToAccount

声明:field

股票分红到账日类型 1:除权除息日

可见性:public

类型:integer

fDividendType2

声明:field

货币基金自动分红再投资 1:分红再投资

可见性:public

类型:integer

fAllotmentType

声明:field

是否参与配股 0:不自动参与配股

可见性:public

类型:integer

fglType

声明:field

止盈止损类型 -1:不考虑止盈止损

可见性:public

类型:integer

fMaxGainRatio

声明:field

止盈率(%) 10^8

可见性:public

类型:integer

fMaxLossRatio

声明:field

止损率(%) -100

可见性:public

类型:integer

fMaxGainCondition

声明:field

止盈基准价表达式 CBJ:成本价

可见性:public

类型:string

fMaxLossCondition

声明:field

止损基准价表达式 CBJ:成本价

可见性:public

类型:string

fLowestFeeType

声明:field

最低费用限制类别 0:不考虑最低费用限制

可见性:public

类型:integer

fLowestFee

声明:field

最低费用 5.0

可见性:public

类型:real

foLowestFee

声明:field

开仓最低费用 5.0

可见性:public

类型:real

fcLowestFee

声明:field

平仓最低费用 5.0

可见性:public

类型:real

famType

声明:field

盘中是否追加资金 0:盘中不追加资金

可见性:public

类型:integer

famType2

声明:field

盘后是否追加资金 0:盘后不追加资金

可见性:public

类型:integer

fTradeOfDelist

声明:field

到期自动平仓 1:到期自动平仓

可见性:public

类型:integer

fbmType

声明:field

基准类型 0:单个基准

可见性:public

类型:integer

fbmDetail

声明:field

复合基准成分详情 Array()

可见性:public

类型:array

fbmOption

声明:field

累计收益率计算方法 0:累乘

可见性:public

类型:integer

fWithdrawableRatio

声明:field

衍生品可提资金比例(%) 100

可见性:public

类型:real

fTradeOption

声明:field

非交易日是否可以交易 0:可交易

可见性:public

类型:integer

fNoZT

声明:field

涨停是否买入 0:涨停可买入

可见性:public

类型:integer

fNoDT

声明:field

跌停是否卖出 0:跌停可卖出

可见性:public

类型:integer

fMinAmount

声明:field

最小成交金额 -1:不考虑最小成交金额

可见性:public

类型:real

fMaxAmountPercent

声明:field

最大成交金额占比(%) -1:不考虑最大成交金额占比

可见性:public

类型:real

fMinBuyCash

声明:field

最小买入金额 -1:不考虑最小买入金额

可见性:public

类型:real

fMinSellCash

声明:field

最小卖出金额 -1:不考虑最小卖出金额

可见性:public

类型:real

fMinBuyRatio

声明:field

最小买入占比(%) -1:不考虑最小买入占比

可见性:public

类型:real

fMinSellRatio

声明:field

最小卖出占比(%) -1:不考虑最小卖出占比

可见性:public

类型:real

fNoOverSold

声明:field

是否允许超卖 0:允许超卖

可见性:public

类型:integer

fPartialjy

声明:field

超卖时是否可以部分成交 0:超卖时可以部分成交

可见性:public

类型:integer

fSettlCurrency

声明:field

结算币种 CNY

可见性:public

类型:string

fExchangeRateType

声明:field

清算汇率类型 2:对应市场结算汇率中间价

可见性:public

类型:integer

fjyExchangeRatetype

声明:field

交易汇率类型 2:对应市场买、结算汇率

可见性:public

类型:integer

ffhExchangeRatetype

声明:field

分红汇率类型 2:对应市场结算汇率中间价

可见性:public

类型:integer

fDealAssetInDebt

声明:field

是否自动处理负债 0:不处理

可见性:public

类型:integer

fPortfolioStartDate

声明:field

组合开始时间 FBegT

可见性:public

类型:date_time

fManagementFee

声明:field

管理费率(%) 0

可见性:public

类型:real

fCustodyFee

声明:field

托管费率(%) 0

可见性:public

类型:real

fManagementFeePayCycle

声明:field

管理费支付周期 月线

可见性:public

类型:string

fCustodyFeePayCycle

声明:field

托管费支付周期 月线

可见性:public

类型:string

fPortfolioFee

声明:field

港股通证券组合费清算 0:不清算

可见性:public

类型:integer

backTest()

声明:function

执行策略回测主流程,循环调仓时点、生成交易数据并完成清算

可见性:public

返回:array

getTimeSeries()

声明:function

获取调仓周期时间序列;可按策略需要重写

可见性:public

返回:array

示例

范例01:调用基类实现

obj := createObject("TSBackTesting");
obj.FBegT := intToDate(20130101);
obj.FEndT := intToDate(20130108);
obj.FCycle := cy_day();
ret := obj.GetTimeSeries();
echo toStn(ret);
return ret;
// 输出:array(41278.0,41281.0,41282.0)

getTradeOrder(v_end_t)

声明:function

获取当前时点的目标持仓或成交明细;策略子类必须重写

可见性:public

参数 类型 说明
v_end_t date_time 日期,当前时点

返回:array

getTA(v_end_t)

声明:function

获取指定交易日的申购赎回与资金进出数据;可重写

可见性:public

参数 类型 说明
v_end_t date_time 日期,当前时点

返回:array

getSurplusFund()

声明:function

获取当前交易发生前的组合剩余可用资金

可见性:public

返回:float

getNetAssetValue()

声明:function

获取当前交易发生前的组合资产净值

可见性:public

返回:float

getAssetData()

声明:function

获取组合资产净值、分类资产市值及其占净值比例

可见性:public

返回:array

getHoldData()

声明:function

获取当前或指定区间的组合持仓明细

可见性:public

返回:array

getSellpool()

声明:function

获取当前可卖证券及可卖数量

可见性:public

返回:array

stockFee(stock_id, v_end_t, actionid, position)

声明:function

当用户没有给交易费率时,回测框架可通过该接口获取默认的交易费率。默认情况下,该接

可见性:public

参数 类型 说明
stock_id string 证券代码
v_end_t datetime 截止日
actionid integer 动作
position integer 方向

返回:real

calcashByTradeData(tjy)

声明:function

根据用户给出的指定日的交易数据,回测框架会自动根据指定日的前一交易日的持仓、当前

可见性:public

参数 类型 说明
tjy array 交易数据;

返回:array

getPercent(t, v_end_t)

声明:function

获取目标持仓比例数据

可见性:public

参数 类型 说明
t array 目标持仓,二维数组
v_end_t datetime 日期,当前时点

getAssetJZValue()

声明:function

获取当前组合单位净值

可见性:public

返回:float

returnBenchmark(v_beg_t, v_end_t, t)

声明:function

获取指定区间的基准收益率序列;可重写

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日
t array 组合净值收益率序列

返回:array

getOtherData(v_end_t)

声明:function

获取分红送股、配股等公司行动数据;可重写

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getClearancePrice(t, v_end_t, ptype)

声明:function

获取清仓证券的成交价格;可重写

可见性:public

参数 类型 说明
t array 策略生成的持仓、交易或收益数据
v_end_t datetime 当前计算日期或查询区间的结束日期
ptype integer 价格类型或价格选择模式

返回:real

getIntVol(stype, actionid, mod_type, v_jysl)

声明:function

按证券类别、交易动作和取整模式计算成交量

可见性:public

参数 类型 说明
stype integer 证券类别,整数
actionid integer 证券交易动作,整数
mod_type integer 成交量取整模式 实际值 含义 备注 0 成交量不取整 -1 成交量自适应取整 根据证券类型的不同,采取不同的取整模式
v_jysl real 证券交易数量,实数

返回:real

getAccountDateArr()

声明:function

获取清算日期时间序列;可按账户市场重写

可见性:public

返回:array

getLastAccountDay(end_t)

声明:function

获取当前清算日的上一清算日;可重写

可见性:public

参数 类型 说明
end_t datetime 查询区间的结束日期或当前计算日期

返回:array

getManageFeeTimeSeries()

声明:function

获取管理费支付日期序列;可重写

可见性:public

返回:array

getCustodyFeeTimeSeries()

声明:function

获取托管费支付日期序列;可重写

可见性:public

返回:array

getRZRQInterestRate(v_end_t)

声明:function

获取指定日融资利率和融券利率;可重写

可见性:public

参数 类型 说明
v_end_t datetime 当前计算日期或查询区间的结束日期

返回:array

getAssetData(v_end_t)

声明:function

获取组合资产净值、分类资产市值及其占净值比例

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getAssetData(v_beg_t, v_end_t)

声明:function

获取组合资产净值、分类资产市值及其占净值比例

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getHoldData(v_end_t)

声明:function

获取当前或指定区间的组合持仓明细

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getHoldData(v_beg_t, v_end_t)

声明:function

获取当前或指定区间的组合持仓明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getDelTradeData(v_beg_t, v_end_t)

声明:function

获取回测中被剔除或未执行的交易明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getSectorAllocation(v_end_t)

声明:function

获取指定日股票类资产按行业汇总的市值配置

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getGainandLoss(v_beg_t, v_end_t)

声明:function

获取区间组合及分类资产的每日和累计盈亏

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getTradingAmount(v_beg_t, v_end_t)

声明:function

获取区间买入、卖出、分红及净买卖金额序列

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getGainandLossBySecurity(v_beg_t, v_end_t)

声明:function

按证券汇总指定区间的盈亏

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getTradingAmountBySecurity(v_beg_t, v_end_t)

声明:function

按证券汇总指定区间的交易金额

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getPortfolioReturn()

声明:function

获取最新或指定区间的组合收益率

可见性:public

返回:float

getPortfolioReturn(v_beg_t, v_end_t)

声明:function

获取最新或指定区间的组合收益率

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:float

getPortfolioAccumulativeReturn()

声明:function

获取组合成立以来累计收益率

可见性:public

返回:float

getPortfolioReturn2(v_beg_t, v_end_t)

声明:function

获取区间组合与基准的每日收益率序列

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getTrailingReturn(v_end_t)

声明:function

获取组合阶段收益

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getRollingReturn(v_beg_t, v_end_t, cy)

声明:function

获取组合区间滚动收益率序列

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日
cy string 分割周期

返回:array

getReturnandRisk(v_beg_t, v_end_t)

声明:function

获取指定区间的组合收益风险指标

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getRelativePerformance(v_beg_t, v_end_t)

声明:function

获取指定区间的相对业绩指标

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getJyByPercent(pf_info_data, t_percent)

声明:function

根据上一期调整后持仓与当期目标比例计算交易指令

可见性:public

参数 类型 说明
pf_info_data array 组合基本信息,二维数组,可通过 GetPfInfoData()方法获取;
t_percent array T 日目标持仓,二维数组,同 GetTradeOrder 返回的比例类组合的结果

返回:array

getOptionGroupData()

声明:function

获取期权组合策略持仓数据

可见性:public

返回:array

getOptionGroupData(v_end_t)

声明:function

获取期权组合策略持仓数据

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getOptionGroupData(v_beg_t, v_end_t)

声明:function

获取期权组合策略持仓数据

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getTradeData(v_beg_t, v_end_t)

声明:function

获取指定区间的交易明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getTA(v_beg_t, v_end_t)

声明:function

获取指定交易日的申购赎回与资金进出数据;可重写

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getPortfolioPercent(v_beg_t, v_end_t)

声明:function

获取指定区间的组合配比方案

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getAssetJZData(v_end_t)

声明:function

获取指定日单位净值

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:float

getAssetJZData(v_beg_t, v_end_t)

声明:function

获取区间单位净值数据

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getStockBuyandHoldReturn(v_beg_t, v_end_t)

声明:function

获取区间买入持有收益及交易贡献

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getIRRReturn(v_beg_t, v_end_t, v_annual)

声明:function

获取考虑现金流的组合内部收益率

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日
v_annual boolean 收益率是否年化

返回:float

getInDebtandAssetTradeData(v_beg_t, v_end_t)

声明:function

获取负债与资产相关的交易明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getInDebtandAssetHold()

声明:function

获取负债与资产相关的持仓明细

可见性:public

返回:array

getInDebtandAssetHold(v_end_t)

声明:function

获取负债与资产相关的持仓明细

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getInDebtandAssetHold(v_beg_t, v_end_t)

声明:function

获取负债与资产相关的持仓明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

getBalanceHoldData()

声明:function

获取融资融券余额与持仓明细

可见性:public

返回:array

getBalanceHoldData(v_end_t)

声明:function

获取融资融券余额与持仓明细

可见性:public

参数 类型 说明
v_end_t datetime 截止日

返回:array

getBalanceHoldData(v_beg_t, v_end_t)

声明:function

获取融资融券余额与持仓明细

可见性:public

参数 类型 说明
v_beg_t datetime 开始日
v_end_t datetime 截止日

返回:array

示例

范例01:调用示例

//新建子类继承基类
Type MyBackTesting=class(TSBackTesting)
public
   function GetTimeSeries();override;





   function GetTradeOrder(vEndT);override;
end;
 //重写GetTimeSeries 方法
function MyBackTesting.GetTimeSeries();override;
begin
 //具体代码省略
end;
 //重写GetTradeOrder 方法
function MyBackTesting.GetTradeOrder(vEndT);override;
begin
 //具体代码省略
end;

范例02:调用示例

Function MyBackTesting(BegT,EndT,MyPortfolioArr);
Begin
  //创建对象
   obj := CreateObject('MyBackTesting');
   //初始化实例,给变量赋值(其他变量可参考成员变量介绍)
   obj.FBegT := BegT;
   obj.FEndT := EndT;
      //回测:调用对象obj 的backtest 方法
   obj.BackTest();
    //通过调用类提供的查询方法得到回测结果
// // //此处返回结果集的大小取决于用户选择的方法的多少
   return
 array(
"资产配置":obj.GetAssetData(BegT,EndT),
"组合盈亏":obj.GetGainandLoss(BegT,EndT),
'区间组合收益率':obj.GetPortfolioReturn(BegT,EndT)
        );





End;

范例03:调用示例

function MyBackTesting.GetTradeOrder(vEndT);override;
begin
 //返回当前最新持仓,此时为vEndT 时点交易发生前的最新持仓
 GetHoldData();
 //返回结果为空,因为vEndT 时点的交易还未发生,系统还未生成vEndT 时点的持仓
 GetHoldData(vEndT);
 //返回上一个交易日的持仓数据。如果上一个交易日持仓不为空,则和GetHoldData()返回
// // 结果相同,如果上一个交易日持仓为空,则此处返回空数组
 GetHoldData(MarketLastTradeDay(vEndT));
 //返回从回测开始到vEndT 交易发生前所有的持仓
 GetHoldData(FBegT,vEndT);
 //返回最近5 个交易日的持仓数据
 GetHoldData(spec(StockEndTPrevNDay(vEndT,5),'SH000001'),vEndT);
end;

范例04:调用示例

Function
TSFL_TSBackTesting_File(EndT,MyPortfolioArr,IndexId,IniCash,PriceType,VolModType,DividendType,AllotmentType);
Begin
   BegT := vselect minof(['截止日']) from MyPortfolioArr end;
      obj := CreateObject('TSMyBackTestingQuantity');
      //用户导入的配置数据
   obj.MyPortfolioArr := MyPortfolioArr;
      //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //组合类型(配置类组合)
   obj.FGroupType := 1;
      //基准代码
   obj.FIndexId := IndexId;
      //比例类组合配比方式(本范例以用户自定义输入)
   obj.FRateType := -1;
      //初始资金
   obj.FIniCash := IniCash;
      //成交价类别(此处以收盘价成交)
   obj.FPriceType := PriceType;
      //成交量取整模式





   obj.FVolModType := VolModType;
      //是否分红再投资
   obj.FDividendType := DividendType;
      //是否参与配股
   obj.FAllotmentType := AllotmentType;

      //回测
      obj.BackTest();

      //获取返回结果(返回结果可根据需要选择)
   return array(
                  //---组合基础
                '配置明细':obj.GetPortfolioPercent(BegT,EndT),
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "行业配置":obj.GetSectorAllocation(BegT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                );






End;

Type TSMyBackTestingQuantity=class(TSBackTesting)
public
   MyPortfolioArr;
   function GetTimeSeries();override;
   function GetTradeOrder(vEndT);override;
end;


function TSMyBackTestingQuantity.GetTimeSeries();override;
begin
      //从导入的配置文件中获取调仓日序列
   return SSelect distinct ['截止日'] from MyPortfolioArr order by ['截止日
'] end;
end;

function TSMyBackTestingQuantity.GetTradeOrder(vEndT);override;
begin
      //查询某个调仓日的配置数据
   t := Select * from MyPortfolioArr where ['截止日']=vEndT end;
   return t;
end;

范例05:调用示例

Function TSFL_TSBackTesting_FutureAndETF(BegT,EndT);
Begin
   obj := createobject('TSETFandFutureBackTesting');

      //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间





   obj.FEndT := EndT;
      //调仓周期
   obj.FCycle := cy_day();
      //组合类别(数量类组合)
   obj.FGroupType := 2;
      //基准代码
   obj.FIndexId := 'SH000300';
      //初始资金
   obj.FIniCash := 10^6;
      //成交价类别(此处为用户自定义价格)
   obj.FPriceType := -1;
      //成交量取整模式
   obj.FVolModType := -1;
      //是否分红再投资
   obj.FDividendType := 0;
      //是否参与配股
   obj.FDividendType := 0;
      //费用类别
   obj.FFeeType := 1;

      //回测
   obj.BackTest();

      //获取返回结果(返回结果可根据需要选择)
   return array(
                  //---组合基础
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),





                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                );

End;

Type TSETFandFutureBackTesting=class(TSBackTesting)
//数量类对冲策略
{
截止日、代码、方向、动作、成交量、
成交价、乘数、保证金比例(%)、费率(%)
}
function GetTradeOrder(vEndT);override;
begin
   oV := BackUpSystemParameters();

   SetSysParam(PN_Cycle(),cy_day());
   PrevEndT := MarketLastTradeDay(vEndT);
   tP := GetHoldData();
   dayArr := GetTimeSeries();

   t := array();
   n := 0;
   if vEndT=dayArr[0] then //首日ETF 建仓
   begin





      StockId := 'SH510300';
      SetSysParam(PN_Stock(),StockId);
      SetSysParam(PN_Rate(),0);
      vC := StockClose(PrevEndT);

      t[n]['截止日'] := vEndT;
      t[n]['代码'] := StockId;
      t[n]['动作'] := 0; //开仓
      t[n]['成交量'] := RoundTo(60*10^4/vC,2);
      t[n]['成交价'] := StockPjCj4(vEndT);
      t[n]['方向'] := 1; //多头
      t[n]['乘数'] := 1;
      t[n]['保证金比例(%)'] := 100;
      t[n]['费率(%)'] := 0.1;
      n++;
   end;

      //T-1 日指数MACD
   IndexId := 'SH000300';
   SetSysParam(PN_Stock(),IndexId);
   SetSysParam(PN_Rate(),1);
   vMacd := specdate(MACD_MACD_v(12,26,9),PrevEndT);

   FutureId := 'IF01';
   SetSysParam(PN_Stock(),FutureId);
   Index := RecordExist2(tP,'代码','IF01');
   if vMACD<0 and Index<0 then //判断是否要开空单
   begin
      t[n]['代码'] := FutureId;
      t[n]['截止日'] := vEndT;
      t[n]['动作'] := 0;  //开仓
      t[n]['成交量'] := 1;
      t[n]['成交价'] := StockOpen(vEndT);
      t[n]['方向'] := 0;  //空头





      t[n]['乘数'] := 300;
      t[n]['保证金比例(%)'] := 20;
      t[n]['费率(%)'] := 0.01;
      n++;
   end
   else if vMACD>=0 and Index>=0 then //判断是要平空单
   begin
      t[n]['代码'] := FutureId;
      t[n]['截止日'] := vEndT;
      t[n]['方向'] := 0;  //空头
      t[n]['动作'] := 1;  //平仓
      t[n]['成交量'] := 1;
      t[n]['成交价'] := StockOpen(vEndT);
      t[n]['乘数'] := 300;
      t[n]['保证金比例(%)'] := 20;
      t[n]['费率(%)'] := 0.01;
      n++;
   end;
   RestoreSystemParameters(oV);
   return t;
end;
end;

范例06:调用示例

Function
TSFL_TSBackTesting_HighFrequencyTrading(Stocks,BegT,EndT,Cycle,MaxN,MaxGR
,MaxLR,FeeRate);
Begin
   obj := createobject('HighFrequencyTrading');

   //********************回测基本设置***************************//
// // //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //回测周期
   obj.FCycle := Cycle;
      //组合类型(数量类组合)
   obj.FGroupType := 2;

      //成交价类别(高频交易采用时点价格)
   obj.FPriceType := 1;
      //数量类组合开仓数量类别(此处采用固定金额法)
   obj.FOpenVolType := 2;
      //数量类组合平仓数量类别(此处采用可平仓数量占比法)
   obj.FCloseVolType := 2;

      //日内止盈止损
   obj.FGLType := 1;
      //止盈线
   obj.FMaxGainRatio := MaxGR;
      //止损线
   obj.FMaxLossRatio := MaxLR;
      //费率(%)
   obj.FFeeRate := FeeRate;






   //********************用户自定义参数***************************//
// // //此处的股票池以数组的方式提供,实际可修改为按照选股方法获取
   obj.FStockArr := str2array(Stocks);
      //最大持有数量
   obj.FMaxN := MaxN;

      //回测
   obj.BackTest();


      //获取返回结果(返回结果可根据需要选择)
   return array(
                  //---组合基础
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "行业配置":obj.GetSectorAllocation(BegT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                );






End;


Type HighFrequencyTrading=class(TSBackTesting)

   FStockArr;  //备选股票池
   FMaxN;      //最大持有股票数
   FFeeRate;   //费率(%)

   function GetTradeOrder(vEndT);override;
   begin
      oV := BackupSystemParameters2();
         //当前时间
      d := vEndT;

      echo datetimetostr(d);
      cc := GetHoldData();   //获取当前持仓
      cash := GetSurplusFund();  //获取剩余资金

      ccstocks := sselect distinct(['代码']) from cc end;  //获取持仓中的股票

      tjy := array();
      n := 0;
      if istable(ccstocks) then
         ccnum := length(ccstocks)
      else
         ccnum := 0;
      newccnum := ccnum;
      if newccnum<FMaxN then   //当前持仓股票个数小于最大持仓数
      begin
         setsysparam(pn_cycle(),FCycle);
            //判断开仓
         for nI := 0 to length(FStockArr)-1 do





         begin
            stockid := FStockArr[nI];
            setsysparam(pn_stock(),stockid);
            setsysparam(pn_date(),d);
            if not istradeday(d) then continue;
            if not (stockid in ccstocks) then   //如果持仓中不存在才判断是否满足
开仓
            begin
               setsysparam(pn_rate(),1);
               if cross(ma(close(),10),ma(close(),20))=1 then
               begin
                  tjy[n]['截止日'] := d;
                  tjy[n]['代码'] := stockid;
                  tjy[n]['名称'] := stockname(stockid);
                  tjy[n]['方向'] := 1;
                  tjy[n]['动作'] := 0;
                      //与FOpenVolType 关联,为2 时,提供金额即可,此处为剩余资金/剩
// // 余个数,由基类计算成交量
                  tjy[n]['资金'] := cash/(FMaxN-ccnum);
                  n++;
                  newccnum++;
               end
            end
            if newccnum>=FMaxN then   //当持仓的证券个数大于最大持仓个数就终止开仓
               break;
         end
      end;

         //平仓,对持仓循环判断是否达到平仓条件
      for nJ := 0 to length(cc)-1 do
      begin
         stockid := cc[nJ]['代码'];
         setsysparam(pn_stock(),stockid);
         setsysparam(pn_date(),d);





         setsysparam(pn_rate(),1);
         if cross(ma(close(),20),ma(close(),10))=1 then
         begin
            tjy[n]['截止日'] := d;
            tjy[n]['代码'] := stockid;
            tjy[n]['名称'] := stockname(stockid);
            tjy[n]['方向'] := 1;
            tjy[n]['动作'] := 1;
               //FCloseVolType 为2 时,提供平仓比例即可,此处平仓数量占比(%)即全部平
// // 仓。也可将FCloseVolType 设置为1,此处直接提供成交量
            tjy[n]['平仓数量占比(%)'] := 100;
            n++;
         end
      end;

         //添加费率(%)字段
      update tjy set ['费率(%)']=FFeeRate end;
      return tjy;
   end
End;

范例07:调用示例

Function
TSFL_OPtionGroupTest(BegT,EndT,Cy,GroupType,IndexID,IniCash,PriceType,VolMo
dType,Feetype,OpenVolType,CloseVolType,MyPortfolioArr);
Begin
   obj := CreateObject("TsbackTestEgWJ");
   obj.FMyPortfolioArr := MyPortfolioArr;
   //********************回测基本参数****************//
// // //回测开始时间
   obj.Fbegt := BegT;
   //回测截止时间
   obj.FEndt := EndT;
   //调仓周期
   obj.Fcycle := Cy;
   //组合类别   1:比例类   2:数量类
   obj.FgroupType := GroupType;
   //基准代码
   obj.FindexID := IndexID;
   //初始资金
   obj.Finicash := IniCash;
   //成交价类别  -1:用户自定义  1:时点价格   2:收盘价  3:日均价 4:开盘价 5:系统昨收
   obj.FpriceType := PriceType;
   //成交量取整模式  0:成交量不取整   -1:成交量自动取整
   obj.FVolModType := VolModType;
   //费用类别
   obj.FFeetype := Feetype;
   //数量类组合开仓数量模式 :固定成交量





   obj.FOpenVolType := OpenVolType;
   //数量类组合平仓数量模式 :可平仓数量占比
   obj.FCloseVolType := CloseVolType;
   obj.BackTest();
   return array(
                  //---组合基础
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "行业配置":obj.GetSectorAllocation(BegT),
                '剔除' :obj.GetDelTradeData(BegT,EndT),
                "持仓明细全集":obj.tallccmx,
                '资产配置全集':obj.tallzcpz,

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                '期权组合持仓':obj.GetOptionGroupData(BegT,EndT)
                );
End;

type  TsbackTestEgWJ=class(tsbacktesting)





   FMyPortfolioArr;
   function GetTradeOrder(vendt);override;
   function GetOtherData(vendt);override;
end

function TsbackTestEgWJ.GetTradeOrder(vendt);override;
begin
   tjy := array();
   tjy := select * from  FMyportfolioarr where ["截止日"]=vendt
and ['动作']in array(0,1,32,33)
end;
   return tjy;

End;
function TsbackTestEgWJ.GetOtherData(vendt);override;
begin
    tother := array();
tother := select * from  FMyportfolioarr where ["截止日"]=vendt
and ['动作']in array(10,11)
end;
    return tother;
End
如果已经通过外部文件配置好了数据,则可以通过导入该文件里面的数据的方式进行回测。假设:配
置数据如下表所示:
组 ID 截止日 代码 方向 动作 乘数 保证金比例(%) 成交价 成交量 费率(%)





可将上表的值导入到函数 TSFL_qhOPtionGroupTest 的参数 MyPortfolioArr 中。





Function
TSFL_qhOPtionGroupTest(BegT,EndT,Cy,GroupType,IndexID,IniCash,PriceType,VolModType,Feetype,OpenVolType,CloseVolType,MyPortfolioArr);
Begin
   obj := CreateObject("TsbackTestEg");
   obj.FMyPortfolioArr := MyPortfolioArr;
   //回测开始时间
   obj.Fbegt := BegT;
   //回测截止时间
   obj.FEndt := EndT;
   //调仓周期
   obj.Fcycle := Cy;
   //组合类别   1:比例类   2:数量类
   obj.FgroupType := GroupType;
   //基准代码
   obj.FindexID := IndexID;
   //初始资金
   obj.Finicash := IniCash;
   //成交价类别  -1:用户自定义  1:时点价格  2:收盘价  3:日均价 4:开盘价    5:系统昨
// // 收
   obj.FpriceType := PriceType;
   //成交量取整模式  0:成交量不取整   -1:成交量自动取整
   obj.FVolModType := VolModType;
   //费用类别
   obj.FFeetype := Feetype;
   //数量类组合开仓数量模式 :固定成交量
   obj.FOpenVolType := OpenVolType;
   //数量类组合平仓数量模式 :可平仓数量占比
   obj.FCloseVolType := CloseVolType;
   obj.BackTest();
   return array(





                  //---组合基础
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "行业配置":obj.GetSectorAllocation(BegT),
                '剔除' :obj.GetDelTradeData(BegT,EndT),
                "持仓明细全集":obj.tallccmx,
                '资产配置全集':obj.tallzcpz,

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),
                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                '期权组合持仓':obj.GetOptionGroupData(BegT,EndT)
                );
End;

type  TsbackTestEg=class(tsbacktesting)
   FMyPortfolioArr;
   function GetTradeOrder(vendt);override;
end

function TsbackTestEg.GetTradeOrder(vendt);override;





begin
   tjy := array();
   tjy := select * from  FMyportfolioarr where ["截止日"]=vendt
                 and ['动作']in array(0,1)
                 end;
   return tjy;
End;
如果已经通过外部文件配置好了数据,则可以通过导入该文件里面的数据的方式进行回测。假设:配
置数据如下表所示:
截止日 代码 方向 动作 乘数 保证金比例(%) 成交价 成交量 费率(%)
可将上表的值导入到函数 TSFL_RSOptionTest 的参数 MyPortfolioArr 中。





Function
TSFL_RSOptionTest(BegT,EndT,Cy,GroupType,IndexID,IniCash,PriceType,VolModTyp
e,Feetype,OpenVolType,CloseVolType,OptionRs,MyPortfolioArr);
Begin
   obj := CreateObject("TsbackTestEg");
   obj.FMyPortfolioArr := MyPortfolioArr;

   //********************回测基本参数****************//
// // //回测开始时间
   obj.Fbegt := BegT;

   //回测截止时间
   obj.FEndt := EndT;

   //调仓周期
   obj.Fcycle := Cy;

   //组合类别   1:比例类   2:数量类
   obj.FgroupType := GroupType;

   //基准代码
   obj.FindexID := IndexID;

   //初始资金
   obj.Finicash := IniCash;

   //成交价类别  -1:用户自定义  1:时点价格   2:收盘价  3:日均价 4:开盘价    5:系统昨
// // 收
   obj.FpriceType := PriceType;

   //成交量取整模式  0:成交量不取整   -1:成交量自动取整





   obj.FVolModType := VolModType;

   //费用类别
   obj.FFeetype := Feetype;

   //数量类组合开仓数量模式 :固定成交量
   obj.FOpenVolType := OpenVolType;

   //数量类组合平仓数量模式 :可平仓数量占比
   obj.FCloseVolType := CloseVolType;
   //自动构建备兑组合
   obj.FOptionRs := OptionRs;

   obj.BackTest();

   return array(
                  //---组合基础
                '交易明细':obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "行业配置":obj.GetSectorAllocation(BegT),
                '剔除' :obj.GetDelTradeData(BegT,EndT),
                "持仓明细全集":obj.tallccmx,
                '资产配置全集':obj.tallzcpz,

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                '区间组合收益率':  obj.GetPortfolioReturn(BegT,EndT),
                '组合和基准收益率序列':obj.GetPortfolioReturn2(BegT,EndT),





                '阶段收益':obj.GetTrailingReturn(EndT),
                '滚动收益':obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                '风险回报':obj.GetReturnandRisk(BegT,EndT),
                '相对回报':obj.GetRelativePerformance(BegT,EndT),
                '期权组合持仓':obj.GetOptionGroupData(BegT,EndT)
                );
End;

type  TsbackTestEg=class(tsbacktesting)
   FMyPortfolioArr;
   function GetTradeOrder(vendt);override;
end

function TsbackTestEg.GetTradeOrder(vendt);override;
begin
   tjy := array();
   tjy := select * from  FMyportfolioarr where ["截止日"]=vendt
                and ['动作']in array(0,1)
                end;
   return tjy;
End

如果已经通过外部文件配置好了数据,则可以通过导入该文件里面的数据的方式进行回测。假设:配





置数据如下表所示:
截止日 代码 方向 乘数 保证金比例(%) 开仓费率(%) 平仓费率(%)
Function
TSFL_MainFuturesChange_FGroupType1(BegT,EndT,cy,GroupType,RateType,IndexI
d,IniCash,PriceType,VolModType,MainFutureMap,MyPortfolioArr);
Begin
   obj := createobject('MainFuturesChange');
   begt := 20210701T;
   endt := 20210806T;
      //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //调仓周期
   obj.FCycle := cy;
      //组合类别(比例类组合)
   obj.FGroupType := GroupType;
      //比例类配比方式:等权重
   obj.FRateType := RateType;
      //基准代码
   obj.FIndexId := IndexId;





      //初始资金
   obj.FIniCash := IniCash;
      //成交价类别 ,收盘价
   obj.FPriceType := PriceType;
      //取整模式:自适应取整
   obj.FVolModType := VolModType;
      //主力合约转为实际合约交易
   obj.FMainFutureMap := MainFutureMap;
      //用户调仓明细
   obj.FMydata := MyPortfolioArr;
      //回测
   obj.BackTest();
     //获取返回结果
   return array(
                  //---组合基础
                "交易明细":obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "剔除":obj.GetDelTradeData(BegT,EndT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)
":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                "区间组合收益率":  obj.GetPortfolioReturn(BegT,EndT),
                "组合和基准收益率序列":obj.GetPortfolioReturn2(BegT,EndT),
                "阶段收益":obj.GetTrailingReturn(EndT),
                "滚动收益":obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价





                "风险回报":obj.GetReturnandRisk(BegT,EndT),
                "相对回报":obj.GetRelativePerformance(BegT,EndT),
                );
End;

type MainFuturesChange=class(TSBackTesting)
   FMydata;
   function GetTradeOrder(vEndT);override;
   begin
      tjy := array();
      tjy := select * from FMydata where ['截止日']=vendt end;
      return tjy;
   end

   function GetTimeSeries();override;
   begin
      timearr := array();
      timearr := sselect distinct['截止日'] from FMydata end;
      return timearr;
   end
End;

范例08:调用示例

Function
TSFL_MainFuturesChange1_FGroupType1(BegT,EndT,cy,GroupType,RateType,Index
Id,IniCash,PriceType,VolModType,MainFutureMap,MyPortfolioArr);
Begin
   obj := createobject('MainFuturesChange');
   begt := 20210701T;
   endt := 20210806T;
      //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //调仓周期
   obj.FCycle := cy;
      //组合类别(比例类组合)
   obj.FGroupType := GroupType;
      //比例类配比方式:等权重
   obj.FRateType := RateType;
      //基准代码
   obj.FIndexId := IndexId;
      //初始资金
   obj.FIniCash := IniCash;
      //成交价类别 ,收盘价





   obj.FPriceType := PriceType;
      //取整模式:自适应取整
   obj.FVolModType := VolModType;
      //主力合约转为实际合约交易
   obj.FMainFutureMap := MainFutureMap;
      //用户调仓明细
   obj.FMydata := MyPortfolioArr;
      //回测
   obj.BackTest();
     //获取返回结果
   return array(
                  //---组合基础
                "交易明细":obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "剔除":obj.GetDelTradeData(BegT,EndT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)
":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                "区间组合收益率":  obj.GetPortfolioReturn(BegT,EndT),
                "组合和基准收益率序列":obj.GetPortfolioReturn2(BegT,EndT),
                "阶段收益":obj.GetTrailingReturn(EndT),
                "滚动收益":obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                "风险回报":obj.GetReturnandRisk(BegT,EndT),
                "相对回报":obj.GetRelativePerformance(BegT,EndT),
                );





End;

type MainFuturesChange=class(TSBackTesting)
   FMydata;
   function GetTradeOrder(vEndT);override;
   begin
      tjy := array();
      tjy := select * from FMydata where ['截止日']=vendt end;
      return tjy;
   end

   function GetTimeSeries();override;
   begin
      timearr := array();
      timearr := sselect distinct['截止日'] from FMydata end;
      return timearr;
   end
End;

范例09:调用示例

Function
TSFL_MainFuturesChange_FGroupType2(BegT,EndT,cy,GroupType,OpenVolType,Clo
seVolType,IndexId,IniCash,PriceType,VolModType,MainFutureMap,Mydata);
Begin
   obj := createobject('MainFuturesChange');
   begt := 20210104T;
   endt := 20210301T;
   //********************回测基本设置***************************//
// // //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //调仓周期
   obj.FCycle := cy;
      //组合类别(数量类组合)
   obj.FGroupType := GroupType;
      //数量类开仓模式
   obj.FOpenVolType := OpenVolType;
      //数量类平仓模式
   obj.FCloseVolType := CloseVolType;
      //基准代码
   obj.FIndexId := IndexId;
      //初始资金
   obj.FIniCash := IniCash;
      //成交价类别 ,收盘价
   obj.FPriceType := PriceType;





      //成交量取整模式,自适应取整
   obj.FVolModType := VolModType;
      //主力合约映射到实际合约
   obj.FMainFutureMap := MainFutureMap;
      //用户调仓明细
   obj.FMydata := Mydata;
     //回测
   obj.BackTest();
     //获取返回结果(返回结果可根据需要选择)
   return array(
                  //---组合基础
                "交易明细":obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "剔除":obj.GetDelTradeData(BegT,EndT),
                '资产配置全集':obj.tallzcpz,
                '持仓全集':obj.tallccmx,

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)
":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                "区间组合收益率":  obj.GetPortfolioReturn(BegT,EndT),
                "组合和基准收益率序列":obj.GetPortfolioReturn2(BegT,EndT),
                "阶段收益":obj.GetTrailingReturn(EndT),
                "滚动收益":obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                "风险回报":obj.GetReturnandRisk(BegT,EndT),
                "相对回报":obj.GetRelativePerformance(BegT,EndT),





                );
End;

type MainFuturesChange=class(TSBackTesting)
   FMydata;
   function GetTradeOrder(vEndT);override;
   begin
      tjy := array();
      tjy := select * from FMydata where ['截止日']=vendt end;
      return tjy;
   end

   function GetTimeSeries();override;
   begin
      timearr := array();
      timearr := sselect distinct['截止日'] from FMydata end;
      return timearr;
   end
End;

范例10:调用示例

Function
Update_IndustryType_FRateType(BegT,EndT,cy,GroupType,RateType,IndexId,Ini
Cash,PriceType,VolModType,IndustryMethod,IndustryType,MyPortfolioArr);
Begin
   obj := createobject('TsbackTestEgIndustry');
      //回测开始时间
   obj.FBegT := BegT;
      //回测截止时间
   obj.FEndT := EndT;
      //调仓周期(月判断)
   obj.FCycle := cy;
      //组合类别(比例类组合)
   obj.FGroupType := GroupType;
      //比例类配比方式:等权重
   obj.FRateType := RateType;
      //基准代码
   obj.FIndexId := IndexId;
      //初始资金
   obj.FIniCash := IniCash;
      //成交价类别 :收盘价
   obj.FPriceType := PriceType;
      //取整模式:自适应取整
   obj.FVolModType := VolModType;
      //是否进行行业中性配比
   obj.FIndustryMethod := IndustryMethod;





      //行业分类标准
   obj.FIndustryType := IndustryType;
   obj.FMydata := MyPortfolioArr;
      //回测
   obj.BackTest();
     //获取返回结果
   return array(
                  //---组合基础
                "交易明细":obj.GetTradeData(BegT,EndT),
                "资产配置":obj.GetAssetData(BegT,EndT),
                "持仓明细":obj.GetHoldData(BegT,EndT),
                "剔除":obj.GetDelTradeData(BegT,EndT),

                  //---组合盈亏、交易
                "组合盈亏":obj.GetGainandLoss(BegT,EndT),
                "交易汇总":obj.GetTradingAmount(BegT,EndT),
                "组合盈亏(按证券)":obj.GetGainandLossBySecurity(BegT,EndT),
                "交易汇总(按证券)
":obj.GetTradingAmountBySecurity(BegT,EndT),

                  //---组合收益
                "区间组合收益率":  obj.GetPortfolioReturn(BegT,EndT),
                "组合和基准收益率序列":obj.GetPortfolioReturn2(BegT,EndT),
                "阶段收益":obj.GetTrailingReturn(EndT),
                "滚动收益":obj.GetRollingReturn(BegT,EndT,cy_month()),

                //----组合评价
                "风险回报":obj.GetReturnandRisk(BegT,EndT),
                "相对回报":obj.GetRelativePerformance(BegT,EndT),
                );
End;

type TsbackTestEgIndustry=class(TSBackTesting)
   FMydata;





   function GetTradeOrder(vEndT);override;
   begin
      tjy := select * from FMydata where ['截止日']=vendt end;
      return tjy;
   end

   function GetTimeSeries();override;
   begin
      timearr := sselect distinct['截止日'] from FMydata end;
      return timearr;
   end
End;