初学者的问题 MQL4 MT4 MetaTrader 4 - 页 195

 
Artyom Trishkin:

找到价格与MA向上交叉的点。这将是搜索范围的开始。

找到价格向下穿越MA的点。这将是停止的范围。

只在这个范围内采取iHighest()。

如何实现对MA点的搜索,使其只搜索2个极端点,而不是搜索到无穷大。在文字上我也理解,但如果不难,如何在代码中实现。
 
GlaVredFX:
如何实现对MA点的搜索,以便只搜索2个极端点,而不是搜索到无穷大。 我也明白,但如果这不难,如何在代码中实现。

一种方法:在全局EA程序层面上创建一个变量(在EA标题中声明一个变量)--在这个变量中写上最后一次穿越时的酒吧开盘时间。这将有助于使用CopyBuffer 的第三种调用形式。

所需时间间隔的开始和结束日期的参考。

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   datetime  start_time,           // с какой даты
   datetime  stop_time,            // по какую дату
   double    buffer[]              // массив, куда будут скопированы данные
   );

这里的start_time只是我们变量中的时间,stop_time是服务器最后已知报价的时间。

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
GlaVredFX:
如何实现对MA点的搜索,使其只寻找2个外侧的点,而不是无穷大。 在文字上我也理解,但如果这不难,如何在代码中实现它。

你必须通过循环,直到你找到一个远离MA的动作。

有一点,即黄色矩形所强调的这部分,将在到达价格和MA之间的第二次交叉点之前中断循环。最大值将在第一个右侧交叉点找到


P.S. 突出显示的2个领域之间有什么区别?

 
Vitaly Muzichenko:

P.S. 突出显示的2个领域之间有什么区别?

它们可能是不同的--即第一点可能比第二点高或低。

这只是一个例子。但这并不意味着它们将永远是相同的。



谁能抛出具有类似条件的代码实例..:

MA的当前值>0巴。
寻找条数,价格<MA,找到条数1,将值写入缓冲区2
寻找下一个数字Price>MA发现2号栏,将数值写到缓冲区1
停止搜索。
然后在缓冲区1和2的数值之间寻找最低价格的Low。
如果当前MA值< 0 bar
寻找条数,Price>MA,找到1个条数,将该值写入缓冲区2
寻找下一个数字Price<MA发现2号栏,将数值写到缓冲区1
停止搜索。
然后在缓冲区1和2的值之间,我们寻找最高的价格High。

 
GlaVredFX:

它们可能是不同的--第一个点可能比第二个点高或低。

这只是一个例子。但这并不意味着他们将永远是一样的。



谁能抛出具有类似条件的代码实例..:

当前值MA> 0 bar
我们正在寻找小节编号,价格<MA,我们已经找到了1个小节的编号,我们把这个值写入缓冲区2
寻找下一个数字Price>MA发现2号栏,将数值写到缓冲区1
停止搜索。
然后在缓冲区1和2的数值之间寻找最低价格的Low。
如果当前MA值< 0 bar
寻找条数,Price>MA,找到1个条数,将该值写入缓冲区2
寻找下一个数字Price<MA发现2号栏,将数值写到缓冲区1
停止搜索。
然后在缓冲区1和2的值之间,我们寻找最高的价格High。

如果我们按照图像,我们必须开始一个循环,并搜索直到找到条件MA<Value。

一旦找到这一点,我们 就用高价来填充这个数组。我们运行循环,直到找到MA>Price的条件,一旦我们找到这个地方--我们就打破循环。

那么,在阵列中,我们正在寻找峰值价格

 
Vitaly Muzichenko:

如果你按照图像,你应该运行一个循环并搜索,直到找到条件MA<Value。

一旦找到这一点,我们 就用高价来填充这个数组。我们运行循环,直到找到MA>Price这个条件,一旦找到这个地方,我们就打破循环。

然后我们寻找阵列中的峰值价格。

你说得对,我也是这样写的,但如何在代码中实现它,你至少可以给我们一个这样的代码例子。


开始一个循环,进行搜索,直到找到MA<Price这个条件。

一旦发现这个条件,我们 就用价格填充数组

Документация по MQL5: Операции с массивами / ArrayFill
Документация по MQL5: Операции с массивами / ArrayFill
  • www.mql5.com
При вызове функции ArrayFill() всегда подразумевается обычное направление индексации – слева направо, то есть изменение порядка доступа к элементам массива с помощью функции ArraySetAsSeries() не принимается во внимание. Многомерный массив при обработке функцией ArrayFill() представляется одномерным, например...
 
GlaVredFX:

这是正确的,我就是这样写的,但如何在代码中实现它,你至少可以给出一个这样的代码例子。


运行一个循环并进行搜索,直到找到MA<Price这个条件。

一旦发现这个条件,我们 就用价格填充数组

我现在不能写代码,也许别人会写,这很简单

 

这就是所需要的,谁能帮助解决这个问题的代码。

int start()                           

  {

  int    i;

  double No_1;

  double No_2;

  double k=iClose(NULL,0,i);
  double h=iHigh(NULL,0,i);

  if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

  for (i=0; i< Bars; i++) {

  //---- Код поиска номер крайнего бара где  iHigh>ma

  //---- Если нашли то возвращаем номер бара No_1

            

          }

然后找到iLow>ma的下一个值,并返回No_2小节。
停止搜索,使用iHighest函数 在这些柱子之间寻找顶点
int val_index=iHighest(NULL,0,MODE_HIGH,No_2,No_1);

 
GlaVredFX:

if (ma>k) ma=iMA(NULL,0,24,0,1,0,i);

这不是MQL5代码。

 
Vladimir Karputov:

这不是MQL5代码。

这是一个布局,4和5之间没有区别

:)