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

 
Alexey Viktorov:

更仔细地阅读文件不是更好吗?

图表_带至顶部

在所有其他图表的顶部显示图表

boolw/o


这意味着这个属性是只允许写的。而你正试图阅读它.........

另外,你没有对问题做出完整的回答

它是一个脚本或一个指标。
它是一个指标。而且,当窗口发生变化时,它立即打印出结果,也就是说,它可以读取。
 
Valeriy Yastremskiy:

而且我不明白哀嚎的意义。该条件始终是真实的。

该条件始终为真,但不知道图的数量

 
Valeriy Yastremskiy:

如果我不明白发生了什么事,我就把所有的东西都打印出来,有时会有帮助。而我不明白,这块纱布的意义何在。该条件始终是真实的。

如果有的话,必须以静态方式进行,否则会重设

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
它是一个指标。而当窗口发生变化时,它立即打印出结果,也就是说,它可以读取。

你不觉得它读起来像胡言乱语吗?虽然无法改变,但它仍然是胡言乱语。

当日程表发生变化时,尽量把它打印出来。那么了解活动图表的变化就很重要。如果指标在最左边的图表上,你是否切换到右边的下一个指标,然后切换到最右边的指标,如此混乱地切换?还是说你只需要从图表中追踪到指标所在的出口,然后再返回去?

 
Alexey Viktorov:

你不觉得它读起来像胡言乱语吗?虽然无法改变,但它仍然是胡言乱语。

当日程表发生变化时,尽量把它打印出来。那么了解活动图表的变化就很重要。如果指标在最左边的图表上,你是否切换到右边的下一个指标,然后切换到最右边的指标,如此混乱地切换?还是说你只需要跟踪离开指标所在的图表,然后再回到它那里?

我不知道读什么,但它能打印出你需要的东西

2021.03.16 09:33:25.650 Label USDCHF,M15: EURGBP
2021.03.16 09:33:25.148 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.647 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.145 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.644 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.142 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:22.641 Label USDCHF,M15: USDCHF
2021.03.16 09:33:22.155 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.654 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.152 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.651 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.149 Label USDCHF,M15: EURGBP

它可以在任何图表(最左边、最右边、中间)和任何图表切换顺序上工作

尝试

//+------------------------------------------------------------------+
//|                                                        Label.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(500);
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      string symbol01;
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);      Print(symbol01);
           } 
         currChart=ChartNext(currChart);  i++;
        }
//--- 
  }
//+----------------------------------------------------------------------------+
 

这样做了

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);
           } 
         currChart=ChartNext(currChart);  i++;
        }
   PrintLabel();
//--- 
  }
//+----------------------------------------------------------------------------+
void PrintLabel()
  {
   if(symbol02!=symbol01){symbol02=symbol01; Print(symbol02);}
   return;
  }

结果

2021.03.16 10:00:05.075 Custom indicator Label USDCHF,M15: removed
2021.03.16 10:00:05.060 Label USDCHF,M15: uninit reason 1
2021.03.16 10:00:00.046 Label USDCHF,M15: USDCHF
2021.03.16 09:59:55.486 Label USDCHF,M15: EURCAD
2021.03.16 09:59:54.498 Label USDCHF,M15: CADCHF
2021.03.16 09:59:53.511 Label USDCHF,M15: EURGBP
2021.03.16 09:59:52.994 Label USDCHF,M15: GBPCHF
2021.03.16 09:59:51.991 Label USDCHF,M15: EURUSD
2021.03.16 09:59:48.945 Label USDCHF,M15: USDCHF
2021.03.16 09:59:48.428 Label USDCHF,M15: initialized
2021.03.16 09:59:47.046 Custom indicator Label USDCHF,M15: loaded successfully

谢谢大家的帮助!!。

 
MakarFX:

我不知道读什么,但它打印了它需要的东西

在任何图表(最左边、最右边、中间)和任何图表变化的顺序上工作

尝试

它的读数是1或0。我不知道它有多准确,但它出乎意料地工作...

那么这里有一个现成的解决方案

/***************************Timer function***************************/
void OnTimer()
 {
  static long chart_ID = 0;
  string symbol01;
  long currChart = ChartFirst();
  while(currChart >= 0)
   {
    if(chart_ID != ChartGetInteger(currChart, CHART_WINDOW_HANDLE) && ChartGetInteger(currChart,CHART_BRING_TO_TOP,0) == 1)
     {
      chart_ID = ChartGetInteger(currChart, CHART_WINDOW_HANDLE);
      symbol01 = ChartSymbol(currChart);
      Print(symbol01, " ", EnumToString(ChartPeriod(currChart)), " ", chart_ID);
     }
    currChart = ChartNext(currChart);
   }
 }/*******************************************************************/
 
MakarFX:

这样做了

结果

谢谢大家的帮助!!。

如果有两个相同字符的图形或更多。


它不会工作。

 
MakarFX:

我不知道读什么,但它打印了它需要的东西

在任何图表(最左边、最右边、中间)和任何图表变化的顺序上工作

尝试

void OnTimer()
{
   long currChart=0,prevChart=ChartFirst();
   int i=0,limit=100;
   static long CurrID;
   while(i<limit) { // у нас наверняка не больше 100 открытых графиков
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
      if(ChartGetInteger(currChart,CHART_BRING_TO_TOP))
         break;
      if(currChart<0) break;          // достигли конца списка графиков
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
   }
   if(CurrID!=currChart) {
      Print(ChartSymbol(currChart));
      CurrID=currChart;
   }
}


P.S. 在写的时候,代码已经勾画好了:)

 
Alexey Viktorov:

它的读数是1或0。我不知道它的可靠性如何,但它出人意料地工作...

那么,解决方案是这样的。

它是有效的,谢谢。

Vitaly Muzichenko:


P.S. 在写这篇文章时,代码已经写好了 :)

跳过第一个图表窗口。

Alexey Viktorov:

如果将有两个相同字符的图表或更多。

它不会工作

它只是按照它应该的方式工作。重点是,如果一个字符发生了变化,就打印出来!

原因: