//Function CMqlTimer.OnRolloverDaybool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------////Work variablesstring MessageText; //Text for messageint UserEventID; //Identifier of the user event bool Result; //Returned importance//----------------------------------------------------------------------------//
Result = true;
ResetLastError();
RolloverCountDay = RolloverCountDay+1;
UserEventID = CHARTEVENT_CUSTOM+15;
MessageText = StringFormat("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chartEventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);
//Checking for presence of the errorsif(_LastError!=0)
//В результате работы произошла ошибка
{
Result = false;
}
//----------------------------------------------------------------------------//return(Result);
//----------------------------------------------------------------------------//
}
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------////----------------------------------------------------------------------------//// Processing user events ////----------------------------------------------------------------------------//if(id>CHARTEVENT_CUSTOM)
//User event is received
{
Expert.OnEvent(id,lparam,dparam,sparam);
}
//----------------------------------------------------------------------------//
}
我在某个论坛上读到,测试期间的评论不会被写入日志(为了节省磁盘空间)。因此,我的问题是:我怎样才能在测试器中调试程序?我试过printf和PrintFormat--在测试器中没有任何作用,我甚至试过Alert。
已检查。我的经纪人是本地人(至少在本地列出了)。在"每滴答"模式下运行专家顾问后,"日志 "选项卡的内容与代理日志文件的内容一致(专家顾问和日志文件附后)。
是的,我忘了。测试期为 "上个月"。
你的日志说"'test.ex5'的调试版本,请重新编译"。
这意味着,用于调试的EX5(在编辑器中按F5会产生带有调试信息的EX5)不能在测试器中运行。
我们将对此类EA进行自动重新编译。同时,手动重新编译你的EA。
你能带来完整的代码吗?
而且我可能已经把整个事情提出来了,我想不出任何其他的原因......
我将尝试更详细地描述这种情况。
有一个简单的类"CMqlTimer", 这个类的任务是跟踪不同时间间隔的变化时刻:小时、天、周、月、年。
一切都以非常简单的原始方式实现,例如,如果分钟数等于0,那么 "新的小时 "已经到来;如果一周的天数与存储在变量中的天数不一致,那么一天的交替(服务器时间为 "00:00:00")已经到来。如此下去。
分析是在定时器被触发时进行的,间隔时间为1秒,该工作在CMqlTimer::OnTimer()中完成。如果时间间隔发生变化,必须执行该函数。例如,如果它是一个 "新 "的一天,函数CMqlTimer::OnRolloverDay()应该被执行。
如果我们删除其余的代码,只写OnRolloverDay(),结果将是如下。
所有的用户事件 都被跟踪,并传递给主类进行处理
它看起来像这样
所以,在测试模式下,事件不能到达OnChartEvent,也就是说,专家顾问不能处理在测试模式下使用 EventChartCustom 发送的事件。 通过显示日志中的所有事件进行了检查。
PS
最有趣的是,演示中所有的事件都达到了,但在测试器中却工作得很糟糕。
在319之前,所有的工作和在测试器中,事件被成功地处理。真正的最后一个版本,它的工作原理我不能说...
你的日志说"'test.ex5'的调试版本,请重新编译"。
这意味着,用于调试的EX5(在编辑器中按F5会产生带有调试信息的EX5)不能在测试器中运行。
我们将对此类EA进行自动重新编译。同时,手动重新编译你的EA。
而且我可能已经把整个事情提出来了,我想不出任何其他的原因......
我将尝试更详细地描述这种情况。
...我不明白哪里出了问题,EA在测试器中工作没有错误,在组织者的测试机中也没有错误通过。
当我在模拟账户上运行它时,当我试图打开一个订单时,我得到一个错误。
2010.09.06 13:26:50 交易 '101894' : 未能在84.179处即时买入0.10 USDJPY [不支持的填充模式] 。
2010.09.06 13:26:45 交易 '101894' : 未能在1.03689即时买入0.10 USDCAD [不支持的填补模式]
2010.09.06 13:26:39 交易 '101894' : 未能在84.174即时买入0.10 USDJPY [不支持的填充模式]
2010.09.06 13:26:34 交易 '101894' : 未能在1.03685即时买入0.10 USDCAD [不支持的填补模式]
2010.09.06 13:26:28 交易 '101894' : 未能在84.174即时买入0.10 USDJPY [不支持的填充模式]
2010.09.06 13:26:23 交易 '101894' : 未能在1.03688即时买入0.10 USDCAD [不支持的填补模式]
2010.09.06 13:26:18 交易 '101894' : 未能在84.181即时买入0.10 USDJPY [不支持的填充模式]
卖出请求。
要求购买。
OrderCheck没有发现任何错误。
用ORDER_ FILLING_ AON查询代替ORDER_FILLING_ CANCEL 查询,专家工作。
但问题仍然存在,为什么在测试者和服务器的操作上有如此大的差异。
如果冠军服务器变成相反的方式,那真是个笑话。