//------------------------------------------------------------------------
// 简称: CLZD_CalcTRpt
// 名称: 计算逻辑交易统计报表
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
ArrayRef<Numeric> input_n_a; // 输入数组
ArrayRef<Array<Numeric>> CLZD_LTRA_n_gaa; // 逻辑交易记录数组 [TRA]
ArrayRef<Array<Numeric>> CLZD_EQA_n_gaa; // 动态权益表 [EQA]
ArrayRef<Numeric> CLZD_TRpt_n_a; // 输出TRpt数组
Numeric input_Debug_Switch_n(0); // 调试开关
Vars
// ==================================================
// 输入变量
// ==================================================
Numeric CalcMethod_n; // 计算方式 1=算术 2=几何
Numeric CLZD_TRpt_FldCap_n_g; // TRpt数组 字段容量
Numeric input_initEQ_n; // 时段外 期末净值 CurrentBar=0 使用初始资金
Numeric input_initClose_r_n; //时段外 收盘价 CurrentBar=0时 使用开盘价
Numeric CountsPerYear_n; // 每个交易年 包含当前周期的个数
// ==================================================
// 1、 LRpt字段定义
// ==================================================
// --------------------------------------------------
// 1.1 与LTRA有关字段变量
// 第2组:交易统计
//-------------------------
Numeric TotalTradeCnt_n(0); // [TRA] 字段9 总交易次数
Numeric WinTradeCnt_n(0); // [TRA] 字段10 盈利交易次数
Numeric LossTradeCnt_n(0); // [TRA] 字段11 亏损交易次数
Numeric EvenTradeCnt_n(0); // [TRA] 字段12 保本交易次数
Numeric WinToLossCnt_n(0); // [TRA] 字段13 浮盈转亏损次数
// 第3组:盈利能力
//-------------------------
Numeric TotalWin_n(0); // [TRA] 字段21 总盈利
Numeric TotalLoss_n(0); // [TRA] 字段22 总亏损
// 第6组:成本与杠杆
//-------------------------
Numeric TotalCost_n(0); // [TRA] 字段82 总交易成本
// 第7组:K线维度
//-------------------------
Numeric HoldBars_n(0); // [TRA] 字段92 时段持仓Bar数
Numeric WinHoldBars_n(0); // [TRA] 字段93 [盈利交易]持仓Bar数
Numeric LossHoldBars_n(0); // [TRA] 字段94 [亏损交易]持仓Bar数
Numeric EvenHoldBars_n(0); // [TRA] 字段95 [保本交易]持仓Bar数
Numeric WinToLossHoldBars_n(0); // [TRA] 字段96 [浮盈转亏损]持仓Bar数
// --------------------------------------------------
// 1.2 与EQA有关字段变量
// 第3组:盈利能力
//-------------------------
Numeric InitEQ_n(0); // [EQA] 字段24 期初权益
Numeric EndEQ_n(0); // [EQA] 字段25 期末权益
// 第4组:风险控制
//-------------------------
Numeric MaxDDRate_n(0); // [EQA] 字段52 最大回撤率
//-------------------------
Numeric AnnualVol_n(0); // [EQA] 字段58 年化波动率
// 第7组:K线维度
//-------------------------
Numeric TotalBars_n(0); // [EQA] 字段91 时段总Bar数
// --------------------------------------------------
// 1.3 计算字段
// 第3组:盈利能力
//-------------------------
Numeric NetProfit_n(0); // [Calc] 字段23 总净利润
Numeric NetValue_n(0); // [Calc] 字段28 净值
// ==================================================
// 2、其他变量
// ==================================================
// --------------------------------------------------
// 计算 年化收益率 有关的字段
Numeric Years_n(0); // 回测时段覆盖的年数
// --------------------------------------------------
// 计算最大权益有关的字段
Numeric PeakEQ_DT_n(0); // 权益峰值时间 [EQA中间变量]
Numeric PeakEQ_n(0); // 权益峰值最高值 [EQA中间变量]
Numeric DD_Rate_Curr_n(0); // 当前回撤率 [EQA中间变量]
Numeric DD_Bars_Curr_n(0); // 当前回撤持续Bar数 [EQA中间变量]
// --------------------------------------------------
// EQA派生 数组
Array<Numeric> NetValue_n_a; // [EQA派生] 净值序列 = Equity / InitEQ
Array<Numeric> R_p_n_a; // [EQA派生] 策略收益率 = NetValue / NetValue[1] - 1
Array<Numeric> R_m_n_a; // [EQA派生] 市场收益率 = Close_r / Close_r[1] - 1
Array<Numeric> DownR_p_n_a; // [EQA派生] 下行收益率序列 (R_p < 0)
Array<Numeric> PosLev_n_a; // [EQA派生] 持仓杠杆 = PositionValue / Equity
Numeric ai_arr_n; // 循环变量
Numeric Debug_Switch_n(1); // 调试开关
Begin
Debug_Switch_n = input_Debug_Switch_n;
if(Debug_Switch_n == 1 And BarStatus == 2)
{
Print("\n");
Print("/*-------------------------------------------*/");
Print("CLZD_CalcTRpt 开始执行");
Print("{");
}
/*---------------------------------------------------------*/
//输入变量赋值
CalcMethod_n = input_n_a[0];
CLZD_TRpt_FldCap_n_g = input_n_a[1];
input_initEQ_n = input_n_a[2];
input_initClose_r_n = input_n_a[3];
CountsPerYear_n = input_n_a[4];
// 获取数组大小
// 字段9 总交易次数
TotalTradeCnt_n = GetArraySize(CLZD_LTRA_n_gaa);
// 字段91 时段总Bar数
TotalBars_n = GetArraySize(CLZD_EQA_n_gaa);
If(TotalTradeCnt_n < 1 Or TotalBars_n < 1)
{
if(Debug_Switch_n == 1 And BarStatus == 2)
{
Print("没有交易记录数据");
Print("}");
}
Return 0;
}
// 初始化输出数组
SetArraySize(CLZD_TRpt_n_a, CLZD_TRpt_FldCap_n_g, 0);
// 初始化派生数组
SetArraySize(NetValue_n_a, TotalBars_n, 0);
SetArraySize(R_p_n_a, TotalBars_n, 0);
SetArraySize(R_m_n_a, TotalBars_n, 0);
SetArraySize(DownR_p_n_a, TotalBars_n, 0);
SetArraySize(PosLev_n_a, TotalBars_n, 0);
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《 LRpt字段计算 直接从LTRA 获取或累加 》》》》
{
//++++++++++++++++++++++++++++++++
// 第1组:基本信息
//++++++++++++++++++++++++++++++++
//-------------------------
// 字段0 StratDir 交易方向
CLZD_TRpt_n_a[0] = CLZD_LTRA_n_gaa[0][0];
// 字段1 CalcMethod_n 计算方式
CLZD_TRpt_n_a[1] = CalcMethod_n;
For ai_arr_n = 0 To TotalTradeCnt_n - 1
{
//-------------------------
// 字段10 TradeSuccess 交易成功标志
If(CLZD_LTRA_n_gaa[ai_arr_n][10] == 1)
{
WinTradeCnt_n = WinTradeCnt_n + 1;
TotalWin_n = TotalWin_n + CLZD_LTRA_n_gaa[ai_arr_n][5];
WinHoldBars_n = WinHoldBars_n + CLZD_LTRA_n_gaa[ai_arr_n][9]; // 字段9 HoldBars 持仓K线数 [TRA]
}
Else If(CLZD_LTRA_n_gaa[ai_arr_n][10] == -1)
{
LossTradeCnt_n = LossTradeCnt_n + 1;
TotalLoss_n = TotalLoss_n + CLZD_LTRA_n_gaa[ai_arr_n][5];
LossHoldBars_n = LossHoldBars_n + CLZD_LTRA_n_gaa[ai_arr_n][9];
}
Else If(CLZD_LTRA_n_gaa[ai_arr_n][10] == 0)
{
EvenTradeCnt_n = EvenTradeCnt_n + 1;
EvenHoldBars_n = EvenHoldBars_n + CLZD_LTRA_n_gaa[ai_arr_n][9];
}
// 字段11 WinToLossFlag 浮盈转亏损标志
If(CLZD_LTRA_n_gaa[ai_arr_n][11] == 1)
{
WinToLossCnt_n = WinToLossCnt_n + 1;
WinToLossHoldBars_n = WinToLossHoldBars_n + CLZD_LTRA_n_gaa[ai_arr_n][9];
}
//-------------------------
// 字段6 TotalTradeCost 总交易成本 [TRA]
TotalCost_n = TotalCost_n + CLZD_LTRA_n_gaa[ai_arr_n][6];
}
HoldBars_n = WinHoldBars_n + LossHoldBars_n + EvenHoldBars_n;
//++++++++++++++++++++++++++++++++
// 第2组:交易统计
//++++++++++++++++++++++++++++++++
// 字段9 TotalTradeCnt 总交易次数
CLZD_TRpt_n_a[9] = TotalTradeCnt_n;
// 字段10 WinTradeCnt 盈利交易次数
CLZD_TRpt_n_a[10] = WinTradeCnt_n;
// 字段11 LossTradeCnt 亏损交易次数
CLZD_TRpt_n_a[11] = LossTradeCnt_n;
// 字段12 EvenTradeCnt 保本交易次数
CLZD_TRpt_n_a[12] = EvenTradeCnt_n;
// 字段13 WinToLossCnt 浮盈转亏损次数
CLZD_TRpt_n_a[13] = WinToLossCnt_n;
//++++++++++++++++++++++++++++++++
// 第3组:盈利能力
//++++++++++++++++++++++++++++++++
// 字段21 TotalWin 总盈利
CLZD_TRpt_n_a[21] = TotalWin_n;
// 字段22 TotalLoss 总亏损
CLZD_TRpt_n_a[22] = TotalLoss_n;
//++++++++++++++++++++++++++++++++
// 第6组:成本与杠杆
//++++++++++++++++++++++++++++++++
// 字段82 TotalCost 总交易成本
CLZD_TRpt_n_a[82] = TotalCost_n;
//++++++++++++++++++++++++++++++++
// 第7组:K线维度
//++++++++++++++++++++++++++++++++
// 字段92 HoldBars 时段持仓Bar数
CLZD_TRpt_n_a[92] = HoldBars_n;
// 字段93 WinHoldBars [盈利交易]持仓Bar数
CLZD_TRpt_n_a[93] = WinHoldBars_n;
// 字段94 LossHoldBars [亏损交易]持仓Bar数
CLZD_TRpt_n_a[94] = LossHoldBars_n;
// 字段95 EvenHoldBars [保本交易]持仓Bar数
CLZD_TRpt_n_a[95] = EvenHoldBars_n;
// 字段96 WinToLossHoldBars [浮盈转亏损]持仓Bar数
CLZD_TRpt_n_a[96] = WinToLossHoldBars_n;
}
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《 LRpt字段计算 直接从EQA 获取或累加 》》》》
{
//++++++++++++++++++++++++++++++++
// 第1组:基本信息
//++++++++++++++++++++++++++++++++
//-------------------------
// 字段2 BDT 时段开始时间
CLZD_TRpt_n_a[2] = CLZD_EQA_n_gaa[0][0];
// 字段3 EDT 时段结束时间
CLZD_TRpt_n_a[3] = CLZD_EQA_n_gaa[TotalBars_n - 1][0];
Years_n = TotalBars_n / CountsPerYear_n;
If(Debug_Switch_n == 1 And BarStatus == 2)
{
Print("Years_n = " + Text(Years_n));
}
//++++++++++++++++++++++++++++++++
// 第3组:盈利能力
//++++++++++++++++++++++++++++++++
//-------------------------
// 字段24 InitEQ 期初权益
InitEQ_n = input_initEQ_n;
// 字段25 EndEQ 期末权益
EndEQ_n = CLZD_EQA_n_gaa[TotalBars_n - 1][1];
CLZD_TRpt_n_a[24] = InitEQ_n;
CLZD_TRpt_n_a[25] = EndEQ_n;
//++++++++++++++++++++++++++++++++
// 第4组:风险控制
//++++++++++++++++++++++++++++++++
//-------------------------
// 计算最大回撤率相关 [51-57]
// 初始化回撤计算
PeakEQ_DT_n = CLZD_EQA_n_gaa[0][0]; // 第一个k线,记录权益峰值时间
PeakEQ_n = CLZD_EQA_n_gaa[0][1]; // 第一个k线,权益峰值初始化为第一个k线的动态权益
DD_Bars_Curr_n = 0; // 当前回撤Bar数初始化为0
Numeric isMaxDDProc_n = 0; // 是否进入最大回撤过程 1=是 0=否
For ai_arr_n = 0 To TotalBars_n - 1
{
// 字段1 Equity 动态权益 [EQA]
// 权益创新高
If(CLZD_EQA_n_gaa[ai_arr_n][1] >= PeakEQ_n)
{
// 更新历史最高权益
PeakEQ_DT_n = CLZD_EQA_n_gaa[ai_arr_n][0];
PeakEQ_n = CLZD_EQA_n_gaa[ai_arr_n][1];
If(isMaxDDProc_n == 1)
{
isMaxDDProc_n = 0;
// 字段56 MaxDD_Brk_DT 回撤恢复时间戳
CLZD_TRpt_n_a[56] = CLZD_EQA_n_gaa[ai_arr_n][0];
// 字段57 MaxDD_Brk_Bars 回撤恢复Bar数
CLZD_TRpt_n_a[57] = DD_Bars_Curr_n;
}
// 重置当前回撤Bar数
DD_Bars_Curr_n = 0;
}
Else
{
// 权益未创新高,回撤持续
DD_Bars_Curr_n = DD_Bars_Curr_n + 1;
// 当前回撤率 = (最高 - 当前) / 最高
DD_Rate_Curr_n = (PeakEQ_n - CLZD_EQA_n_gaa[ai_arr_n][1]) / PeakEQ_n;
// 如果当前回撤率超过历史最大回撤率
If(DD_Rate_Curr_n > MaxDDRate_n)
{
isMaxDDProc_n = 1;
// 字段51 MaxDDValue 最大回撤值(金额)
CLZD_TRpt_n_a[51] = PeakEQ_n - CLZD_EQA_n_gaa[ai_arr_n][1];
// 字段52 MaxDDRate 最大回撤率
MaxDDRate_n = DD_Rate_Curr_n;
// 字段53 MaxDD_BDT 回撤开始时间戳
CLZD_TRpt_n_a[53] = PeakEQ_DT_n;
// 字段54 MaxDD_Ext_DT 回撤极值时间戳
CLZD_TRpt_n_a[54] = CLZD_EQA_n_gaa[ai_arr_n][0];
// 字段55 MaxDD_Ext_Bars 回撤极值Bar数
CLZD_TRpt_n_a[55] = DD_Bars_Curr_n;
}
}
//-------------------------
// 构建派生数组
If(ai_arr_n == 0)
{
// i=0时使用时段前数据
If(input_initEQ_n > 0)
{
// Equity / Equity[1] -1
R_p_n_a[0] = CLZD_EQA_n_gaa[0][1] / input_initEQ_n - 1;
// NetValue = Equity / InitEQ
NetValue_n_a[0] = CLZD_EQA_n_gaa[0][1] / input_initEQ_n;
}
If(input_initClose_r_n > 0)
{
// Close_r / Close_r[1] -1
R_m_n_a[0] = CLZD_EQA_n_gaa[0][5] / input_initClose_r_n - 1;
//If(Debug_Switch_n == 1 And BarStatus == 2)
//{
//Print("\n");
//Print("ai_arr_n = " + Text(0));
//Print("input_initClose_r_n = " + Text(input_initClose_r_n));
//Print("CLZD_EQA_n_gaa[0][5] = " + Text(CLZD_EQA_n_gaa[0][5]));
//}
}
}
Else
{
If(CLZD_EQA_n_gaa[ai_arr_n - 1][1] > 0)
{
// Equity / Equity[1] -1
R_p_n_a[ai_arr_n] = CLZD_EQA_n_gaa[ai_arr_n][1] / CLZD_EQA_n_gaa[ai_arr_n - 1][1] - 1;
}
// NetValue = Equity / InitEQ
NetValue_n_a[ai_arr_n] = CLZD_EQA_n_gaa[ai_arr_n][1] / input_initEQ_n;
If(CLZD_EQA_n_gaa[ai_arr_n - 1][5] > 0)
{
// Close_r / Close_r[1] -1
R_m_n_a[ai_arr_n] = CLZD_EQA_n_gaa[ai_arr_n][5] / CLZD_EQA_n_gaa[ai_arr_n - 1][5] - 1;
//If(Debug_Switch_n == 1 And BarStatus == 2)
//{
//Print("\n");
//Print("ai_arr_n = " + Text(ai_arr_n));
//Print("CLZD_EQA_n_gaa[ai_arr_n][5] = " + Text(CLZD_EQA_n_gaa[ai_arr_n][5]));
//Print("CLZD_EQA_n_gaa[ai_arr_n - 1][5] = " + Text(CLZD_EQA_n_gaa[ai_arr_n - 1][5]));
//}
}
}
If(R_p_n_a[ai_arr_n] < 0)
{
// 取小于0的部分
DownR_p_n_a[ai_arr_n] = R_p_n_a[ai_arr_n];
}
// PosLev = PositionValue / Equity
If(CLZD_EQA_n_gaa[ai_arr_n][1] > 0)
PosLev_n_a[ai_arr_n] = CLZD_EQA_n_gaa[ai_arr_n][4] / CLZD_EQA_n_gaa[ai_arr_n][1];
}
// 字段52 MaxDDRate 最大回撤率
CLZD_TRpt_n_a[52] = MaxDDRate_n;
//-------------------------
Numeric R_p_Std_n = StandardDevArray(R_p_n_a, 1);
Numeric R_m_Std_n = StandardDevArray(R_m_n_a, 1);
Numeric R_P_Avg_n = AverageArray(R_p_n_a);
Numeric R_m_Avg_n = AverageArray(R_m_n_a);
// 字段27 Beta 系统性风险 = Corr(R_p,R_m) * std(R_p) / std(R_m)
If(R_m_Std_n > 0)
CLZD_TRpt_n_a[27] = CoefficientRArray(R_p_n_a, R_m_n_a) * R_p_Std_n / R_m_Std_n;
// 字段26 Alpha 策略超额收益 = mean(R_p) - Beta * mean(R_m)
CLZD_TRpt_n_a[26] = R_P_Avg_n - CLZD_TRpt_n_a[27] * R_m_Avg_n;
If(Debug_Switch_n == 1 And BarStatus == 2)
{
Print("aaa");
Print("{");
For ai_arr_n = 0 To TotalBars_n - 1
{
Print( " ai_arr_n = " + Text(ai_arr_n) + " datetime = " + DateTimeToString(CLZD_EQA_n_gaa[ai_arr_n][0]) + " R_p_n_a = " + Text(R_p_n_a[ai_arr_n]) + " R_m_n_a = " + Text(R_m_n_a[ai_arr_n]));
}
Print("}");
Print("R_p_Std_n = " + Text(R_p_Std_n));
Print("R_m_Std_n = " + Text(R_m_Std_n));
Print("R_P_Avg_n = " + Text(R_P_Avg_n));
Print("R_m_Avg_n = " + Text(R_m_Avg_n));
Print("CoefficientRArray(R_p_n_a, R_m_n_a) = " + Text(CoefficientRArray(R_p_n_a, R_m_n_a)));
Print("Beta = " +Text(CLZD_TRpt_n_a[27],6));
Print("Alpha = " +Text(CLZD_TRpt_n_a[26],6));
}
//-------------------------
// 计算最大回撤率相关 [58-62]
// 字段58 AnnualVolatility 年化波动率 = std(R_p) * sqrt(N) N = TotalBars_n / Years_n
AnnualVol_n = R_p_Std_n * Sqrt(TotalBars_n / Years_n);
CLZD_TRpt_n_a[58] = AnnualVol_n;
// 字段59 SharpeRatio 夏普比率 = mean(R_p) / 年化波动率
If(AnnualVol_n > 0)
CLZD_TRpt_n_a[59] = R_P_Avg_n / AnnualVol_n;
// 字段60 SortinoRatio 索提诺比率 = mean(R_p) * sqrt(N) / 下行标准差
Numeric DownStd_n = StandardDevArray(DownR_p_n_a, 1);
If(DownStd_n > 0 And Years_n > 0)
CLZD_TRpt_n_a[60] = R_P_Avg_n * Sqrt(TotalBars_n / Years_n) / DownStd_n;
// 字段61 ValueAtRisk 在险价值 = mean(R_p) - 1.65 * std(R_p)
CLZD_TRpt_n_a[61] = R_P_Avg_n - 1.65 * R_p_Std_n;
// 字段62 CalmarRatio 卡玛比率 = mean(R_p) * N / MaxDDRate N为年周期数
If(MaxDDRate_n > 0 And Years_n > 0)
CLZD_TRpt_n_a[62] = R_P_Avg_n * (TotalBars_n / Years_n) / MaxDDRate_n;
//++++++++++++++++++++++++++++++++
// 第5组:稳定性
//++++++++++++++++++++++++++++++++
// 字段71 RSquare 净值曲线与趋势线的相关系数平方
Numeric LRSlope_n; // 线性回归斜率
Numeric LRAngle_n; // 线性回归角度
Numeric LRIntercept_n; // 线性回归截距
Numeric LRValue_n; // 线性回归值
Numeric Corr_n; // 净值趋势线和净值相关系数
Array<Numeric> NetValueTrd_n_a; // 净值曲线拟合的趋势线
SetArraySize(NetValueTrd_n_a, TotalBars_n, 0);
// 对净值序列做线性回归
If(LinearRegArray(NetValue_n_a, 0, LRSlope_n, LRAngle_n, LRIntercept_n, LRValue_n))
{
// 生成趋势值序列:Trend[i] = 截距 + 斜率 * i
For ai_arr_n = 0 To TotalBars_n - 1
{
NetValueTrd_n_a[ai_arr_n] = LRIntercept_n + LRSlope_n * ai_arr_n;
}
// 相关系数平方
Corr_n = CoefficientRArray(NetValue_n_a, NetValueTrd_n_a);
// 字段71 RSquare R平方
CLZD_TRpt_n_a[71] = Corr_n * Corr_n;
}
//++++++++++++++++++++++++++++++++
// 第6组:成本与杠杆
//++++++++++++++++++++++++++++++++
// 字段81 MaxPosLev 最大持仓杠杆
CLZD_TRpt_n_a[81] = HighestArray(PosLev_n_a);
//++++++++++++++++++++++++++++++++
// 第7组:K线维度
//++++++++++++++++++++++++++++++++
// 字段91 TotalBars 时段总Bar数
CLZD_TRpt_n_a[91] = TotalBars_n;
}
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
//《《《《 LRpt字段计算 通过已有字段计算 》》》》
{
//++++++++++++++++++++++++++++++++
// 第3组:盈利能力
//++++++++++++++++++++++++++++++++
//-------------------------
// 字段23 NetProfit 总净利润
NetProfit_n = TotalWin_n + TotalLoss_n;
CLZD_TRpt_n_a[23] = NetProfit_n;
//-------------------------
// 字段28 NetValue 净值
NetValue_n = EndEQ_n / InitEQ_n;
CLZD_TRpt_n_a[28] = NetValue_n;
//-------------------------
// 字段29 GeoAnnualReturn 年化收益率(几何)
CLZD_TRpt_n_a[29] = Power(NetValue_n, 1 / Years_n) - 1;
// 字段30 AriAnnualReturn 年化收益率(算术)
CLZD_TRpt_n_a[30] = (NetValue_n - 1) / Years_n;
//-------------------------
// 字段31 AvgWin 平均盈利
If(WinTradeCnt_n > 0) CLZD_TRpt_n_a[31] = TotalWin_n / WinTradeCnt_n;
// 字段32 AvgLoss 平均亏损
If(LossTradeCnt_n > 0) CLZD_TRpt_n_a[32] = TotalLoss_n / LossTradeCnt_n;
// 字段33 AvgProfit 平均利润
If(TotalTradeCnt_n > 0) CLZD_TRpt_n_a[33] = NetProfit_n / TotalTradeCnt_n;
// 字段34 AvgWinRate 平均盈利率
CLZD_TRpt_n_a[34] = CLZD_TRpt_n_a[31] / InitEQ_n;
// 字段35 AvgLossRate 平均亏损率
CLZD_TRpt_n_a[35] = CLZD_TRpt_n_a[32] / InitEQ_n;
// 字段36 AvgProfitRate 平均利润率
CLZD_TRpt_n_a[36] = CLZD_TRpt_n_a[33] / InitEQ_n;
// 字段37 WinRate 胜率
If(TotalTradeCnt_n > 0) CLZD_TRpt_n_a[37] = WinTradeCnt_n / TotalTradeCnt_n;
// 字段38 EvenRate 保本率
If(TotalTradeCnt_n > 0) CLZD_TRpt_n_a[38] = EvenTradeCnt_n / TotalTradeCnt_n;
// 字段39 WinToLossRate 浮盈转亏损占比
If(TotalTradeCnt_n > 0) CLZD_TRpt_n_a[39] = WinToLossCnt_n / TotalTradeCnt_n;
// 字段40 PLRatio 盈亏比
If(Abs(CLZD_TRpt_n_a[32]) > 0) CLZD_TRpt_n_a[40] = CLZD_TRpt_n_a[31] / Abs(CLZD_TRpt_n_a[32]);
// 字段41 ProfitFactor 盈利因子
If(Abs(TotalLoss_n) > 0) CLZD_TRpt_n_a[41] = TotalWin_n / Abs(TotalLoss_n);
//++++++++++++++++++++++++++++++++
// 第4组:风险控制
//++++++++++++++++++++++++++++++++
//-------------------------
// 字段63 ProfitRiskRatio 收益风险比 = 年化收益率 / 最大回撤率
If(MaxDDRate_n > 0)
CLZD_TRpt_n_a[63] = CLZD_TRpt_n_a[29] / MaxDDRate_n;
// 字段64 ProfitDDRatio 利润回撤比 = 总净利润 / 最大回撤值
If(CLZD_TRpt_n_a[51] > 0)
CLZD_TRpt_n_a[64] = NetProfit_n / CLZD_TRpt_n_a[51];
//++++++++++++++++++++++++++++++++
// 第6组:成本与杠杆
//++++++++++++++++++++++++++++++++
// 字段83 CostRatio 成本占净利润比
If(NetProfit_n > 0)
CLZD_TRpt_n_a[83] = CLZD_TRpt_n_a[82] / NetProfit_n;
//++++++++++++++++++++++++++++++++
// 第7组:K线维度
//++++++++++++++++++++++++++++++++
// 字段97 HoldBars_avg 平均持仓Bar数
If(TotalTradeCnt_n > 0)
CLZD_TRpt_n_a[97] = HoldBars_n / TotalTradeCnt_n;
// 字段98 WinHoldBars_avg 盈利交易平均持仓Bar数
If(WinTradeCnt_n > 0)
CLZD_TRpt_n_a[98] = WinHoldBars_n / WinTradeCnt_n;
// 字段99 LossHoldBars_avg 亏损交易平均持仓Bar数
If(LossTradeCnt_n > 0)
CLZD_TRpt_n_a[99] = LossHoldBars_n / LossTradeCnt_n;
// 字段100 EvenHoldBars_avg 保本交易平均持仓Bar数
If(EvenTradeCnt_n > 0)
CLZD_TRpt_n_a[100] = EvenHoldBars_n / EvenTradeCnt_n;
// 字段101 WinToLossHoldBars_avg 浮盈转亏损交易平均持仓Bar数
If(WinToLossCnt_n > 0)
CLZD_TRpt_n_a[101] = WinToLossHoldBars_n / WinToLossCnt_n;
// 字段102 HoldBarsRatio 时段持仓占总时段比率
If(TotalBars_n > 0)
CLZD_TRpt_n_a[102] = HoldBars_n / TotalBars_n;
}
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
//》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
if(Debug_Switch_n == 1 And BarStatus == 2)
{
Print("\n CLZD_CalcTRpt 执行结束");
Print("}");
Print("/*-------------------------------------------*/");
}
Return 1;
End