首页 文章

无法将此自定义指标添加到Amibroker backtest报告中

提问于
浏览 461
1

我想添加一个额外的列来表示回溯测试报告中的波动性 .

这是我的代码 . 出现额外列 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 回答

  • 1

    自定义指标需要是标量(数字),而不是数组 . ATR(30) 是一个数组 . 因此,使用 LastValue 获取数组或Lookup的最后一个值以获取指定条形的值 . 通过静态变量将符号的ATR数组从第1阶段传递到第2阶段 . 然后在自定义度量标准行中使用lookup来在特定日期时间( trade.EntryDateTimetrade.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谁发布了答案在https://forum.amibroker.com/t/unable-to-add-this-custom-metric-to-backtest-report/7153/2他的答案发布在这里,没有参考发布是很粗鲁的 . 向fxshrat和Tomasz道歉 .

  • 0

    我发现你在没有提供参考的情况下逐行复制文本和代码解决方案 by others 真的很有趣 .

    你在stackoverflow发表的第二篇文章是由Tomasz和我一起回复 copy ,我在论坛上发表了 you 的论坛.amibroker.com

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

相关问题