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


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


老师大咖好,我有个股票策略想请大家帮忙写代码,很简单的策略。
策略代码检查不出问题,是否有专门的人帮忙看源码问题?
老师大咖好,我有个期货策略想请大家帮忙写代码,很简单的策略。
老师大咖好,我有个期货策略想请大家帮忙写代码,谢谢。
量化看盘理啥都没有
有偿编写 现有文华代码 想用开拓者平台编写 有兴趣请联系我
请教老师,关于套利,自己系统如何与帮助中的代码结合
套利合约代码不存在,普通合约可以下单,是通道问题吗?
关于回测数据不准的问题
新手小白一个,想着用量化软件,但是啥也不懂,以前都是手动