mql5 - 自上一次交易后一定时间内的垂直线 - 页 2 1234567 新评论 renatmt5 2019.03.19 11:48 #11 Vladimir Karputov:我想澄清一下 "最后交易 "这个词。 它是当前一天内的最后一笔交易吗?还是在过去的N天里?24小时内的最后一笔交易--你不需要再去追溯历史。 Vladimir Karputov 2019.03.19 12:01 #12 renatmt5:24小时内的最后一笔交易--没有必要再去了解这个故事了。下面是它的工作原理。 该指标使用代码从OBJ_VLINE 帮助中创建、移动和删除一条垂直线。(到目前为止,只有行的创建在指标中起作用)。行名在输入参数"垂直行名"中设置。 竖线是在OnOnit()中创建的。 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping VLineCreate(0,InpVLineName); //--- return(INIT_SUCCEEDED); } 为了尽量减少负荷,我们每分钟询问一次历史数据。为了这个目的,让我们在程序的全局变量区域(在本例中,在指标中)声明变量ExtLastMove //--- datetime ExtLastMove=0; // "0" -> D'1970.01.01 00:00'; - 这个变量将存储最后一次访问交易历史的时间。 然后在OnCalculate()中,我们将存储的时间ExtLastMove 减去当前时间(使用任何TimeCurrent 符号的最后一次报价时间),如果差异小于60秒,我们 就退出。 //--- datetime time_current=TimeCurrent(); if(time_current-ExtLastMove<60) // 60 seconds return(rates_total); ExtLastMove=time_current; 如果差异较大,那么我们就将一个新的时间 记录到ExtLastMove 中。 使用LastProfitForPeriod()可以访问交易历史。 这里使用了两个日期:从和到。到 "日期被设置为未来(当前时间加一天),"从 "日期通过 从当前时间减去24小时得到。 datetime from_date = time_current-60*60*24; // time one day ago datetime to_date = time_current+60*60*24; // time from the future :) double last_profit = LastProfitForPeriod(from_date,to_date); Comment("Last profit: ",DoubleToString(last_profit,2)); 暂时就这么多了,这是个很大的文本... 附加的文件: Last_deal_Move_Vertical_line.mq5 17 kb renatmt5 2019.03.19 13:08 #13 Vladimir,非常感谢你的代码,特别是对其片段的评论 我不明白的是,为什么我们需要to_date等于未来?可能是到现在为止?看来,我们无法确定未来的交易结果:)还是我们需要未来的这一天来划定未来时间的界限? 另一个关于循环的问题。 据我所知,我们加载一个包含交易数据的数组,并从零交易到最后一个交易的数组中进行循环,将时间与最后写入的时间进行比较,如果交易时间较晚,则覆盖变量last_time。或者反过来说--数组可以从末端搜索?实际上,数组的最后一个元素将是我们需要数据的最后一个关闭的交易? 也许我犯了一些逻辑上的错误--请不要过于苛责 :) renatmt5 2019.03.19 13:11 #14 意味着for(uint i=0;i<total;i++) 改为for(uint i=total;i>=0;i--) renatmt5 2019.03.19 13:12 #15 事实上,你也不需要一个循环--你只需访问数组中 序号为i=total的元素即可。 Vladimir Karputov 2019.03.19 13:18 #16 我只是不明白为什么我们需要to_date等于未来的敲门?我们需要这种方式。要获得保证的 "从 "和 "到 "当前时间。 或者,也许有可能从末尾搜索阵列? 如果任务是找到最后一笔交易,那么数组必须经过并精确寻找时间--以防发生意外或内部内核逻辑被改变,交易将被随机重置。 renatmt5 2019.03.19 13:31 #17 Vladimir Karputov:这是做的方法。要保证得到 "从 "和到当前时间。 如果任务是找到最后一笔交易,那么阵列必须经过并寻找准确的时间--以防发生什么事情或内部内核逻辑发生变化,交易将被随机丢弃。好的,知道了。原则上,考虑到24小时历史的限制,在翻阅数据时显然不会有明显的负荷 :) Vladimir Karputov 2019.03.19 13:36 #18 renatmt5:好的,知道了。原则上,考虑到24小时的历史限制,在翻阅数据时显然不会有任何明显的工作量 :)所以,最后的润色是根据所获利润来移动线。 你还记得那里的搬家规则是什么吗? renatmt5 2019.03.19 13:43 #19 我没有理解错,last_time和result是我们要处理的变量。其结果决定了该线将被转移(重绘)到未来多少时间。然后,"本期 利润 "代码块应放在 "移动垂直线 "块之前,以便在考虑到最后一笔交易数据的情况下移动该线。,这是否正确或我混淆了什么? Vladimir Karputov 2019.03.19 13:44 #20 这里解释一下为什么将来要做 "之前 "的参数。 关于交易、自动交易系统和交易策略测试的论坛 错误、漏洞、问题 Renat Fatkhullin, 2016.11.04 12:43 千万不要把TimeCurrent()作为结束日期,要把TimeCurrent()+86400作为结束日期,以确保所有结束交易都被捕获。TimeCurrent不是准确的最后时间,而是 "更新期间最后已知的 服务器时间",这并不是100%准确。特别是在开始时。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想澄清一下 "最后交易 "这个词。
它是当前一天内的最后一笔交易吗?还是在过去的N天里?
24小时内的最后一笔交易--你不需要再去追溯历史。
24小时内的最后一笔交易--没有必要再去了解这个故事了。
下面是它的工作原理。
该指标使用代码从OBJ_VLINE 帮助中创建、移动和删除一条垂直线。(到目前为止,只有行的创建在指标中起作用)。行名在输入参数"垂直行名"中设置。
竖线是在OnOnit()中创建的。
为了尽量减少负荷,我们每分钟询问一次历史数据。为了这个目的,让我们在程序的全局变量区域(在本例中,在指标中)声明变量ExtLastMove
- 这个变量将存储最后一次访问交易历史的时间。
然后在OnCalculate()中,我们将存储的时间ExtLastMove 减去当前时间(使用任何TimeCurrent 符号的最后一次报价时间),如果差异小于60秒,我们 就退出。
如果差异较大,那么我们就将一个新的时间 记录到ExtLastMove 中。
使用LastProfitForPeriod()可以访问交易历史。
这里使用了两个日期:从和到。到 "日期被设置为未来(当前时间加一天),"从 "日期通过 从当前时间减去24小时得到。
暂时就这么多了,这是个很大的文本...
我不明白的是,为什么我们需要to_date等于未来?可能是到现在为止?看来,我们无法确定未来的交易结果:)还是我们需要未来的这一天来划定未来时间的界限?
另一个关于循环的问题。
据我所知,我们加载一个包含交易数据的数组,并从零交易到最后一个交易的数组中进行循环,将时间与最后写入的时间进行比较,如果交易时间较晚,则覆盖变量last_time。或者反过来说--数组可以从末端搜索?实际上,数组的最后一个元素将是我们需要数据的最后一个关闭的交易?
也许我犯了一些逻辑上的错误--请不要过于苛责 :)
我们需要这种方式。要获得保证的 "从 "和 "到 "当前时间。
或者,也许有可能从末尾搜索阵列?
如果任务是找到最后一笔交易,那么数组必须经过并精确寻找时间--以防发生意外或内部内核逻辑被改变,交易将被随机重置。
这是做的方法。要保证得到 "从 "和到当前时间。
如果任务是找到最后一笔交易,那么阵列必须经过并寻找准确的时间--以防发生什么事情或内部内核逻辑发生变化,交易将被随机丢弃。
好的,知道了。原则上,考虑到24小时历史的限制,在翻阅数据时显然不会有明显的负荷 :)
好的,知道了。原则上,考虑到24小时的历史限制,在翻阅数据时显然不会有任何明显的工作量 :)
所以,最后的润色是根据所获利润来移动线。
你还记得那里的搬家规则是什么吗?
,这是否正确或我混淆了什么?
这里解释一下为什么将来要做 "之前 "的参数。
关于交易、自动交易系统和交易策略测试的论坛
错误、漏洞、问题
Renat Fatkhullin, 2016.11.04 12:43
千万不要把TimeCurrent()作为结束日期,要把TimeCurrent()+86400作为结束日期,以确保所有结束交易都被捕获。
TimeCurrent不是准确的最后时间,而是 "更新期间最后已知的 服务器时间",这并不是100%准确。特别是在开始时。