测试可视化:帐户状态图表

Andrey Khatimlianskii | 29 二月, 2016

简介

我认为,以更详实的方式查看可视化模式下测试期间的帐户状态相关信息,不仅仅是我个人的愿望。
打开上一个仓位之前的自由保证金总量是多少?平衡曲线导向何处?最后一天资产净值亏损的规模?

部分问题已在文章 测试可视化:性能改善测试可视化:交易记录中讨论过。不过,内容并不包括快速简单地检视帐户信息的工具。本文中,我们将对在可视化模式下进行测试时用于绘制帐户状态图表的程序进行讨论。作为示例,我们将检查余额和资产净值图表。本文还包括了如何建立其他帐户属性的图表的说明。



是不是很简单呢?

有人会认为,有比编写显示余额的指标更简单的事情吗?仅有的缓冲区在接收柱时由最后已知的余额值所满足。这便是算法。
但存在一个问题:显示在测试可视图表上的指标没有访问 受测试 帐户状态的权限。所有负责此信息的函数返回 真实帐户的权限。
本文中,我们将学习如何避免这种“特性”。为此我们需要:

关于如何传递相关数据,我们将使用终端的全局变量,而对于如何将数据可视化,我们将使用定制指标的标准函数。



确实很简单!

我们需要把用于将余额保存至全局变量中的代码添加进需要进行测试的 Expert Advisor 中。我们需要的就是在函数 start() 的开始位置添加一行:

int start()
{
   // saving the last value of the balance into the global variable
   GlobalVariableSet( "vGrafBalance", AccountBalance() );
 
   // Expert Advisor code
 
   return(0);
}

指标代码则并不太难:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
 
double balance[];
 
int init()
{
    IndicatorShortName( "vGrafBalance" );
    IndicatorDigits( 2 );
 
    SetIndexStyle( 0, DRAW_LINE );
    SetIndexBuffer( 0, balance );
    SetIndexLabel( 0, "Balance" );
}
int start()
{
    balance[0] = GlobalVariableGet( "vGrafBalance" );
    return(0);
}

就这么简单!现在我们可以编译指标, Expert Advisor 的新版本然后开始测试!

点击 Start(开始)按钮并将指标附加至图表后,我们将看到大概这样的情况:




你可以看到,余额曲线反映真实的变化——结束每次交易时,其值改变。



还可以做些什么?

所有其他图形的构建方式相同:

注意,每个特性的变量名称必须是唯一的,即该名称不可与其他变量相同。
此外,该名称应与由指标读取的变量名称相同。


第二个示例表明如何将资产图表添加至余额图表。
Expert Advisor 代码为:

int start()
{
   // saving the last value of the balance into the global variable
   GlobalVariableSet( "vGrafBalance", AccountBalance() );
   // saving the last value of the equity into the global variable 
   GlobalVariableSet( "vGrafEquity", AccountEquity() );
 
   // Expert Advisor code
 
   return(0);
}


指标代码为:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
 
double equity[];
 
int init()
{
    IndicatorShortName( "vGrafEquity" );
    IndicatorDigits( 2 );
 
    SetIndexStyle( 0, DRAW_LINE );
    SetIndexBuffer( 0, equity );
    SetIndexLabel( 0, "Equity" );
}
int start()
{
    equity[0] = GlobalVariableGet( "vGrafEquity" );
    return(0);
}

应用示例:




我们可以将一个指标附加至另一个以检视两个特性之间的相关系数:




总结

本文介绍了创建指标和可视化帐户状态的过程。我们已经分析过最简单的指标——余额和资产指标。
你可以创建任何其他图形:获利交易百分比、预计获利、平均手数或仓位获利点数——应有尽有。

信息可以优美的姿态呈现出来!