模仿EA/指示器的刻度线 - 页 8 12345678 新评论 Alexey Navoykov 2013.07.07 14:56 #71 expertboss,你甚至需要一个2008年的服务器吗?在我看来,2003年的能力已经足够了,而且它对资源的要求不高,这意味着你可以选择更便宜的硬件。 [删除] 2013.07.07 15:32 #72 Meat:如果你的这个钟是一个专家(而不是一个指示器),那么很可能它只是简单的循环,所以它在多个符号上获取信息没有问题。这就是我之前写到的,专家顾问中的ticks确实没有什么大问题,因为它可以循环使用。但如果有一个指标,这个数字就不起作用了。至于不同的操作系统,对我来说仍然是个谜。正如我在上面写的,我在7号机上运行良好,但其他人由于某些原因没有这个功能。可能与访问权限有关......。顺便说一下,关于 "替换库",试着从WinXP(2003)中提取user32和kernel32文件,并把它们放在安装Vista(2008)的电脑上的 Experts\libraries文件夹中。如果成功了呢?:)...虽然我很怀疑... 我会直接告诉你滴答声,我是站在 "你这边 "的,但对于时钟,从你的回答来看,你没有理解我的想法,我将用代码来尝试。int init(){ ObjectCreate("ServerTime",OBJ_LABEL, 0,0,0,0;) ObjectSet("ServerTime", OBJPROP_CORNER, 3)。 ObjectSet("ServerTime", OBJPROP_XDISTANCE, 10)。 ObjectSet("ServerTime", OBJPROP_YDISTANCE, 37)。 ObjectSetText("ServerTime", "", 20, "Arial", Green)。返回。}int start(){ObjectSetText("ServerTime", TimeToStr( TimeCurrent(), TIME_SECONDS ))。...返回。}如果在 "市场观察 "窗口中只有一个符号,并为其创建了一个图表,那么时间和时间的更新也与图表中的刻度相一致,并相应地与专家顾问的工作相一致。如果在 "市场观察 "窗口中有几个符号,那么在 "市场观察:22:59:58 "标题中显示的小手表,那些时钟几乎一直在滴答作响,它们在某处滴答作响,由于我的货币对上的报价已经改变,所以我的时钟与那些时钟一致。 这是我的想法"""",如果这些所有的滴答作响可以被添加并应用到我的EA或EA工作的窗口中""。并最终获得比仅有一副报价多得多的虱子。亚历山大。我不想循环使用资源......。就是说,把所有报价中的所有点位合并到一个图表中? Emulation of ticks from Questions from Beginners MQL4 Help to modify time Рустам 2013.07.07 15:39 #73 你们这些人怎么会认为这是侵略行为?这只是提醒人们注意礼貌的原则。在你提供一些东西之前,你必须投入一些东西作为回报。如果你一无所有,你只能问,这就是事实。我对64位系统不是很有经验,但我对这个话题非常感兴趣,但由于我在这里无能为力,所以只能问知道的人。而且我不认为这有什么可耻之处。 [删除] 2013.07.07 16:07 #74 FAQ:你们这些人怎么会认为这是侵略行为?这只是提醒人们注意礼貌的原则。在你提供一些东西之前,你必须投入一些东西作为回报。如果你一无所有,你只能问,这就是事实。我对64位系统不是很有经验,但我对这个话题非常感兴趣,但由于我在这里无能为力,所以只能问知道的人。我看不出这有什么不对。 我想我被我的情绪所感染,但你是一个主持人,你要注意你的嘴巴,谢谢你的评论,我将努力冷却我的热情。再见。亚历山大。 Alexey Navoykov 2013.07.07 17:34 #75 expertboss:这里有一个想法"""",这些所有的刻度线是否可以加起来,并应用于我的专家顾问或专家顾问工作的窗口""。并最终获得了比只为一双鞋的报价多得多的签子。亚历山大。我不想循环使用资源......。也就是说,你想把所有报价中的所有点位合并到一个图表中?一个EA只对它自己的ticks做出反应,所以你不能 "添加 "任何东西。只有两个选择:要么你设置一个定时器(如我建议的那样),要么你在另一个图表上并行运行一个循环的EA,这将 "勾选 "你的EA。而在这个循环的EA中,你可以指定它将 "打勾 "的条件。例如,如果TimeCurrent() 的值发生了变化,就像你的情况一样。虽然,我再次看到,如果最初的EA(即你的时钟)可以做同样的事情,那么拥有一个额外的EA就没有意义。 Alexey Navoykov 2013.07.07 17:38 #76 实际上,我认为,解决所有问题的方法是找到内存中Start函数的地址 :)然后你可以想到很多东西,直到多线程程序的执行。 [删除] 2013.07.22 20:28 #77 我在以下计划中面临一个问题,当终端没有收到常规的刻度线,而定时器正在运行,分别是EA通过代码工作,在某些时候,EA开始发送错误的请求,例如关闭订单,结果在最后,服务器发送一个一般的错误 "2",然后是错误 "3",也可能通过订单号给出相同的,等等。我是这样摆脱困境的 """""""""""" if (OrdersTotal()==0){Alert ("Nothing to delete"); Sleep(1000);break;}// 如果没有订单,通过关闭"""""""""""""(exit while)退出循环,但你知道,这有点不正确。 问题:是否有可能制作某种命令或操作符(我甚至不知道该怎么称呼它)来暂停跳动,直到我们从服务器得到一个真实的 答复(例如true=OrderClose (OrderTicket(),....),然后像往常一样。当然,这是一个要求,只要有可能。 还有一个观察结果(我是在周末注意到的)--如果我移动图表,它就会返回到生成器的位置或一个普通的刻度,"EA "按钮已经被释放,没有刻度,图表仍然返回到这个位置,我已经从图表上删除了EA,这一切都停止了。 Sv.亚历山大。 xenon 2013.10.13 20:36 #78 Meat: 总之,这里是该功能的最终版本。 // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010; 据我所知,你使用PostMessageA(hwnd, RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1) 命令。这个命令模拟专家顾问的刻度线(根据WinUser32.h的描述)。对于指标来说,刻度线没有被模拟,因此指标也没有被更新。不幸的是,我没有WinXP系统进行测试,但如果指标的刻度在XP系统中被模拟出来,我很惊讶。 我还检查了你的算法 for (int i=0; i<ArraySize(value); i++) for (int j=0; j<len[i]; j++, byte++) TimerCode[byte/4] |= value[i]>>(8*j)&0xFF<<(byte%4*8); 在调试器VisualStudio下,我在TimerCode数组中得到的结果与预期结果完全不一致。你确定这个算法不包含错误吗?我可以给你代码和结果的截图。如果你愿意,我们可以更详细地讨论它。 Alexey Navoykov 2014.02.07 04:03 #79 虽然这个话题现在不是很实际,但我想还是有一些人不急于换成新的建筑:) 因此,如果有人在Win7/Win8中没有滴答计时器,你必须禁用DEP工具或添加这个功能。 #import "kernel32.dll" bool VirtualProtect(int lpAddress[], int dwSize, int flNewProtect, int& lpflOldProtect[]); 而最后这个变体。 int SetMyTimer(int interval=1000, int timerId=0) { int MT4InternMsg= RegisterWindowMessageA("MetaTrader4_Internal_Message"); int hWnd= WindowHandle(Symbol(),Period()); int PostMsgAddr= GetProcAddress(GetModuleHandleA("user32.dll"),"PostMessageA"); if (PostMsgAddr==0 || hWnd==0) return(0); static int TimerCode[7]; ArrayInitialize(TimerCode,0); int oldprotect[1]; VirtualProtect(TimerCode, ArraySize(TimerCode)*4, 0x40, oldprotect); // PAGE_EXECUTE_READWRITE // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010; int bytes[]={ 0x55, 0x8B,0xEC, 0x6A,01, 0x6A,02, 0x68,0000, 0x68,0000, 0xB8,0000, 0xFF,0xD0, 0x5D, 0xC2,0x10 }; int len[]= { 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 4, 1, 4, 1, 1, 1, 1, 2 }; bytes[8]=MT4InternMsg; bytes[10]=hWnd; bytes[12]=PostMsgAddr; int nbyte=0; for (int i=0; i<ArraySize(bytes); i++) for (int j=0; j<len[i]; j++, nbyte++) TimerCode[nbyte/4] |= bytes[i]>>(8*j)&0xFF<<(nbyte%4*8); timerId= SetTimer(hWnd, timerId, interval, TimerCode); return (timerId); } 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你的这个钟是一个专家(而不是一个指示器),那么很可能它只是简单的循环,所以它在多个符号上获取信息没有问题。这就是我之前写到的,专家顾问中的ticks确实没有什么大问题,因为它可以循环使用。但如果有一个指标,这个数字就不起作用了。
至于不同的操作系统,对我来说仍然是个谜。正如我在上面写的,我在7号机上运行良好,但其他人由于某些原因没有这个功能。可能与访问权限有关......。
顺便说一下,关于 "替换库",试着从WinXP(2003)中提取user32和kernel32文件,并把它们放在安装Vista(2008)的电脑上的 Experts\libraries文件夹中。如果成功了呢?:)...虽然我很怀疑...
我会直接告诉你滴答声,我是站在 "你这边 "的,但对于时钟,从你的回答来看,你没有理解我的想法,我将用代码来尝试。
int init()
{
ObjectCreate("ServerTime",OBJ_LABEL, 0,0,0,0;)
ObjectSet("ServerTime", OBJPROP_CORNER, 3)。
ObjectSet("ServerTime", OBJPROP_XDISTANCE, 10)。
ObjectSet("ServerTime", OBJPROP_YDISTANCE, 37)。
ObjectSetText("ServerTime", "", 20, "Arial", Green)。
返回。
}
int start()
{
...
返回。
}
我不想循环使用资源......。就是说,把所有报价中的所有点位合并到一个图表中?
你们这些人怎么会认为这是侵略行为?这只是提醒人们注意礼貌的原则。在你提供一些东西之前,你必须投入一些东西作为回报。如果你一无所有,你只能问,这就是事实。
我对64位系统不是很有经验,但我对这个话题非常感兴趣,但由于我在这里无能为力,所以只能问知道的人。而且我不认为这有什么可耻之处。
你们这些人怎么会认为这是侵略行为?这只是提醒人们注意礼貌的原则。在你提供一些东西之前,你必须投入一些东西作为回报。如果你一无所有,你只能问,这就是事实。
我对64位系统不是很有经验,但我对这个话题非常感兴趣,但由于我在这里无能为力,所以只能问知道的人。我看不出这有什么不对。
我想我被我的情绪所感染,但你是一个主持人,你要注意你的嘴巴,谢谢你的评论,我将努力冷却我的热情。
再见。亚历山大。
这里有一个想法"""",这些所有的刻度线是否可以加起来,并应用于我的专家顾问或专家顾问工作的窗口""。并最终获得了比只为一双鞋的报价多得多的签子。
我不想循环使用资源......。也就是说,你想把所有报价中的所有点位合并到一个图表中?
一个EA只对它自己的ticks做出反应,所以你不能 "添加 "任何东西。只有两个选择:要么你设置一个定时器(如我建议的那样),要么你在另一个图表上并行运行一个循环的EA,这将 "勾选 "你的EA。而在这个循环的EA中,你可以指定它将 "打勾 "的条件。例如,如果TimeCurrent() 的值发生了变化,就像你的情况一样。虽然,我再次看到,如果最初的EA(即你的时钟)可以做同样的事情,那么拥有一个额外的EA就没有意义。
总之,这里是该功能的最终版本。
// push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010;
据我所知,你使用PostMessageA(hwnd, RegisterWindowMessageA("MetaTrader4_Internal_Message"), 2, 1) 命令。这个命令模拟专家顾问的刻度线(根据WinUser32.h的描述)。对于指标来说,刻度线没有被模拟,因此指标也没有被更新。不幸的是,我没有WinXP系统进行测试,但如果指标的刻度在XP系统中被模拟出来,我很惊讶。
我还检查了你的算法
在调试器VisualStudio下,我在TimerCode数组中得到的结果与预期结果完全不一致。你确定这个算法不包含错误吗?我可以给你代码和结果的截图。如果你愿意,我们可以更详细地讨论它。
虽然这个话题现在不是很实际,但我想还是有一些人不急于换成新的建筑:) 因此,如果有人在Win7/Win8中没有滴答计时器,你必须禁用DEP工具或添加这个功能。
而最后这个变体。