代码之家  ›  专栏  ›  技术社区  ›  guagay_wk

无法将此自定义度量添加到Amibroker backtest报表

  •  1
  • guagay_wk  · 技术社区  · 7 年前

    我想在backtest报告中添加一个额外的列来指示波动性。

    这是我的密码。附加列 volatility_recent 显示,但列中不显示任何值。但是,如果我使用注释行 trade.AddCustomMetric( "proceeds", trade.Shares*trade.ExitPrice ); ,列中会显示一些数值。

    密码怎么了?

    if ( Status( "action" ) == actionPortfolio )
    {
        bo = GetBacktesterObject();
        // run default backtest procedure without generating the trade list
        bo.Backtest( True );
    
        volatility_recent = ATR(30);
    
        // iterate through closed trades
        for ( trade = bo.GetFirstTrade( ); trade; trade = bo.GetNextTrade( ) )
        {
            trade.AddCustomMetric( "volatility_recent", volatility_recent );
            //trade.AddCustomMetric( "proceeds", trade.Shares*trade.ExitPrice );
        }
    
        // iterate through open positions
        for ( trade = bo.GetFirstOpenPos( ); trade; trade = bo.GetNextOpenPos( ) )
        {       
    
            trade.AddCustomMetric( "volatility_recent", volatility_recent );
            //trade.AddCustomMetric( "proceeds", trade.Shares*trade.ExitPrice );
        }
    
        // generate trade list
        bo.ListTrades( );
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   fxshrat    6 年前

    我发现你复制文本和代码解决方案真的很有趣 其他人 一行接一行,不作参考。

    你在stackoverflow的第二个职位是逐行的 复制 我和托马斯对 在forum.amibroker.com

    https://forum.amibroker.com/t/unable-to-add-this-custom-metric-to-backtest-report/7153

        2
  •  1
  •   guagay_wk    6 年前

    自定义度量必须是标量(数字),而不是数组。 ATR(30) 是一个数组。所以,使用 LastValue 获取数组或查找的最后一个值以获取指定条上的值。通过静态变量将ATR符号数组从回溯测试的第一阶段传递到第二阶段。然后在自定义度量行中,使用lookup在特定日期时间提取数组元素( trade.EntryDateTime trade.ExitDateTime ).

    StaticVarSet( "CBT_ATR_" + Name(), ATR(30) );
    
    if ( Status( "action" ) == actionPortfolio )
    {
        bo = GetBacktesterObject();
        // run default backtest procedure without generating the trade list
        bo.Backtest( True );    
    
        // iterate through closed trades
        for ( trade = bo.GetFirstTrade( ); trade; trade = bo.GetNextTrade( ) )
        {
            trade.AddCustomMetric( "volatility_recent", Lookup( StaticVarGet( "CBT_ATR_" + trade.Symbol ), trade.ExitDateTime ) );
            //trade.AddCustomMetric( "proceeds", trade.Shares*trade.EntryPrice );
        }
    
        // iterate through open positions
        for ( trade = bo.GetFirstOpenPos( ); trade; trade = bo.GetNextOpenPos( ) )
        {       
    
            trade.AddCustomMetric( "volatility_recent", Lookup( StaticVarGet( "CBT_ATR_" + trade.Symbol ), Trade.ExitDateTime ) );
            //trade.AddCustomMetric( "proceeds", trade.Shares*trade.EntryPrice );
        }
    
        // generate trade list
        bo.ListTrades( );
    }
    

    编辑:该信用证归fxshrat所有,fxshrat将答案发布在 https://forum.amibroker.com/t/unable-to-add-this-custom-metric-to-backtest-report/7153/2 他的答案贴在这里,没有推荐信就发帖是不礼貌的。向fxshrat和Tomasz道歉。

    推荐文章