下载MetaTrader 5

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

29 二月 2016, 11:56
Andrey Khatimlianskii
0
540

简介

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

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



是不是很简单呢?

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

  • 从 Expert Advisor 接收帐户状态相关的信息;
  • 传递给指标然后将其可视化。

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



确实很简单!

我们需要把用于将余额保存至全局变量中的代码添加进需要进行测试的 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 内添加一行以更新必要的全局变量的值;
  • 创建一个简单指标,用以读取该变量值并将其反映到图表上。

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


第二个示例表明如何将资产图表添加至余额图表。
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);
}

应用示例:




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




总结

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

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

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/1487

非标准自动交易 非标准自动交易

不进行深入市场分析便使用 MT4 平台成功且舒适地交易——这可能吗?这种交易可以在现实中实施吗?我想,是的。特别对于自动交易,更是如此!

MQL4 语言入门。简单词组中的难题。 MQL4 语言入门。简单词组中的难题。

这是"MQL4 语言入门"系列的第二篇文章。现在我们将探讨该语言更复杂、更高级的构造,学习新内容,并了解如何将它们应用到日常实践中。您将了解新循环类型"while",新条件类型"switch",运算符 "break"和"continue"。此外,我们将学习编写您自己的函数和使用多维数组。作为餐前甜点,我还准备了一份有关预处理器的说明。

MT4TerminalSync - MetaTrader 4 终端的同步系统 MT4TerminalSync - MetaTrader 4 终端的同步系统

本文围绕"使用操作系统功能和其他程序开发方法扩大 MQL4 程序功能"这一主题展开。本文将介绍一个程序系统示例,该程序系统将基于单一源模板实施多个终端副本同步的任务。

逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。 逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。

逐步说明如何通过 CSV 文件组织 MetaTrader 4 与 Matlab 之间的数据数组交换。