如何检测趋势线何时穿过MA曲线

时间:2020-04-25 22:06:18

标签: mql4 metatrader4

趋势线在紫点处横穿移动平均曲线(黄色),表示买入信号。 我想知道是否存在以编程方式检测趋势线与移动平均曲线的交点以发出买入或卖出信号的方法。 enter image description here

我知道如何绘制趋势线,但是我不知道如何读取该趋势线上我感兴趣的值。任何想法都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

首先,获取趋势线的点的时间和数据(在这里:它们在结构中)。 接下来,找到坡度。 最后,您可以在任何时间点计算趋势线值。 在下面的示例示例中,所有内容都移入了struct中。 请记住,如果图表上有多个这样的折线,则必须遍历所有折线以找到最后一个折线(当然,如果需要最后一个折线)。

struct TrendLine{
   datetime m_startDt;
   double   m_start;
   datetime m_endDt;
   double   m_end;
   double   m_slope; // slope, price per bar

   void     Init(const string objName) {
      m_startDt=(datetime)ObjectGetInteger(0,objName,OBJPROP_TIME1);
      m_start  = ObjectGetDouble(0,objName,OBJPROP_PRICE1);
      m_endDt  =(datetime)ObjectGetInteger(0,objName,OBJPROP_TIME2);
      m_end    = ObjectGetDouble(0,objName,OBJPROP_PRICE2);
   }
   void     computeSlope() {
      const int distanceInBars=iBarShift(_Symbol,0,m_startDt)-iBarShift(_Symbol,0,m_endDt);
      m_slope = (m_end-m_start)/distanceInBars;
   }

   double  getTrendLineValueByTime(const datetime time) {
      if(m_slope==0.)
         computeSlope();
      const int distanceInBarsFromEnd=iBarShift(_Symbol,0,time)-iBarShift(_Symbol,0, m_endDt);
      const double result=m_end-slope*distanceInBarsFromEnd;
      return result;
   }
};

所以您将通过以下方式使用它:

void OnTick() {
   TrendLine trendLine;
   string objName;
   for(int i=ObjectsTotal()-1;i>=0;i--) {
      objName=ObjectName(i);
      if(ObjectType(objName)!=OBJ_TREND) continue;
      trendLine.Init(objName);
   }
   datetime t = iTime(_Symbol,0,1);// let's suppose we need TL value for last bar
   double tlValue = trendLine.getTrendLineValueByTime(t);
   Print(__LINE__," ",__FILE__," trend line at time = ",t," = ",DoubleToString(tlValue,8));
}