MetaTrader 5帮助交易操作高级用户选项自定义金融品种

自定义金融品种

交易平台允许创建自定义的金融交易品种。您可以查看这些交易品种的图表并执行技术分析,以及在策略测试中使用这些交易品种测试EA交易和指标。

如果您的交易商不提供您想进行策略测试的交易品种,或者提供的历史深度和价格历史质量不足,您可以创建一个自定义交易品种并为其上传所需的数据。

如何创建和配置自定义交易品种

通过“市场报价”窗口的快捷菜单打开交易品种管理窗口并点击“创建自定义交易品种”:

创建一个自定义金融品种

对于自定义交易品种,您可以从交易品种规格中配置一些参数以及一些额外参数:

  • 基础 ― 用于自定义交易品种的基本资产的名称。例如,黄金就是期货合约的基本资产。
  • 页面 ― 包含交易品种信息的网页。在市场报价窗口中查看交易品种属性时,这个页面将显示为一个链接。
  • 图表模式 ― 用于创建交易品种图表的价格,卖价或最后价。
  • 背景 ― 市场报价窗口中交易品种的背景色。
  • 计算锁仓预付款只收取单边交易手数大的 ― 该模式仅用于同时存在相同交易品种反向持仓的锁仓账户。交易品种预付款可以通过卖方预付款(全部卖出持仓和挂单)和买方预付款(全部买入持仓和发送单)进行计算。计算结果中的最高值用作最终预付款值。
  • 使用时间限制 ― 通过设置“Yes”,您可以指定这个交易品种交易期的第一个和最后一个交易日(循环周期)。

除了上述参数外,您还可以为这个交易品种配置交易和报价期。每天配置的时间段可以是不同的。双击某一天进行编辑。

自定义交易品种的交易和报价期

挪动滑块设置所需的时段。EA交易将无法在非交易期的策略测试中进行交易。

默认情况下,不会指定交易时段,它需要符合报价时段。如果您需要分别配置报价和交易期的时间,请使用“启用独立的交易期”选项。每个交易时段都要处于报价时段内。

  • 您可以通过复制任何相似品种的参数以及更改这些参数来快速配置您的自定义交易品种。在“复制自”字段选择一个现有的交易品种。
  • 自定义交易品种的名称不可与交易商提供的交易品种名称相同。如果您连接一台包含同名交易品种的服务器,那么自定义交易品种将被删除。
  • 交易品种名称只能包含拉丁字母不可含有标点符号,空格或特殊字符(仅可以包含".","_","&" 和 "#"符号)。不建议使用下列字符<,>,:,",/,|,?,*。

导入和导出自定义交易品种 #

您可以在您的平台之间轻松的共享自定义交易品种或转移交易品种。也可以从上面显示的设置编辑窗口导出或导入特定自定义交易品种的参数。

还可以导出和导入整个交易品种组:

导出和导入自定义交易品种组的设置

将设置导出至JSON文本文件:

{
"ConfigSymbols" : [
{
"Symbol" : "EURUSD_cust",
"Path" : "Custom\\Forex\\EURUSD_cust",
"ISIN" : "",
"Description" : "Euro vs US Dollar",
....

管理自定义交易品种 #

所有交易品种都显示在独立的自定义组。如果您需要更改或删除交易品种,请使用列表的快捷菜单:

创建,编辑和删除自定义交易品种

导入价格历史 #

您可以从任何文本文件以及MetaTrader 历史文件(HST)导入价格数据到您的自定义交易品种。Choose a symbol and go to the "Bars" or "Ticks" tab.

导入价格历史到自定义交易品种

在导入对话框中,指定到文件的路径并设置所需的参数:

  • 分隔符 ― 文本文件中的项目分隔符。
  • 跳过列和行 ― 导入过程中将要跳过的列数(从左向右)和行数(从上到下)。
  • 迁移 ― 时间迁移小时数。导入不同时区保存的数据时使用的选项。
  • 仅使用选定内容 ― 仅导入在行查看区域突出显示的行。您可以按住Ctrl或Shift键并用您的鼠标突出标记行。

1分钟柱文件应该有以下格式:日期 时间 开盘价 最高价 最低价 收盘价 报价量 交易量 点差。例如:

<DATE>        <TIME>      <OPEN>     <HIGH>     <LOW>      <CLOSE> <TICKVOL><VOL>    <SPREAD>
2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41

报价文件应该按照以下格式:日期 时间 卖价 买价 最后价 交易量。例如:

<DATE>          <TIME>          <BID>   <ASK>   <LAST>  <VOLUME>
2017.07.03      00:03:47.212    1.14175 1.14210 0.00000 0
2017.07.03      00:03:47.212    1.14168 1.14206 0.00000 0
2017.07.03      00:03:47.717    1.14175 1.14206 0.00000 0
2017.07.03      00:03:54.241    1.14175 1.14205 0.00000 0
2017.07.03      00:03:57.982    1.14165 1.14201 0.00000 0
2017.07.03      00:04:07.795    1.14175 1.14201 0.00000 0
2017.07.03      00:04:55.432    1.14164 1.14200 0.00000 0
2017.07.03      00:14:33.743    1.14173 1.14203 0.00000 0
2017.07.03      00:14:33.743    1.14173 1.14201 0.00000 0
2017.07.03      00:16:44.901    1.14174 1.14195 0.00000 0

不要传递报价标识,因为程序端会在导入期间对其计算。

您可以使用任何现有品种的数据应用于您的自定义交易品种。导出数据,必要情况下进行修改再将其导回。

  • 价格历史以一分钟柱的形式进行存储。其他所有时间周期都基于这些柱来创建。您也可以导入较高时间周期的数据,但这种情况下较低周期的图表将会出现差别。例如,如果您导入一小时数据,按小时显示的柱形图将会出现在M1图表上。
  • 导入期间,时间间隔完全由指定文件的数据所替代。例如,如果文件包含从2016.01.01 00:00:00 到 2016.06.01 00:00:00的数据,并且自定义交易品种历史在这个时间段已经有了一些数据,那么这些数据将完全由新数据所替代(即使导入的数据量少于历史数据量)。
  • 导入柱形图时,如果在导入文件中存在重复条目(相同时间的柱形图)则被认为出现错误。在这个平台上,只有一个柱形图可以对应一分钟。当导入报价时,几个报价可以有完全相同的参数。
  • 不导入小于或等于零的值。
  • 导入期间,用户必须在文件中提供正确的报价顺序,例如从早期到最近的报价。

自定义交易品种的价格数据保存在独立的自定义目录中(不在交易服务器数据存储的目录中):

C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

编辑价格历史 #

您可以手动编辑柱形图和自定义交易品种报价的历史。为此,请在“柱形图”或“报价”标签请求所需的数据间隔。

  • 双击来改变数值。
  • 使用快捷菜单来添加或删除条目。
  • 如果您想要一次性删除多个柱形图/报价,请用鼠标选择它们,按住Shift键或Ctrl+Shift键。

编辑柱形图时,强烈建议请求M1时间周期的数据。价格历史以1分钟柱形图的形式存储在平台中。其他所有时间周期都基于这些柱来创建。即使您最开始请求另一个时间周期的柱形图,那么所有变化都将应用于对应的1分钟柱形图。例如,如果您请求的是M5时间周期的数据并且编辑一个柱形图,那么5个1分钟柱形图将被1分钟柱形图所替代(对应开始的M5柱形图)。这意味着编辑的间隔将被完全替代。

手动编辑1分钟柱形图和报价数据

为了方便起见,更改的条目会按照以下方式突出显示:

  • 红色背景表示条目错误(例如,最高价低于最低价)
  • 绿色背景表示正确的修改条目
  • 灰色背景意味着已删除的条目
  • 黄色背景表示已添加的条目
  • 当添加新柱形图时,当前选择数据的第一个未占用的日期/时间会被自动插入到“日期“栏。
  • 这个平台不允许创建相同日期/时间的柱形图。只有一个柱形图可以对应一分钟。

若要保存这些更改,请点击窗口底部的“应用更改”。

使用自定义金融品种

自定义交易品种的用法类似于使用交易商提供的品种。自定义交易品种显示在市场报价窗口;您可以打开这种交易品种的图表并在这里使用指标和分析对象。

含有技术指标的自定义交易品种价格图表

使用自定义交易品种进行测试

自定义交易品种不可以执行真实交易,但是它们可以用于在策略测试中测试自动交易和指标。选择一个自定义交易品种并开始测试:

测试自定义交易品种的自动交易

计算测试期间执行交易的预付款和利润时,策略测试可以自动使用账户中可用的交叉汇率。例如,如果利润货币是EUR而账户货币是USD,那么测试将根据EURUSD对应的汇率进行转换。

通常,自定义交易品种的名称会包括各种后缀,例如EURUSD.1 或 EURUSD.f。因此,策略测试会使用一种特定的机制去搜索用于重新计算的合适的交叉率。

例如,我们在外汇预付款计算类型下创建一个自定义交易品种AUDCAD.custom,而我们的账户货币为美元。基于外汇工具的名称,测试器会根据以下顺序搜索所需的交易品种:

  1. 首先,测试器会搜索AUDUSD.custom(用于预付款计算)和USDCAD.custom(用于利润计算)这类交易品种。
  2. 如果这些交易品种一个也没有找到,测试器会搜索第一个交易品种,其名称对应于所需的货币对,例如AUDUSD和USDCAD。如果它找到了AUDUSD.b和USDCAD.b,那么这些交易品种的汇率将被用于预付款和利润的计算之中。

对于拥有其他预付款计算类型(期货,股票交易)的交易品种,则需要一个货币对把交易品种货币转换成入金货币。例如,我们创建一个自定义交易品种,设置英镑(GBP)为利润和预付款货币,而瑞士法郎(CHF)用作入金货币。在这种情况下,会按照以下顺序搜索要测试的交易品种:I

  1. 检查GBPCHF(GBP vs CHF)对应的交易工具的可用性。
  2. 如果这个交易品种无法使用,测试器将会搜索GBPCHF货币对对应的第一个交易工具,例如GBPCHF.b或GBPCHF.def。
  • 当通过自定义品种测试应用程序时,请确保账户具备所有必要的货币对。否则,将无法计算测试期间金融结果和预付款要求。
  • 使用MQL5 云网络进行优化是不可以使用自定义交易品种的。 这是因为同名但不同价格的自定义交易品种可能存在于不同交易者的计算机。除了网络代理之间测试结果的差异以外,这可能导致大量重载和同步历史数据,从而造成网络的过度使用。可以使用本地网络代理远程代理

带有实时报价的合成交易品种

交易平台允许创建合成金融工具,即基于一个或多个现有工具的交易品种。用户可以设置计算报价的公式,之后平台将会生成实时合成工具的报价并创建分钟历史记录。

如何工作

  • 您创建合成工具并设置价格计算公式。
  • 如果公式中使用的工具至少有一个的价格发生变化,那么平台会以每秒10次的频率计算报价。
  • 平台还可以根据公式中使用的工具一分钟柱来计算一分钟柱的历史记录。根据生成的合成工具报价,所有新柱都将实时绘制(当前柱和后面的柱)。

例如,您可以创建一个工具显示美元指数(USDX)。它使用下面的公式:

50.14348112*pow(ask(EURUSD),-0.576)*pow(USDJPY,0.136)*pow(ask(GBPUSD),-0.119)*pow(USDCAD,0.091)*pow(USDSEK,0.042)*pow(USDCHF,0.036)

平台将根据您交易商提供的其他六个交易品种报价来计算新工具的实时价格。价格变化将在市场报价窗口和图表上显示:

市场报价及图表中的合成工具

若要创建一个新的自定义交易品种,请打开其规格窗口并指定公式:

带有公式的工具规格

当合成工具添加到市场报价时,开始计算这个工具的报价1分钟柱。同时,所有需要计算合成价格的交易品种都会自动添加到市场报价。有关开始计算的条目也将被添加到平台的日志:合成交易品种USDX:处理已开始。

  • 合成工具从市场报价移除后,计算停止。
  • 当前用于计算合成交易品种价格的交易品种不可以在市场报价中隐藏。

实时计算报价 #

每100毫秒检查一次计算中使用的交易品种价格(即每秒10次)。如果至少一次发生变化,那么就会计算合成交易品种的价格并且生成新报价。计算在三个线程中并行执行:卖价,买价和最后价。例如,如果计算公式是EURUSD*GBPUSD,那么合成交易品种的价格将按照以下规则计算:

  • Bid = bid(EURUSD)*bid(GBPUSD)
  • Ask = ask(EURUSD)*ask(GBPUSD)
  • Last = last(EURUSD)*last(GBPUSD)

并分别针对每个价格检查更改的有效性。例如,如果源工具只更改了卖价,那么也只会计算合成工具相应的价格。

创建1分钟柱的历史记录 #

除了收集实时报价之外,这个平台还会创建合成工具的1分钟历史记录。使交易者能够查看与正常图表类似的合成交易品种图表,并使用对象和指标进行技术分析。

当交易者向市场报价添加合成工具时,平台将检查计算的分钟历史记录是否存在。如果不存在,那么将会创建最近60天的历史记录,其中包含50, 000个柱形图。如果平台设置中图表允许最多柱参数指定的值较低,那么将会应用相应的限制。如果这个周期内一些柱形图创建的时间较早,那么该平台将会额外生成新柱形图。

创建最近60天的柱形图之后,平台将继续在后台模式创建更深入的历史信息。在合成公式中使用的每一个交易品种都可以有不同深度的价格历史。因此,计算是对最短的可用周期来执行。例如,公式使用三个交易品种:

  • EURUSD 历史最早可以追溯回2009.01.01
  • USDJPY历史最早可以追溯回2012.06.01
  • EURJPY历史最早可以追溯回2014.06.01

这种情况下,合成交易品种历史的计算周期将从2014.06.01到现在。从这个日期开始将额外排除100分钟,来确保计算的完整性(如果有任何分钟柱不可用在历史中,那么计算中会使用前一分钟柱)。

合成工具的一分钟柱历史记录还可以根据公式中使用工具的一分钟柱(不是报价)进行计算。例如,若要计算合成交易品种1分钟柱的开盘价,平台会使用其公式中使用的交易品种的开盘价。最高价,最低价和收盘价也是以相同的方式进行计算。

如果所需的柱形图不适用于任何工具,那么平台将使用之前柱形图的收盘价。例如,EURUSD,USDJPY和GBPUSD这三个工具被使用。如果计算12:00对应的柱形图时USDJPY所需的柱形图不能使用,那么下面的价格将会用于计算:

  • Open: EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
  • High: EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
  • Low: EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
  • Close: EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

如果分钟柱不能用于公式中使用的所有工具,那么合成工具对应的分钟柱也不会被计算。

创建分钟柱形图

所有合成工具的新柱都将根据生成的报价进行创建(当前柱和后面的柱)。用于创建柱形图的价格取决于规格中的“图表模式”参数:

合成工具的图表模式

交易品种公式允许哪些操作?

价格数据和交易商提供的现有交易品种的一些属性可以用于计算合成价格。指定下面信息:

  • 交易品种名称 ― 取决于要被计算的合成价格,要使用的指定工具的卖价,买价或最后价。例如,如果工具指定EURUSD*GBPUSD,那么卖价计算为bid(EURUSD)*bid(GBPUSD),买价= ask(EURUSD)*ask(GBPUSD)。
  • 卖价(交易品种名称)― 指定交易品种的卖价将被强制用于计算合成工具的卖价。这个选项与之前选项类似(在之前没有指定价格类型)。
  • 买价(交易品种名称)― 指定交易品种的买价将被用于计算合成工具的买价。指定工具的卖价将被用于计算买价。指定交易品种的最后价将被用于计算最后价。如果ask(EURUSD)*GBPUSD被指定,那么下面计算将被使用:
  • Bid = ask(EURUSD)*bid(GBPUSD)
  • Ask = bid(EURUSD)*ask(GBPUSD)
  • Last = last(EURUSD)*last(GBPUSD)
  • 最后价(交易品种名称) ― 指定交易品种的最后价将被用于合成工具所有价格的计算(卖价,买价和最后价)。如果last(EURUSD)*GBPUSD被指定,那么下面计算将被使用:
  • Bid = last(EURUSD)*bid(GBPUSD)
  • Ask = last(EURUSD)*ask(GBPUSD)
  • Last = last(EURUSD)*last(GBPUSD)
  • 交易量(交易品种名称) ― 公式中将要使用的指定工具的报价交易量。请确保交易量信息与交易商提供的该交易品种相符。
  • 点差(交易品种名称)― 计算时将会使用的指定工具的最小价格变化。
  • 小数位(交易品种名称) ― 公式中将要使用的指定交易品种价格的小数位数。

如果交易品种名称复杂(包含连字符,点等等),请一定要以引号标记。例如:"RTS-6.17"。

下面的算术运算可以在公式中使用:加法 (+),减法 (-),乘法(*),除法(/) 和除法余数 (%)。例如,EURUSD+GBPUSD意味着这个价格的计算是EURUSD 和GBPUSD价格总和。您也可以使用减号来改变符号,例如:-10*EURUSD。

请注意数学运算的优先规则:

  • 首先执行的是乘法运算,除法运算和余数运算,然后执行加法运算和减法运算。
  • 运算顺序为自左向右。如果这个公式使用了多个且优先级相同的运算符号(例如,乘法和除法),那么将先从左边开始执行运算。
  • 您可以使用括号来改变运算的优先规则。括号内的运算是数学运算的最高级别。同样也是按照自左向右的顺序来执行:左侧括号内的运算优先执行。

您可以在公式中使用常数:

  • 数字类型(整型和浮点型)。例如:EURUSD*2+GBPUSD*0.7.
  • 交易品种属性 _Digits和 _Point。它们在公式中加入了来自规格的自定义交易品种的适当属性。_Digits意味着工具价格的小数位数;_Point 意味着交易品种价格的最小变化。

您还可以在公式中使用除了MathSrand,MathRand和MathIsValidNuber以外,MQL5中支持的所有其他数学函数

函数

描述

fabs(number)

返回传递到函数的数字绝对值(modulo value)。

acos(number)

返回弧度中半径的反余弦值

asin(number)

返回弧度中半径的反正弦值

atan(number)

返回弧度中半径的反正切值

ceil(number)

返回最近的上整数

cos(number)

返回数字的余弦值

exp(number)

返回数字的指数值

floor(number)

返回最近的下整数

log(number)

返回自然对数

log10(number)

返回以10为基数的对数

fmax(number1, number2)

返回两个数值的最高值

fmin(number1, number2)

返回两个数值的最低值

fmod(dividend, divisor)

返回两个数字相除的真实余数

pow(base, power)

将基数提高到指定能力

round(number)

四舍五入数字到最接近的整数

sin(number)

返回数字的正弦值

sqrt(number)

返回平方根

tan(number)

返回数字的正切值

expm1(number)

返回表达式exp(number)-1的值

log1p(number)

返回表达式log(1+number)的值

acosh(number)

返回双曲反余弦值

asinh(number)

返回双曲反正弦值

atanh(number)

返回双曲反正切值

cosh(number)

返回双曲余弦值

sinh(number)

返回双曲正弦值

tanh(number)

返回双曲正切值