有兴趣自己写回测系统的 可以参考以下代码,大家也帮忙看看有啥问题

//------------------------------------------------------------------------ // 简称: 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

连编译都通过不了,这代码一看ai,ai目前还搞不定的

回复:我错了,这个是函数

你让AI写出坨屎山代码,然后让“大家”来帮你改错?自己一点不想费力啊!

回复:问题是里边有错吗?没有啊 傻不拉几的,看都没看