任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 978

 
Vadim_2015:

算法很清楚,想出来了。做了这个例子,一切都很顺利。

非常感谢您!

而且,对于第一个问题(关于最大值),你能否更详细地解释如何实现它?如果可能的话,请给我一个小算法。你很擅长这个 :)

我很高兴有人能理解我,而不是我自己。

Vadim_2015
亲爱的论坛用户,你们好

我已经开始学习MQL4语言,虽然我正在编写一个简单的指标,但我遇到了一个问题,我无法解决。问题的要点。

1_如何找到High[i - end of day].我有一个简单的循环Close[i]-Open[i+1],我需要找到High[i - end of day]。例如,从[i],[1],[2]和到一天结束(PERIOD_H1)。我不知道该怎么做。有 "iHigh "功能,但这并不完全是一回事


这正是我们需要的。当天的高点,不管离一天的结束还有多少时间。

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

如果我对这个问题的理解正确的话。

 
AlexeyVik:

我很高兴除了我自己之外还有人理解我。

这只是正确的做法。无论一天中还剩下多少时间,都是高电流的一天。

如果我对这个问题的理解正确的话。

这与我的理解有些不同。事情就是这样的。
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
根据我的理解,略有不同。事情就是这样的。

嗯,这正是我之前被建议的。
但是iHighest(NULL, MODE_HIGH, bar+1, 1)返回在这个区间内比其他所有的高点的条形高点的索引,而你问的是当前日高点。

 
AlexeyVik:

嗯,这正是我之前被建议的。
但是iHighest(NULL, MODE_HIGH, bar+1, 1)返回比这个区间内所有其他区间都高的条形指数 High,而你问的是当前日High。

我同意,"iHighest(NULL, MODE_HIGH, bar+1, 1)返回这个区间内比 其他所有的高点的条形 高点索引"。我是说高 剩余日期 的一天。

我将尝试更清楚地解释...

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   int counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

如果你不能骂我太多:) ......请解释一下如何做?

 
Vadim_2015:

我同意,"iHighest(NULL, MODE_HIGH, bar+1, 1)返回这个区间内比 其他所有的高点的条形 高点索引"。我是说高 剩余部分 的一天。

我试着说得更具体些......

如果你可以的话,请不要骂我太多:) ......你能解释一下如何做吗?

起初我以为这是一个简单的拼写错误,但现在没有疑问了,你想展望一下未来吗?那么只有《回到未来》中的博士可以帮助你。
 
AlexeyVik:
起初我以为这是一个简单的错字,但现在毫无疑问,你想展望未来?那么只有《回到未来》中的博士可以帮助你。

恐怕医生帮不了我......他做错了生意:)

是的,这个问题,"高目前的其余部分。 这有点让人困惑。它刚刚来到我身边,你真的会认为这是在这一天试图展望未来。这有点不对劲。我想计算一下_高目前的其余部分。 从价格阵列的开始到倒数第二天(昨天),因为所有的数据都在那里。而最后一天(今天)的工作一旦完成,就应该重新计算。否则它就会像你说的那样--试图展望未来!"。 如果我从价格数组的开头开始,一直到结尾(昨天的日子),High会在随后的每一个条形检查中发生变化。 这就是为什么我问如何将High从当天的其余部分减去。我忘了告诉你,当前的日子没有被考虑在内,因为它还没有完成。对不起,我一下子没听懂 :) 。你能告诉我如何组织这样的计算吗?这有可能吗?

 
Vadim_2015:

恐怕医生帮不了我......他做错了生意:)

是的,这个问题,"高目前的其余部分。 的。",这有点让人困惑。这只是我刚刚想到的,人们真的会认为这是在这一天对未来的一种尝试。这是个有点错误的说法。我想计算一下_高剩余部分的当前的一个 从价格阵列的开始到倒数第二天(昨天),因为所有的数据都在那里。而最后一天(今天)的工作一旦完成,就应该重新计算。否则它就会像你说的那样--试图展望未来!"。 如果我从价格数组的开头开始,一直到结尾(昨天的日子),High会在随后的每一个条形检查中发生变化。 这就是为什么我问如何将High从当天的其余部分减去。我忘了告诉你,当前的日子没有被考虑在内,因为它还没有完成。对不起,我一下子没听懂 :) 。你能告诉我如何组织这样的计算吗?这有可能吗?

让我试着理解你的问题。你需要在酒吧中找到高,1)前一天和今天的东西,或者2)只有今天的东西?也许iHighest()会有帮助?
 
paladin80:
让我试着理解你的问题。你需要在条形图中找到高点,1)前一天和今天的日期,还是2)只有今天的日期?也许iHighest()会有帮助?

亲爱的朋友们,我将尽力解释我想要实现的目标............否则我就会搞清楚......否则我就会把大家都搞糊涂!"。

看,有一个价格数组,比方说从_1.02.2015.到15.12.2015(今天的日子),取PERIOD_H1。

1_我采取一个简单的公式_val=Close[i]-Open[i]。

2_设置一个简单的条件,如果(val>0)--检查应该从_1.02.2015开始。

-如果条件得到满足,例如,在某个柱状体上,那么从这个柱状体到这一天结束,找到_高。比如说。Close[4]-Open[4]>0,即假设索引[i=4]的柱子属于_1.02。2015年10:00,所以从这 一天的10:00 --直到 00:00--这一天的结束,我们发现_高。相应地,如果这个条件在其他日子里起了作用,我们也会按照同样的原则行事。就这样,它经历了整个价格阵列。计算应该从_2015年2月1日到2015年12月14日(倒数第二天)开始,为什么要计算到倒数第二天,--因为最后一天还没有完成,全天的高点还不知道。最后一天一结束,我们也要检查它的状况。由于从_1.02.2015.到14.12.2015(倒数第二天) 的数据是已知的,它不会看起来像--试图看向未来 :)

- 如果条件没有得到满足--什么也不做,空值被写入数组中。

这实际上是整个 "想法"。如何做到这一点,如何通过一个循环来定义它--我想不出来!

 
Vadim_2015:

恐怕医生帮不了我......他做错了生意:)

是的,这个问题,"高目前的其余部分。 的。",这有点让人困惑。这只是我刚刚想到的,人们真的会认为这是在这一天对未来的一种尝试。这是个有点错误的说法。我想计算一下_高? 其余的当前的一个? 从价格阵列的开始到倒数第二天(昨天),因为所有的数据都在那里。而最后一天(今天)的工作一旦完成,就应该重新计算。否则它就会像你说的那样--试图展望未来!"。 如果我从价格数组的开头开始,一直到结尾(昨天的日子),High会在随后的每一个条形检查中发生变化。 这就是为什么我问如何将High从当天的其余部分减去。我忘了告诉你,当前的日子没有被考虑在内,因为它还没有完成。对不起,我没有马上明白 :) 。你能建议如何组织这样的计算吗?这有可能吗?

如果是这样,我们返回到iHighest(),但是要计算多少条,从哪条开始,应该用iBarShift()计算。
 
AlexeyVik:
如果是这样,我们就回到iHighest(),但是要计算多少条,从哪条开始,必须使用iBarShift()计算。

你能告诉我如何在一个循环中做到这一点吗?我搞不清楚如何正确地做这件事。