初学者的问题 MQL5 MT5 MetaTrader 5 - 页 763 1...756757758759760761762763764765766767768769770...1503 新评论 Aleksey Vyazmikin 2017.07.21 00:03 #7621 Vitaly Muzichenko:在循环中似乎是这样的,你可以不使用这个功能谢谢你。然而,删除了该功能 - 刹车仍然....。该死的。 Vitaly Muzichenko 2017.07.21 00:15 #7622 Aleksey Vyazmikin:谢谢。然而,删除了该功能 - 刹车仍然....。该死的。我曾经从4=>5开始重写程序,然后在4中,我把Low[1]、Time[0]等所有结构都换成了现代结构,即CopyLow、CopyTime,程序在4中也变得更快了。我现在不使用旧的结构,只使用新的结构。因此,代码很容易移植到第5个平台上,你只需要改变交易功能 即可。 Aleksey Vyazmikin 2017.07.21 00:20 #7623 Vitaly Muzichenko:一旦我开始从4=>5重写程序,然后我把所有的结构,如Low[1],Time[0]和其他结构替换成现代结构,即CopyLow,CopyTime,程序甚至在4中也变得更快。我现在不使用旧的结构,只使用新的结构。因此,代码很容易移植到第5个平台上,你只需要改变交易功能 即可。 在每次打喷嚏时填充阵列 不是一种资源消耗吗? 也许在酒吧开业时将信息复制到数组中,然后随着代码的展开从那里获取信息是有意义的?我在酒吧开业时进行交易。 Vitaly Muzichenko 2017.07.21 00:29 #7624 Aleksey Vyazmikin: 每次打喷嚏都要填充一个数组,难道不消耗资源吗? 也许在条形图打开时将信息复制到数组中,然后随着代码的进行从那里获取信息是有意义的?我在酒吧开业时进行交易。数组可以在一个新的条形上填充,它将消耗较少的资源。如果你在多个地方使用iLow[1],你应该把它存储在一个变量中一次,然后读取它而不是数组。假设这// Инициализация TIME[0] TIME[1] ArraySetAsSeries(TM,true); if(CopyTime(dSymbol,Period(),0,2,TM)<0) return; TIME_0=TM[0]; TIME_1=TM[1]; 然后我们用变量TIME_0和TIME_1而不是TM[0]和TM[1] 工作。 Aleksey Vyazmikin 2017.07.21 00:35 #7625 Vitaly Muzichenko:阵列可以在一个新的条形上填充,它将占用更少的资源。例如,如果你在多个地方使用iLow[1],最好是把它一次写入一个变量,然后读取变量而不是数组。假设如此但是,MT4还是要快得多--我很失望。 Alexey Viktorov 2017.07.21 16:14 #7626 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 Aleksey Vyazmikin, 2017.07.21 15:07 你为什么要幻想呢?我理解了你的想法,并确认它是有效的,如果请求发生一次,如果知道EA需要多少个柱子才能工作,就会有效果。 或者你建议用不同的方式来使用这个结构? 那么请解释,但不要被冒犯!你的建议是什么?没有幻想。如果你需要获得一个蜡烛图的2个或更多参数,那么使用你的信息/问题中的函数,我们需要为蜡烛图的每个参数分别调用这些函数。这是2次或更多次产生Copy***(),但使用CopyRates()你只需要调用一次Copy。至于要复制的数量,这是另一个问题。也许我们应该先计算出包含所需指标值的条形图,然后再复制它。如果我没记错的话,说的是一个未知量的复制。我们谈论的是什么样的幻想?在极端情况下,我们可以复制,比如说,10条,然后在其中搜索。 如果没有找到,我们再复制10条。复制是一个耗时的操作,复制一个数组会更便宜。一般来说,有很多的变化。你不能把所有这些都写进文档,那就根本不是文档了。他们在编程课上教这个。但不幸的是,并不是所有的老师都能做到,也不是所有的学生都想在课上理解。而最开始是在2-5年级的算术课上,老师要求对问题进行详细解释。但这里的问题是一样的。 Aleksey Vyazmikin 2017.07.21 17:09 #7627 Alexey Viktorov: 没有花哨的东西。如果你需要获得一个蜡烛图的2个或更多参数,那么使用你的信息/问题中的函数,你应该为每个蜡烛图参数分别调用这些函数。这是2次或更多次执行Copy***(),但使用CopyRates()你只需要调用一次Copy。至于要复制的数量,这是另一个问题。也许,我们应该先计算出指标的所需值在哪个条形上,然后再复制它。如果我没记错的话,说的是一个未知量的复制。我们谈论的是什么样的幻想?而且,作为最后的手段,我们可以复制,比如说,10个小节,然后在其中搜索,如果找不到,我们再复制10个小节。复制是一个相当昂贵的操作;在数组中搜索会更便宜。在这种情况下有很多变种。所有这些都不能写进文档;实际上,它不会再是文档了。他们在编程课上教这个。但是,不幸的是,不是所有的老师都知道如何做,也不是所有的学生都想在课上了解它。而最开始是在2-5年级的算术课上,老师要求对问题进行详细解释。但这里的问题是一样的。关于幻想--是对你说的 "你没有试图理解所说的话,弄清楚你得到的东西,而是提出一些令人难以置信的反对意见 "的回应,而不是对你提供的版本是来自幻想领域的事实的回应。 我完全理解你的概念,它蕴含在对你的回应中。 然而,我不太明白你建议如何处理未知的数据量--你能以代码的形式给我一个例子吗? Aleksey Vyazmikin 2017.07.22 00:38 #7628 请帮助审核和优化指标,使用这个链接https://www.mql5.com/ru/code/16805 - 麻烦的是,当出现大量的条形图时,指标开始变得很慢 - 在测试时显示出来。我想知道如何使其工作,使其不在每个tick上计算,而只在bar opening上计算?专家顾问的方法并不合适--在第一个刻度线之后,所有的数值都消失了,只在下一个柱子上出现...。 Donchian Channel MTF 投票: 132016.12.13Mladen Rakicwww.mql5.com Мультитаймфреймовая версия канала Дончиана. Alexey Viktorov 2017.07.22 07:20 #7629 Aleksey Vyazmikin:关于幻想--这是对你说的 "不试图理解所说的内容,了解什么会成功,而是推出一些令人难以置信的反对意见 "的回应,而不是说你提出的方案来自幻想领域。 我完全理解你的概念,它蕴含在对你的回应中。 然而,我不太明白你建议如何处理未知的数据量--你能以代码的形式给我一个例子吗? 回答是在...阿列克谢-维克多罗夫。作为最后的手段,你可以复制,比如说,一次复制10条,然后在其中搜索;如果你没有找到,你再复制10条。复制是昂贵的操作,在数组中搜索会更便宜。但我们最好不要试图从数组中获得最大数量的条数,而是尽量用一份来做。我不打算写一个代码样本。一个正常的程序员只需要一个提示。下面是一个算法的样本。确定通道被穿过的大致条数。让它成为15。复制指标的两个缓冲区。使用CopyRates()复制条形图的值。在循环中,我们开始比较通道的上限和高条的值,同时将低条与通道的下限进行比较。如果发现其中一个交叉点,则将条形索引存储在一个变量中,然后我们继续寻找第二个交叉点。当相交条的两个变量都有值时,我们退出循环。因此,必要时可以在一个副本和一个周期内找到两个交叉点。在ArraySetAsSeries() 中甚至没有必要,因为在寻找交叉点时,有可能,而且在我看来,最好是记住酒吧的时间,而不是它的编号。虽然,知道了酒吧的时间,确定其数量并不困难。问题:在一个周期内,是复制指标缓冲区的1个值和复制高位栏的1个值并比较这些值,还是单次复制一定量并将两个数组的值相互比较,哪个更快? Vladimir Karputov 2017.07.22 09:29 #7630 昨天刚写了这个。任务。在每个tick 上得到 "InpCountCopy "元素open, high, low, close和time。实施。从 "0 "到 "InpCountCopy-1 "的循环 - 循环每次获得一个开放、高、低、关闭和时间。一次,我们将 "InpCountCopy "元素放入MqlRates结构中,然后循环浏览该结构。特点。你可以选择检查的方式:在OnTick或在OnTimer(1秒)。//+------------------------------------------------------------------+ //| Copy OHLC vc Copy Rates.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.001" //--- input parameter input int InpCountCopy=1000; input bool OnTickOnTimer=false; // OnTickOnTimer: false -> OnTick, true -> OnTimer 1 second //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(OnTickOnTimer) EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(OnTickOnTimer) return; Testing(); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { if(!OnTickOnTimer) return; Testing(); } //+------------------------------------------------------------------+ //| Main function | //+------------------------------------------------------------------+ void Testing() { //--- for once one element ulong start=GetMicrosecondCount(); for(int i=0;i<InpCountCopy;i++) // in one operation we get one element. { double open=iOpen(i); double high=iHigh(i); double low=iLow(i); double close=iClose(i); datetime time=iTime(i); } ulong end=GetMicrosecondCount()-start; string text=(OnTickOnTimer)?"OnTimer":"OnTick"; text=text+"\n"+"OHLC: "+IntegerToString(end); //--- for one operation we get "InpCountCopy" elements. start=GetMicrosecondCount(); MqlRates Rates[]; if(!iRates(Rates,0,InpCountCopy)) return; for(int i=0;i<InpCountCopy;i++) { double open=Rates[i].open; double high=Rates[i].high; double low=Rates[i].low; double close=Rates[i].close; datetime time=Rates[i].time; } end=GetMicrosecondCount()-start; text=text+"\n"+"Rates: "+IntegerToString(end); Comment(text); } //+------------------------------------------------------------------+ //| Get Open for specified bar index | //+------------------------------------------------------------------+ double iOpen(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double Open[1]; double open=0; int copied=CopyOpen(symbol,timeframe,index,1,Open); if(copied==1) open=Open[0]; return(open); } //+------------------------------------------------------------------+ //| Get the High for specified bar index | //+------------------------------------------------------------------+ double iHigh(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double High[1]; double high=0; int copied=CopyHigh(symbol,timeframe,index,1,High); if(copied==1) high=High[0]; return(high); } //+------------------------------------------------------------------+ //| Get Low for specified bar index | //+------------------------------------------------------------------+ double iLow(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double Low[1]; double low=0; int copied=CopyLow(symbol,timeframe,index,1,Low); if(copied==1) low=Low[0]; return(low); } //+------------------------------------------------------------------+ //| Get Close for specified bar index | //+------------------------------------------------------------------+ double iClose(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); double Close[1]; double close=0; int copied=CopyClose(symbol,timeframe,index,1,Close); if(copied==1) close=Close[0]; return(close); } //+------------------------------------------------------------------+ //| Get Time for specified bar index | //+------------------------------------------------------------------+ datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); datetime Time[1]; datetime time=0; int copied=CopyTime(symbol,timeframe,index,1,Time); if(copied==1) time=Time[0]; return(time); } //+------------------------------------------------------------------+ //| Get Rates for specified bar index | //+------------------------------------------------------------------+ bool iRates(MqlRates &Rates[],const int index,int count,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); int copied=CopyRates(symbol,timeframe,index,count,Rates); if(copied!=count) return(false); //--- return(true); } //+------------------------------------------------------------------+ 附加的文件: Copy_OHLC_vc_Copy_Rates.mq5 13 kb 1...756757758759760761762763764765766767768769770...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在循环中似乎是这样的,你可以不使用这个功能
谢谢你。
然而,删除了该功能 - 刹车仍然....。该死的。
谢谢。
然而,删除了该功能 - 刹车仍然....。该死的。
我曾经从4=>5开始重写程序,然后在4中,我把Low[1]、Time[0]等所有结构都换成了现代结构,即CopyLow、CopyTime,程序在4中也变得更快了。我现在不使用旧的结构,只使用新的结构。因此,代码很容易移植到第5个平台上,你只需要改变交易功能 即可。
一旦我开始从4=>5重写程序,然后我把所有的结构,如Low[1],Time[0]和其他结构替换成现代结构,即CopyLow,CopyTime,程序甚至在4中也变得更快。我现在不使用旧的结构,只使用新的结构。因此,代码很容易移植到第5个平台上,你只需要改变交易功能 即可。
在每次打喷嚏时填充阵列 不是一种资源消耗吗?
也许在酒吧开业时将信息复制到数组中,然后随着代码的展开从那里获取信息是有意义的?我在酒吧开业时进行交易。
每次打喷嚏都要填充一个数组,难道不消耗资源吗?
也许在条形图打开时将信息复制到数组中,然后随着代码的进行从那里获取信息是有意义的?我在酒吧开业时进行交易。
数组可以在一个新的条形上填充,它将消耗较少的资源。如果你在多个地方使用iLow[1],你应该把它存储在一个变量中一次,然后读取它而不是数组。
假设这
然后我们用变量TIME_0和TIME_1而不是TM[0]和TM[1] 工作。阵列可以在一个新的条形上填充,它将占用更少的资源。例如,如果你在多个地方使用iLow[1],最好是把它一次写入一个变量,然后读取变量而不是数组。
假设如此
但是,MT4还是要快得多--我很失望。
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
Aleksey Vyazmikin, 2017.07.21 15:07
你为什么要幻想呢?我理解了你的想法,并确认它是有效的,如果请求发生一次,如果知道EA需要多少个柱子才能工作,就会有效果。
或者你建议用不同的方式来使用这个结构? 那么请解释,但不要被冒犯!你的建议是什么?
没有幻想。如果你需要获得一个蜡烛图的2个或更多参数,那么使用你的信息/问题中的函数,我们需要为蜡烛图的每个参数分别调用这些函数。这是2次或更多次产生Copy***(),但使用CopyRates()你只需要调用一次Copy。
至于要复制的数量,这是另一个问题。也许我们应该先计算出包含所需指标值的条形图,然后再复制它。如果我没记错的话,说的是一个未知量的复制。我们谈论的是什么样的幻想?
在极端情况下,我们可以复制,比如说,10条,然后在其中搜索。 如果没有找到,我们再复制10条。复制是一个耗时的操作,复制一个数组会更便宜。
一般来说,有很多的变化。你不能把所有这些都写进文档,那就根本不是文档了。他们在编程课上教这个。但不幸的是,并不是所有的老师都能做到,也不是所有的学生都想在课上理解。而最开始是在2-5年级的算术课上,老师要求对问题进行详细解释。但这里的问题是一样的。
没有花哨的东西。如果你需要获得一个蜡烛图的2个或更多参数,那么使用你的信息/问题中的函数,你应该为每个蜡烛图参数分别调用这些函数。这是2次或更多次执行Copy***(),但使用CopyRates()你只需要调用一次Copy。
至于要复制的数量,这是另一个问题。也许,我们应该先计算出指标的所需值在哪个条形上,然后再复制它。如果我没记错的话,说的是一个未知量的复制。我们谈论的是什么样的幻想?
而且,作为最后的手段,我们可以复制,比如说,10个小节,然后在其中搜索,如果找不到,我们再复制10个小节。复制是一个相当昂贵的操作;在数组中搜索会更便宜。
在这种情况下有很多变种。所有这些都不能写进文档;实际上,它不会再是文档了。他们在编程课上教这个。但是,不幸的是,不是所有的老师都知道如何做,也不是所有的学生都想在课上了解它。而最开始是在2-5年级的算术课上,老师要求对问题进行详细解释。但这里的问题是一样的。
关于幻想--是对你说的 "你没有试图理解所说的话,弄清楚你得到的东西,而是提出一些令人难以置信的反对意见 "的回应,而不是对你提供的版本是来自幻想领域的事实的回应。
我完全理解你的概念,它蕴含在对你的回应中。
然而,我不太明白你建议如何处理未知的数据量--你能以代码的形式给我一个例子吗?
请帮助审核和优化指标,使用这个链接https://www.mql5.com/ru/code/16805 - 麻烦的是,当出现大量的条形图时,指标开始变得很慢 - 在测试时显示出来。
我想知道如何使其工作,使其不在每个tick上计算,而只在bar opening上计算?专家顾问的方法并不合适--在第一个刻度线之后,所有的数值都消失了,只在下一个柱子上出现...。
关于幻想--这是对你说的 "不试图理解所说的内容,了解什么会成功,而是推出一些令人难以置信的反对意见 "的回应,而不是说你提出的方案来自幻想领域。
我完全理解你的概念,它蕴含在对你的回应中。
然而,我不太明白你建议如何处理未知的数据量--你能以代码的形式给我一个例子吗?
回答是在...
阿列克谢-维克多罗夫。
作为最后的手段,你可以复制,比如说,一次复制10条,然后在其中搜索;如果你没有找到,你再复制10条。复制是昂贵的操作,在数组中搜索会更便宜。
但我们最好不要试图从数组中获得最大数量的条数,而是尽量用一份来做。
我不打算写一个代码样本。一个正常的程序员只需要一个提示。下面是一个算法的样本。
因此,必要时可以在一个副本和一个周期内找到两个交叉点。在ArraySetAsSeries() 中甚至没有必要,因为在寻找交叉点时,有可能,而且在我看来,最好是记住酒吧的时间,而不是它的编号。虽然,知道了酒吧的时间,确定其数量并不困难。
问题:在一个周期内,是复制指标缓冲区的1个值和复制高位栏的1个值并比较这些值,还是单次复制一定量并将两个数组的值相互比较,哪个更快?
昨天刚写了这个。
任务。
在每个tick 上得到 "InpCountCopy "元素open, high, low, close和time。
实施。
特点。
你可以选择检查的方式:在OnTick或在OnTimer(1秒)。