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

 
Tapochun:

1.确定每日蜡烛的开盘时间。

确定你想要的TF上的条数(如果你想每15分钟检查一天的极值--M15条)。

3.接收num条的数据高电平。

3.在循环中,将所有高位条的值与所需日蜡烛的变量dayHigh进行比较(最初dayHigh=0)。

4.如果high>dayHigh,你就把新的值存储在dayHigh变量中。

这是可以理解的,谢谢。但到目前为止,我很难......或者说是第2点,有必要对每个TF进行计算,并将其弯曲成范围,以找到烛台的数量?

难道我们不能只找出当前时间框架的日期,然后翻看该日期的所有数值,而不计算蜡烛图的数量吗?

 
-Aleks-:

这是可以理解的,谢谢你。但到目前为止,这对我来说很复杂......或者更准确地说,第2点,是为每个TF做一个计算,并把它放到范围内,以找到烛台的数量?

难道我们不能只找出当前时间段的日期,然后翻看该日期的所有数值,而不确定已经过去的蜡烛数吗?

要确定一天内的条数 是很容易的。例如,对于一个15分钟的图表。一天中的分钟数除以15(1440/15=96条或另一个PERIOD_D1/PERIOD_M15=96)。
 
Vitalii Ananev:
日内条形图的数量 很容易确定。例如,对于15分钟的图表。一天中的分钟数除以15(1440/15=96条或另一个PERIOD_D1/PERIOD_M15=96)。
你不应该这样做!永远不要接受这样一个事实,即在TF上的任何一天的条数都是一样的!这是不可能的。
 
Vitalii Ananev:
要确定一天中的条数 是很容易的。例如,对于15分钟的图表。将一天中的分钟数除以15(1440/15=96条或另一个PERIOD_D1/PERIOD_M15=96)。

我在数学上明白这一点,但如何用函数来做--这是一个问题!假设我使用Time获得当前时间,然后如何

我想为每个TF做一个计数器,有一个新的条形图,它将在新的一天开始时被重置,并在一天内最多重置为零,在此之前对每个条形图做一个比较,但如何编程?

 
Tapochun:
你不应该这样做!千万不要认为TF在任何一天的条数都是一样的!这是个事实。

是的,例如在星期五可能会有一个提前关闭的时间...

因此,你必须定义一个日子,并采取一个数组来寻找当天的最大值,而不考虑蜡烛图的数量,你是如何做到的?

 
-Aleks-:

我在数学上明白这一点,但如何用函数来做--这是一个问题!假设我使用Time获得当前时间,然后如何

我想我应该为每个TF做一个计数器,有一个新的条形图,如果有新的一天,它将被重置为零。 我想在最多一天内将其重置为零,并比较之前的每个条形图;但我应该如何编程?

这大约是我们可以找到与一天的开始相对应的第一根柱子的方法。

 datetime BeginDay = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[NumberBar]));  

 int StartBar = iBarShift(Symbol(), 0, BeginDay);
 
Vitalii Ananev:

这大致是如何找到与一天的开始相对应的第一个条形。

例如,我们有这样的算法。

我们已经找到了第一根柱子--在它形成的那一刻,这根柱子将是当天的高点。然后我们得到下一个条形图并检查它的最大值,如果它比前一个条形图高,就意味着它是当天的新高。以此类推,直到今天的最后一节课。

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
附加的文件:
toAleks.mq4  3 kb
 
Tapochun,Vitalii Ananev- 谢谢你!我现在将尝试应用我所学到的知识。
 
Tapochun:
我可以看到一个指标而不是一个脚本吗?我只是对所有这些时间数组感到很困难...我想从一个例子中学习。