|
在开始策略测试之前,需要设置参数。需要完成以下内容:
- 选中交易并设定输入数据
- 选择商品和它的周期
- 选择修改方式
- 设定测试时间范围
测试和优化交易,在终端内可以应用特有"测试"窗口。所有参数可以在 "设置" 窗口设置。
智能交易和它的参数在 "测试 --智能交易" 选择测试的交易。在这里可以选择任何交易文件。 选择交易完成后,必须指定在/EXPERTS 文件夹内。
选择交易后,可以添加测试参数和输入数据。按"交易属性"按钮即可完成。随后,新窗口内会显示以下三个标签:
- 测试 -- 通常情况下测试参数会在这里设定。在相应的部分会给出最初存款量和保证金。 在测试过程中存款会在交易中运行操作。对于不同仓位类型有相应的测试,如下: 多头 --只打开看涨仓位;空头--只打开卖空仓位; 多头和空头--打开看涨和卖空仓位。交易的运算是在开仓的指定管理下进行的。包括初始运算最佳化和选择被优化的参数。
- 输入数据 -- 所有输入数据列表会显现。可变的输入数据会直接影响客户端内的交易行为。在定单中没有必要改变交易代码来改变交易参数。 输入数据的总体变量取决于交易。在测试时,交易的输入数据会在 "流量"中限定。 "开始","步骤"和"停止" 的动作不会影响交易测试和 它的参数最优化。 详细的使用参数查看"最佳化设定"部分。
- 最佳化 -- 在这个标签内的参数的改变将不会影响单独交易的测试。
商品和它的周期交易测试不仅仅需要选择交易并设定。还需要选择商品和测试周期(时间范围)。这些数据会应用到测试中。测试时,在终端可以选择任意商品或应用外部数据文件。 以*.FXT格式储存于/TESTER文件中的历史数据会应用到测试中。如果在终端内选定商品,这些文件会在测试时自动创建。如果应用外部数据,需要手动保存相应信息到/TESTER文件,并且禁止"重新估算"输入新数据覆盖。
商品测试的时间范围会在 "周期"显示。如果商品没有数据文件,周期和模型方法也不会存在,它将会自动创建。若需要的文件已经创建完毕, "重新估算" 选项将会开启。如果对于商品和周期没有历史数据,测试将会自动下载最近512历史条。
注意: 如果商品所需的数据在最近512条之外,历史数据将会自动下载最后可用的数据。
模型方法历史数据在终端内仅以条的形式储存,会以TOHLCV (HST格式)呈现。这些数据会应用到价格改变的模型中。一些情况下,一些信息不能满足测试。例如,对于每日的时间范围等等。
终端可以使用历史数据模型的多种方法测试交易。从较小的周期使用历史数据,可能看到价位的波动等等,例如,当被测试的交易是一个小时的数据,那价位的变动是一分钟的数据。由于,模型的历史数据接近真实的价位波动,使得交易测试更为真实。
以下的三种模型方法的任意一个可以关闭测试:
- 只开价(最快的方法去分析完整条)
一些机械交易系统不取决于模型条的属性,它们需要在完整条上交易。如果下一个条显现说明这个条是完整的。
在这种模式下,模型条会第一个打开 (开仓 = 最高值 = 最低值= 平仓, 成交量=1)交易能够准确地识别在前面位置的 完整条。刚开始的条会应用到交易的开始测试中。下一步, 当前完整条将会给出,但测试不会执行! - 检测点 (应用最近的时间范围和不规则图形碎片插入)
检测点模型是利用对于交易利润的粗糙估算和内部条进行的。对于这种方法可用的最近的历史数据时间范围会显示。多数情况下,最近的时间范围可用数据不能完整覆盖测试的时间范围。如果最近时间范围的数据丢失,接下来的工作条在平仓后形成先前的12工作条。那就意味着内部条的改变将会与最后的12个周期相同。这就是不规则图形碎片插入。
最近时间范围显现后,对于新数据不规则图形碎片插入将被显示。但不是应用先前的12个条,而是6个。 意味着真正存在的开仓,最高值,最低值和平仓将会重新产生。 两个形成价格的价值和位置取决于先前的6个工作条。 - 全部信用(在带有全部信用的不规则图形碎片可用的时间范围基础上) 这是一个极其精确的内部工作条。与"检测点"不同,它不仅最近的时间范围数据,而是利用最近时间范围的可用数据。另外,如果在相同时间内对于相同时间段数据多于一个周期,最近的时间范围数据将会被应用到模型中。与检测点相似的是同样利用不规则图形碎片插入。有可能出现一些相近的信用效仿其他。这种情况下,双倍的开价会被滤除。
值得考虑的是大量应用数据。它会影响到交易系统的消耗和测试速度。
注意:- 如果最近时间范围没有可用数据覆盖测试,换而言之,结果不够精确,建议不要在全部信用上开启测试;
- 在检测点上的模型是在交易最佳化的基础上,全部信用模型是为了关闭测试。
模型的质量可以在 "报告"窗口检查。 对了检测"模型质量",颜色条可以呈现。模型质量有以下三种颜色:
- 灰色 -- 这个部分的可用数据不会参与到测试中。如果测试的日期范围被指定灰色会显示;
- 红色 --在这个空间内模型没有执行,由于最近时间范围内的数据丢失。 另外, 只有在最近时间范围内选中的才会应用;
- 绿色 -- 在这个空间内模型已经被执行。颜色的明暗度也有差别,颜色越亮说明模型质量越佳。
在模型参数和日期范围改变后,数据文件必须重新创建。可以使用"重新估算"。如果设置没有发生改变,将无需重新估算。这种情况下,建议禁止定单减少测试时间。
时间范围时间范围可以允许不测试交易全部可用数据,但需要内部中心时间。如果需要测试历史数据的中心部分,它会充分发挥它的益处。时间范围不仅仅可以应用到交易测试中,也可以使用在模型条的测试中。它无需模拟全部历史的数据,可以广泛的应用全部信用的数据。这就是数据范围可以在最初测试模型设置的原因。数据会连续从指标估算的定单中进入,并记录为历史。必须记录下最先的100条将不被模拟。这个界限不取决于日期限定。
允许日期范围限定,可以使用"应用日期"来指定所需要的时间"起始于" 和"截止到"。所有设置完成后,按 "开始"按钮即可开始测试。 在测试开始后,在窗口的下端可以查看接近完成的时间。
测试直观化如果"直观化"被允许,在点击"开始"按钮后,图表将会自动打开,图表上的模型将会运行。重放速度可以控制。重放也可以按"||"按钮推迟。重新点击此键将会继续运行按快捷键F12可以立即显示下一个信用。直观化能够跳过中心日期。在需要的日期设定后点击"跳到"就会显现所需要的页面。
注意: 如果"最佳化"允许, 交易参数就会被优化,而不是测试,按 "开始"按钮即可。
测试结果在测试完成后,能够在"结果", "图表", "报告"和 "日志"标签中查看结果。
结果所有交易业务执行的信息会以以下类表呈现:
- # -- 交易业务的次序数字;
- 时间 --交易业务执行的时间;
- 类型 -- 交易类型(卖,买,止损,赢利,修改,平仓等等。);
- 定单 -- 交易仓或挂单交易的数票 ;
- 份额 --交易份额的总数;
- 价格 -- 交易中的商品价格;
- S/L -- 止损定单。在这个标签内没有意味着没有止损定单;
- T/P --赢利定单。在这个标签内没有意味着没有赢利定单;
- 获利 -- 盈利/亏损。在平仓后盈利/亏损会显现;
- 差额 --价值差额。只有在平仓后价值差额才会显现。
可以把鼠标放在数组上方点击鼠标左键,就可以减少或增加定单。 应用"复制"按钮或快捷键Ctrl+C,可以复制所选结果到写字板。以便将来应用。如果没有选择需要数组,整个文件会被复制到写字板内,按"全部复制"操作即可。结果报告可以以HTML 文件保存到硬盘内。可以使用"保存报告为"操作。 "设置日期 "起始于""和 "设置日期"截止到""允许设定时间间隔。另外,所选择的时间会写入到 "应用起始日期:"和 "应用截至日期:" 在测试设置 窗口。
图表通常开仓账户的状态(绿色线为 "份额")会自动画在"图表"标签内。如果只有平衡线显示在图表内,意味着在测试周期内"差额" 和 "份额"处于平衡状态。图表可以使交易测试直观化。如果在测试过程中份额大小有所改变,改变的份额大小会在图表底部显示。 在图表处双击鼠标左键转换 "结果"标签选取相应线路。运用"复制"键或快捷键Ctrl+C,复制到写字板以便应用于其他。图表也可以作为GIF文件储存在硬盘内。可以使用"图片保存为"或快捷键Ctrl+S。 "设置日期 "起始于""和 "设置日期 "截止到""允许设定时间间隔。另外,所选择的时间会写入到 "应用起始日期:"和"应用截至日期:" 在测试设置 窗口。
报告交易测试形成的结果和一些键会在 "报告"标签内呈现。包含以下测试结果和一些主要参数:
- 测试的棒图 -- 历史的棒图的数量;
- Tick 模型 --在测试时,Tick模型的数量;
- 模型的质量 -- Tick模型质量的百分比值。模型是显示下一个报告的简图。有三种颜色:
- 灰色 -- 这部分的数据没有被测试。如果这些数据在测试设置部分给出,将以灰色显示。
- 红色 -- 在这个区域内短时期内没有数据模型可以执行。 另外,只有在 测试设置部分选中的数据才可以应用;
- 绿色 -- 在这个区域已经执行的模型。另外,颜色微亮些的部分,是质量模型。 例如,当在H1范围内测试时,深绿色的一组意味着数据测试的时间段为M30,亮绿色则表示时间段为M1;
注意: 如果应用最快的方法("开价") 在 测试设置部分应用模型,所有数组将会变红。另外, "n/a" -- 模型还未被执行 -- 会被写入 "模型的质量"标签内; - 初始存款 -- 初始存款数量;
- 总净利润 -- 盈利减去亏损的数值;
- 总获利 --所有盈利交易的盈利总额;
- 总损失 --所有有亏损交易的亏损总额;
- 利润因子 --盈利减去亏损的百分比比率。意思就是说总体赢利与总体损失相同;
- 预计盈利 -- 通过数学运算来预计盈利。换而言之,是利用统计的估算方法预测交易中的赢利/损失显示平均数。 还可以通过它估算下一场交易的赢利/损失;
- 亏损绝对值 --在余额下最大亏损值;
- 亏损最大值 (%) -- 亏损交易的最大值的百分比率;
- 交易总计 -- 总计交易的数量;
- 空头头寸 (盈利 %) -- 建立空头头寸的数量和其中盈利的百分比;
- 多头头寸(盈利 % ) -- 建立多头头寸的数量和其中盈利的百分比;
- 盈利交易(与总交易数量的%) -- 盈利头寸的数量及其占总交易数量的百分比;
- 损失交易(与总交易数量的%) -- 亏损头寸的数量及其占总交易数量的百分比;
- 最大的获利交易 -- 最大盈利的交易;
- 最大的亏损交易 --最大亏损的交易;
- 平均盈利 -- 每一笔交易的平均盈利;
- 平均亏损 -- 每一笔交易的平均亏损;
- 最大连续盈利(盈利金额) -- 最大的连续盈利交易及其总和金额;
- 最大连续损失(亏损金额) -- 最大的连续亏损交易及其总和金额;
- 最大连续盈利(盈利次数) -- 最大的连续盈利交易及其总次数;
- 最大连续损失(亏损次数) -- 最大的连续亏损交易及其总次数;
- 平均连续盈利 -- 连续盈利交易的平均数;
- 平均连续损失 -- 连续损失交易的平均数。
复制报告到写字板,报告可以以HTML文件形式保存在硬盘内。 可以使用"复制" "保存报告"执行操作,或按快捷键 Ctrl+C保存,功效相同。
"日志"标签所有交易业务和相关的交易测试进程都会自动公布在"日志" 标签内。 日志更倾向于 "终端 --智能交易" 窗口,除了在智能系统测试而不是在市场真实操作期间发布的信息以外,该日志与终端窗口的日志相同。在测试结束之后。数据输出在单独的文件夹TESTER/LOGS。 测试日志保存在文件夹/EXPERTS/LOGS,文件名称与相应的日期记录相符--YYYYMMDD.LOG。查看现有记录,选中文件执行"打开"操作。可以复制当前记录到写字板。当执行"全部删除"时,所有的记录将从目录中删除。
FXT 格式的历史文件测试者应用*.FXT 文件形成柱状图。每一个形成柱状的连线记录会在状态栏上呈现。 当运用模型柱时,如果它刚开始形成,测试者从这个文件中选择新的模型柱并更新前边的模型柱或另外增添。
测试/优化时可以拒绝标准柱的模式化并使用自己的数据文件。 为此必须禁止 "重新估算"并把所必需的FXT文件放入/TESTER/HISTORY文件夹.文件名必须以 "[商品名称][周期时段]_[模型类型 (0 -- 按照每个tick, 1 --按照检测点, 2 -- 按照开价)].FXT" (不带空格)格式显示. 例如,它可以是 "EURUSD1440_1.FXT"在"EURUSD" 是商品保证金的位置 "1440" D1 (1440 分钟, 24 小时)的时段, 并且 "1"意思是检测点标准化。
下面给出一个简短的格式描述。它是带有主题开始的:
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct TestHistoryHeader
{
int version; // 404
char copyright[64]; // copyright
char symbol[12];
int period;
int model; // for what modeling type was the ticks sequence generated
int bars; // amount of bars in history
time_t fromdate; // ticks generated from this date
time_t todate; // ticks generating stopped at this date
double modelquality; // modeling quality
//---- general parameters
char currency[12]; // currency base
int spread;
int digits;
double point;
int lot_min; // minimum lot size
int lot_max; // maximum lot size
int lot_step;
int stops_level; // stops level value
int gtc_pendings; // instruction to close pending orders at the end of day
//---- profit calculation parameters
double contract_size; // contract size
double tick_value; // value of one tick
double tick_size; // size of one tick
int profit_mode; // profit calculation mode { PROFIT_CALC_FOREX, PROFIT_CALC_CFD, PROFIT_CALC_FUTURES }
//---- swap calculation
int swap_enable; // enable swap
int swap_type; // type of swap { SWAP_BY_POINTS, SWAP_BY_DOLLARS, SWAP_BY_INTEREST }
double swap_long;
double swap_short; // swap overnight value
int swap_rollover3days; // three-days swap rollover
//---- margin calculation
int leverage; // leverage
int free_margin_mode; // free margin calculation mode { MARGIN_DONT_USE, MARGIN_USE_ALL, MARGIN_USE_PROFIT, MARGIN_USE_LOSS }
int margin_mode; // margin calculation mode { MARGIN_CALC_FOREX,MARGIN_CALC_CFD,MARGIN_CALC_FUTURES,MARGIN_CALC_CFDINDEX };
int margin_stopout; // margin stopout level
int margin_stopout_mode;// stop out check mode { MARGIN_TYPE_PERCENT, MARGIN_TYPE_CURRENCY }
double margin_initial; // margin requirements
double margin_maintenance; // margin maintenance requirements
double margin_hedged; // margin requirements for hedged positions
double margin_divider; // margin divider
char margin_currency[12];// margin currency
//---- commission calculation
double comm_base; // basic commission
int comm_type; // basic commission type { COMM_TYPE_MONEY, COMM_TYPE_PIPS, COMM_TYPE_PERCENT }
int comm_lots; // commission per lot or per deal { COMMISSION_PER_LOT, COMMISSION_PER_DEAL }
//---- for internal use
int from_bar; // fromdate bar number
int to_bar; // todate bar number
int start_period[6]; // number of bar at which the smaller period modeling started
int set_from; // begin date from tester settings
int set_to; // end date from tester settings
//----
int freeze_level; // order's freeze level in points
//----
int reserved[61];
};
然后,模型柱的安排如下:
#pragma pack(push,1)
struct TestHistory
{
time_t otm; // bar time
double open; // OHLCV values
double low;
double high;
double close;
double volume;
time_t ctm; // the current time within a bar
int flag; // flag to launch an expert (0 - bar will be modified, but the expert will not be launched)
};
#pragma pack(pop) |
|