初学者的问题 MQL5 MT5 MetaTrader 5 - 页 765

 
Alexey Kozitsyn:

鼠标移动事件肯定不会被生成。对于其他人,我想这是一样的。

在EA中呢?
 
Artyom Trishkin:
而在议员?

同样的事情...

 
Alexey Viktorov:

回答是在...

但最好不要从一个轻量级,而是大约最大限度地尝试用一个副本来解决。

我不会写一个示例代码。一个正常的程序员只需要一个提示。这里有一个近似的算法。

  1. 我们确定通道被越过的大致条数。让它成为15。
  2. 复制指标的两个缓冲区。
  3. 使用CopyRates()复制条形图的值。
  4. 在循环中,我们开始比较通道的上限和高条的值,同时将低条与通道的下限进行比较。如果发现其中一个交叉点,则将条形索引存储在一个变量中,然后我们继续寻找第二个交叉点。当相交条的两个变量都有值时,我们退出循环。

因此,必要时可以在一个副本和一个周期内找到两个交叉点。在ArraySetAsSeries() 中甚至没有必要,因为在寻找交叉点时,有可能,而且在我看来,最好是记住酒吧的时间,而不是它的编号。虽然,知道了酒吧的时间,确定其数量并不困难。

问题:是复制指标缓冲区1个值和复制高栏1个值并比较这些值的循环,还是单次复制一定数量并相互比较两个数组的值的循环,哪个更快?

我建议不要偏离这个概念,按照我的理解,就是在代码的开头复制一定量的条形数据,然后用这个数据工作--或者你建议一个例外?

还有,你怎么会认为我是一个程序员?

我认为你不需要猜测--什么会更快,有时答案可能并不明显--只有经验可以给这种问题一个答案。


 
Vladimir Karputov:

昨天刚写了这个。

任务。

每个tick 上得到 "InpCountCopy "元素open, high, low, close和time。

实施。

  1. 从 "0 "到 "InpCountCopy-1 "的循环 - 循环每次获得一个开放、高、低、关闭和时间。
  2. 一次,我们将 "InpCountCopy "元素放入MqlRates结构中,然后循环浏览该结构。

特点。

可以选择检查方式:在OnTick或OnTimer(1秒)。

谢谢你,我将努力使代码合理化。
 

告诉我为什么这段代码能找到历史上没有的票据?

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

告诉我为什么这段代码能找到历史上没有的票据?


你是否尝试过搜索已关闭的交易(OUT)?有一个命令--你可以看到它。

 
Vitaly Muzichenko:

告诉我为什么这段代码能找到历史上没有的票据?


这就对了。

你正在寻找一个订单,而订单打开位置=63425010已经做了自己的,它是在历史上。

而且我认为票面顺序和票面位置是一样的,这误导了你。

如果你想分析Position,使用 PositionSelect(),然后分析其属性。

 

需要什么。

我们发送一个订单,作为回应,我们收到一张仓单,然后在图表上画出一个名为 "仓单 "的对象(没有指定替换)。如果我们开了几个仓位,分别在图表上有几个带有票据名称的对象,如果我们再关闭其中一个,所有对象都会被删除,而我们只需要从历史中删除带有已关闭票据的对象。删除功能在OnTrade上发挥作用

 
Vitaly Muzichenko:

需要什么。

我们发送一个订单,作为回应,我们收到一个仓单,然后一个名为 "仓单 "的对象被画在图表上(没有指定替换)。如果我们开了几个仓位,分别在图表上有几个带有票据名称的对象,如果我们再关闭其中一个,所有对象都会被删除,我们只需要从历史中删除带有已关闭票据的对象。删除功能在OnTrade上发挥作用


那么你需要什么,是订单的票据 还是仓位的票据?

 
prostotrader:

那么,你需要什么,是订单票 还是仓位票?

你需要删除已经在历史中的带有票据的对象,但不包括那些仍在市场中的对象。

重复的

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010