新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1929

 
出现了一个问题。如何知道打开的窗口的数量和它们的ID。我发现只能得到第一个、当前和下一个窗口的ID。我正确的理解是,我们不能得到总数,而只能得到第一个,不是下一个,如何理解没有下一个窗口呢?
 
Valeriy Yastremskiy #:
出现了一个问题。如何知道打开的窗口的数量和它们的ID。我发现只能得到第一个、当前和下一个窗口的ID。我正确的理解是,我们不能得到总数,而只能得到第一个,不是下一个,如何理解没有下一个窗口呢?
    long currChart=ChartFirst();
    int i=0;
    while(i<CHARTS_MAX) {
      if(ChartSymbol(currChart)==symbol)
        break;
      currChart=ChartNext(currChart);
      if(currChart==-1) break;
      i++;
    }
    symb=ChartSymbol(currChart);
 
Vitaly Muzichenko #:

不能假设所有开放的职位都有窗口。因此,该算法应搜索具有所需符号的窗口,如果没有,则打开一个窗口,并画出该情况。即级别,然后找到在哪个SL上发生的修改,并删除或改变级别的颜色。

 
Valeriy Yastremskiy #:

不能假设所有开放的职位都有窗口。因此,该算法应搜索具有所需符号的窗口,如果没有,则打开一个窗口,并画出该情况。即级别,然后找到哪个SL发生了修改,并删除或改变级别的颜色。

放一个标志,如果有一个开放的窗口,就画出来,如果没有开放--跳过。如果没有打开/关闭,那么打开和关闭就没有意义了

    long currChart=ChartFirst();
    int i=0;
    flag=false;
    while(i<CHARTS_MAX) {
      if(ChartSymbol(currChart)==symbol) {
        flag=true;
        break;
      }
      currChart=ChartNext(currChart);
      if(currChart==-1) break;
      i++;
    }
    if(flag) {
    symb=ChartSymbol(currChart);
    ...
 
Vitaly Muzichenko #:

如果有一个开放的窗口,就放一个标志,然后绘制,如果没有开放的窗口,就跳过它。如果不知道是开/关,那么开和关就没有意义了

如果符号没有打开,是否开一个新的,由客户决定。对我来说,随着开放,它对客户的情况有了更完整的说明。从搜索中,你需要你正在寻找的符号的窗口ID。然后在你要找的窗口画上

int FcurrChartSimbol(symbol){   
long currChart=ChartFirst();
    int i=0;
    while(i<CHARTS_MAX) {
      if(ChartSymbol(currChart)==symbol)
      return(currChart);
      currChart=ChartNext(currChart);i++;
      if(currChart==-1)return(-1);
      
    }}

Zy纠正说。这是一个函数)))

 
Valeriy Yastremskiy #:

如果符号没有打开,是否开一个新的,由客户决定。对我来说,开放是对客户情况更全面的说明。从搜索中,你需要你正在寻找的符号的窗口ID。然后在你要找的窗口画上


Zy纠正说。它是一个函数)))。

最理想的是,填入一个全局可见的开放图表数组,然后用数组进行工作。

int FcurrChartSimbol(symbol) {   
   long currChart=ChartFirst();
    int i=0;
    while(i<CHARTS_MAX) {
      i++;
      mass[i-1]=currChart;
      currChart=ChartNext(currChart);
      if(currChart==-1)
        break;
    }
   return(i); // количество графиков
}

接下来,在一个事件上运行它来更新填充物,例如,当职位数量发生变化时

int OT=OrderTotal();
if(OT != pOT) {
 FcurrChartSimbol(symbol);
 pOT=OT;
}

这将减少负荷,不需要运行一个无用的循环。

 
Vitaly Muzichenko #:

最理想的是,用开放的图表填充一个全局可见的数组,然后用数组工作

接下来,在一个事件上运行它来刷新填充物,例如,当位置的数量改变时

这将减少负荷,而且不需要无用的循环。

也许我错过了什么,但我不明白为什么你不使用SYMBOL_SELECT和SYMBOL_VISIBLE来确定图表是否开放

在翻阅订单时,要做以下检查

    if(!SymbolInfoInteger(Order_Symbol, SYMBOL_SELECT) || !SymbolInfoInteger(Order_Symbol, SYMBOL_VISIBLE))
      SymbolSelect(Order_Symbol, true);
 
Alexey Viktorov #:

也许我错过了什么,但我不明白为什么你不使用SYMBOL_SELECT和SYMBOL_VISIBLE来确定图表的开放程度

翻阅订单并做检查

嗯,这是来自不同的歌剧,与市场观察 有关,而不是公开的图表。或者是吗?

P.S. 如果有一个开放的位置,在市场观察 中的符号将是可见的
 
Vitaly Muzichenko #:

那是来自另一个主题,与市场观察 有关,而不是公开图表。或者是吗?

P.S. 如果有一个未结头寸,无论如何,市场观察 中的符号将是可见的

SYMBOL_SELECT是的,但SYMBOL_VISIBLE是不需要的。

是的,我同意,它不一定是一个开放的图表。

 
Vitaly Muzichenko #:

最理想的是,用开放的图表填充一个全局可见的数组,然后用数组工作

接下来,在一个事件上运行它来刷新填充物,例如,当位置的数量改变时

这将减少负荷,不需要运行一个无用的循环。

我不明白这种逻辑。开仓、修改SL、平仓的事件被监测到几个符号。在开仓时,我们搜索给定符号的窗口是否打开(寻找窗口ID);如果打开了,我们就画出水平线,然后监测SL拖网。如果没有,我们要么用所需的符号和时间框架打开一个窗口并绘制水平线,要么不打开。修改的事件,找到所需的符号窗口,关卡已经画好,改变关卡颜色或删除它,重新画关卡。

一般来说,为了排除客户的影响,在工作开始时,我们应该分析仓位和窗口,对有开仓的符号和没有开仓的窗口进行分析。