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

 
STARIJ:

MA交叉发生在条形图之间--抓住了一个明显的例子

交叉点左侧和右侧的柱状图上的MA值与交叉点的价格不同。我知道提问者想要的是准确的交叉点上的数值,而不是相邻条上的数值。这个精确的数值可以通过线性插值得到--毕竟,条形之间的MA被构造成直线段。或者取相邻条上的每个MA的坐标。用分析法构建2条直线并计算它们的交点。可以通过考虑2个相似的三角形来进行计算。一个相反的问题出现了--我们为什么需要它?成本与结果的价值是否相称?毕竟,如果MA的参数变化很小,交点就会移动。最有可能的是,它是由课程项目的负责人要求的

谢谢你的澄清,我明白这是不容易做到的。
 
missha32:

我找不到我计算中的错误。
我需要找到 前一天的高点 和低点,但由于某些原因,低点是在前一天。

最好使用CopyHighCopyLow 与周期PERIOD_D1 和相应的条形或时间代替。

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32: 我需要找到 前一天的高点 和低点,但由于某些原因,低点在前一天。
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert("Максимум вчерашнего дня = ", iHigh(_Symbol, PERIOD_D1, 1));
   Alert("Минимум  вчерашнего дня = ", iLow(_Symbol,  PERIOD_D1, 1));
任何时间框架的任何条形都包含较低时间框架条形的相应区间的一般信息:最大;最小;开盘时间等于区间内第一个条形的时间; 收盘时间等于区间内最后一个条形的时间;成交量等于区间内各条形的成交量之和。更确切地说,这些信息包含在各自的数组中
 
STARIJ:
任何时间框架的任何条形都包含较低时间框架条形的相应区间的一般化信息:最大、最小、开盘 和收盘时间 以及相当于较低条形成交量之和的成交量。更准确地说,这些信息包含在相应的数组中

我想这样做,但我可能无法使用进一步的算法计算数据,因为我可能要搜索昨天的其他值,而且再次重写函数将是一件麻烦事。

如果你能告诉我,我的代码中的错误在哪里,我不明白。 当我试图显示条数 都适合在一起时,但当我试图得到最大或最小时,它并没有显示它应该显示的东西。

 
missha32:

我会这样做,但我可能无法计算出数据,因为我可能要寻找昨天的其他数值,而且再次重写函数也会很麻烦。

如果你能告诉我,我的代码中的错误在哪里,我不明白。 当我在屏幕上显示条数 时,一切都收敛了,但当我试图获得最大或最小值时,它并没有显示出它应该显示的内容。

你制造了这么多混乱,我甚至无法理清它。从一个到另一个的转换山...

都是为了找到当天的最大值和最小值?

那么,什么对你不起作用呢?

//+------------------------------------------------------------------+
double GetPriceMaximum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены High: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
double GetPriceMinimum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены Low: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

需要找出当天的高点吗?请。

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,0);

需要查出昨天的最大值吗?容易。

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,1);

需要知道前天的低点吗?没问题。

double min_price=GetPriceMinimum(Symbol(),PERIOD_D1,2);

那么,你可以采取简单的方法,使用纯四元函数。

double price_max=iHigh(Symbol(),PERIOD_D1,1);

但我不建议--使用新的语言结构,你会让自己和你的代码准备好,有一天四重奏将不被支持,还有自律和所有这些;)

 
Artyom Trishkin:

你把事情搞得一团糟,甚至很难理出头绪。从一个东西到另一个东西的转换的山...

都是为了寻找一天中的高点和低点?

那么,什么对你不起作用呢?

需要找出当天的高点吗?请。

需要查出昨天的最大值吗?容易。

需要知道前天的低点吗?没问题。

那么,你可以采取简单的方法,使用纯四元函数。

但我不建议--使用新的语言结构,你会为自己和你的代码做好准备,有一天四元数将不被支持,自律和所有这些;)

我自己也发现了一个错误(一不留神看错了参数iHighest, iLowest)。

所以不适合,因为需要从昨天开始进行其他计算。

 
missha32:

我自己也发现了这个错误(一不留神误读了iHighest,iLowest参数)。

这并不适合,因为需要从昨天开始进行其他计算

我不明白为什么阻止你以简单自然的方式获得数据进行其他计算。
 
missha32 每一个红色的买入信号和每一个蓝色的卖出信号,允许在每一个信号上进行填充。

if(Red)OrderSend(...Buy ...) ; if(Blue) OrderSend(...Sell ...) 。

只有相反,在顶部卖出,在底部买入......

函数OnInit(要求init的旧函数)在指标开始时执行(当改变时间框架,重新编译时,...)。所有使用的变量都必须有一个分配给它们的值。SetIndexDrawBegin(0,i-1)一行出现在OnInit函数 中;i变量必须被赋值 或使用一个常数

 
STARIJ:

if(Red) OrderSend( ... Buy ...) ; if( Blue ) OrderSend( ... Sell ...) 。

只有相反,在顶部卖出,在底部买入......

函数OnInit(要求init的旧函数)在指标开始时执行(当改变时间框架,重新编译时,...)。所有使用的变量都必须有一个分配给它们的值。在OnInit函数 中,有SetIndexDrawBegin(0,i-1)一行;i变量必须被分配一个值 或使用一个常量

说实话,我什么都不懂,我是Mql4编程的新手,所以请大家帮我看看代码。
 
missha32:
说实话,我什么都不懂,我是Mql4编程的新手,如果你不介意帮我写一下代码。

代码通常有助于自由职业者的工作。

在这里--无论是算法还是纠正你的错误。但不是为了给你再重写。

原因: