交易平台允许创建自定义的金融交易品种。您可以查看这些交易品种的图表并执行技术分析,以及在策略测试中使用这些交易品种测试EA交易和指标。
如果您的交易商不提供您想进行策略测试的交易品种,或者提供的历史深度和价格历史质量不足,您可以创建一个自定义交易品种并为其上传所需的数据。
通过“市场报价”窗口的快捷菜单打开交易品种管理窗口并点击“创建自定义交易品种”:
对于自定义交易品种,您可以从交易品种规格中配置一些参数以及一些额外参数:
除了上述参数外,您还可以为这个交易品种配置交易和报价期。每天配置的时间段可以是不同的。双击某一天进行编辑。
挪动滑块设置所需的时段。EA交易将无法在非交易期的策略测试中进行交易。
默认情况下,不会指定交易时段,它需要符合报价时段。如果您需要分别配置报价和交易期的时间,请使用“启用独立的交易期”选项。每个交易时段都要处于报价时段内。
|
您可以在您的平台之间轻松的共享自定义交易品种或转移交易品种。也可以从上面显示的设置编辑窗口导出或导入特定自定义交易品种的参数。
还可以导出和导入整个交易品种组:
将设置导出至JSON文本文件:
{
|
所有交易品种都显示在独立的自定义组。如果您需要更改或删除交易品种,请使用列表的快捷菜单:
您可以从任何文本文件以及MetaTrader 历史文件(HST)导入价格数据到您的自定义交易品种。Choose a symbol and go to the "Bars" or "Ticks" tab.
在导入对话框中,指定到文件的路径并设置所需的参数:
1分钟柱文件应该有以下格式:日期 时间 开盘价 最高价 最低价 收盘价 报价量 交易量 点差。例如:
<DATE> <TIME> <OPEN> <HIGH> <LOW> <CLOSE> <TICKVOL><VOL> <SPREAD>
|
报价文件应该按照以下格式:日期 时间 卖价 买价 最后价 交易量。例如:
<DATE> <TIME> <BID> <ASK> <LAST> <VOLUME>
|
不要传递报价标识,因为程序端会在导入期间对其计算。
您可以使用任何现有品种的数据应用于您的自定义交易品种。导出数据,必要情况下进行修改再将其导回。
|
自定义交易品种的价格数据保存在独立的自定义目录中(不在交易服务器数据存储的目录中):
C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom |
您可以手动编辑柱形图和自定义交易品种报价的历史。为此,请在“柱形图”或“报价”标签请求所需的数据间隔。
编辑柱形图时,强烈建议请求M1时间周期的数据。价格历史以1分钟柱形图的形式存储在平台中。其他所有时间周期都基于这些柱来创建。即使您最开始请求另一个时间周期的柱形图,那么所有变化都将应用于对应的1分钟柱形图。例如,如果您请求的是M5时间周期的数据并且编辑一个柱形图,那么5个1分钟柱形图将被1分钟柱形图所替代(对应开始的M5柱形图)。这意味着编辑的间隔将被完全替代。 |
为了方便起见,更改的条目会按照以下方式突出显示:
|
若要保存这些更改,请点击窗口底部的“应用更改”。
自定义交易品种的用法类似于使用交易商提供的品种。自定义交易品种显示在市场报价窗口;您可以打开这种交易品种的图表并在这里使用指标和分析对象。
自定义交易品种不可以执行真实交易,但是它们可以用于在策略测试中测试自动交易和指标。选择一个自定义交易品种并开始测试:
计算测试期间执行交易的预付款和利润时,策略测试可以自动使用账户中可用的交叉汇率。例如,如果利润货币是EUR而账户货币是USD,那么测试将根据EURUSD对应的汇率进行转换。
通常,自定义交易品种的名称会包括各种后缀,例如EURUSD.1 或 EURUSD.f。因此,策略测试会使用一种特定的机制去搜索用于重新计算的合适的交叉率。
例如,我们在外汇预付款计算类型下创建一个自定义交易品种AUDCAD.custom,而我们的账户货币为美元。基于外汇工具的名称,测试器会根据以下顺序搜索所需的交易品种:
对于拥有其他预付款计算类型(期货,股票交易)的交易品种,则需要一个货币对把交易品种货币转换成入金货币。例如,我们创建一个自定义交易品种,设置英镑(GBP)为利润和预付款货币,而瑞士法郎(CHF)用作入金货币。在这种情况下,会按照以下顺序搜索要测试的交易品种:I
带有实时报价的合成交易品种
交易平台允许创建合成金融工具,即基于一个或多个现有工具的交易品种。用户可以设置计算报价的公式,之后平台将会生成实时合成工具的报价并创建分钟历史记录。
例如,您可以创建一个工具显示美元指数(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,那么合成交易品种的价格将按照以下规则计算:
并分别针对每个价格检查更改的有效性。例如,如果源工具只更改了卖价,那么也只会计算合成工具相应的价格。
除了收集实时报价之外,这个平台还会创建合成工具的1分钟历史记录。使交易者能够查看与正常图表类似的合成交易品种图表,并使用对象和指标进行技术分析。
当交易者向市场报价添加合成工具时,平台将检查计算的分钟历史记录是否存在。如果不存在,那么将会创建最近60天的历史记录,其中包含50, 000个柱形图。如果平台设置中图表允许最多柱参数指定的值较低,那么将会应用相应的限制。如果这个周期内一些柱形图创建的时间较早,那么该平台将会额外生成新柱形图。
创建最近60天的柱形图之后,平台将继续在后台模式创建更深入的历史信息。在合成公式中使用的每一个交易品种都可以有不同深度的价格历史。因此,计算是对最短的可用周期来执行。例如,公式使用三个交易品种:
这种情况下,合成交易品种历史的计算周期将从2014.06.01到现在。从这个日期开始将额外排除100分钟,来确保计算的完整性(如果有任何分钟柱不可用在历史中,那么计算中会使用前一分钟柱)。
合成工具的一分钟柱历史记录还可以根据公式中使用工具的一分钟柱(不是报价)进行计算。例如,若要计算合成交易品种1分钟柱的开盘价,平台会使用其公式中使用的交易品种的开盘价。最高价,最低价和收盘价也是以相同的方式进行计算。
如果所需的柱形图不适用于任何工具,那么平台将使用之前柱形图的收盘价。例如,EURUSD,USDJPY和GBPUSD这三个工具被使用。如果计算12:00对应的柱形图时USDJPY所需的柱形图不能使用,那么下面的价格将会用于计算:
如果分钟柱不能用于公式中使用的所有工具,那么合成工具对应的分钟柱也不会被计算。
所有合成工具的新柱都将根据生成的报价进行创建(当前柱和后面的柱)。用于创建柱形图的价格取决于规格中的“图表模式”参数:
价格数据和交易商提供的现有交易品种的一些属性可以用于计算合成价格。指定下面信息:
如果交易品种名称复杂(包含连字符,点等等),请一定要以引号标记。例如:"RTS-6.17"。 |
下面的算术运算可以在公式中使用:加法 (+),减法 (-),乘法(*),除法(/) 和除法余数 (%)。例如,EURUSD+GBPUSD意味着这个价格的计算是EURUSD 和GBPUSD价格总和。您也可以使用减号来改变符号,例如:-10*EURUSD。
请注意数学运算的优先规则:
您可以在公式中使用常数:
您还可以在公式中使用除了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) |
返回双曲正切值 |