KimIV的有用功能 - 页 36

 

如何使用SetRegression()的例子。

  • 红线回归通道是基于过去2天的柱状图。
    datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
    datetime d1=TimeCurrent()-24*60*60;
    while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
    d1=StrToTime(TimeToStr(d1, TIME_DATE));
    SetRegression(Red, "", d1, 0, True);

  • 基于过去2天的条形图的线性回归的褐色通道。
    datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
    datetime d1=TimeCurrent()-24*60*60;
    while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
    d1=StrToTime(TimeToStr(d1, TIME_DATE));
    datetime d2=d1-24*60*60;
    while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
    d2=StrToTime(TimeToStr(d2, TIME_DATE));
    SetRegression(Brown, "", d2, d0, True, STYLE_DASH);

PS。附上一个测试SetRegression()函数的脚本。

附加的文件:
 

EquationDirect()函数。

直线的方程。这个函数计算在与通过图形上两个任意点的直线相交处的尾数X 的序数Y 的值。该函数需要以下强制性参数。

  • x1,y1- 第一个点的坐标。
  • x2,y2- 第二个点的坐标。
  • x- 值,要计算Y 轴的尾数。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Уравнение прямой.                                              |
//|             Вычисляет значение Y для X в точке пересечения с прямой.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x1,y1 - координаты первой точки,                                        |
//|    x2,y2 - координаты второй точки,                                        |
//|    x     - значение, для которого вычислить Y                              |
//+----------------------------------------------------------------------------+
double EquationDirect(double x1, double y1, double x2, double y2, double x) {
  if (x2==x1) return(y1);
  return((y2-y1)/(x2-x1)*(x-x1)+y1);
}
 

如何使用EquationDirect()的例子。

  • 红点位于通过第23条和第11条的最小值所画的线与零条垂直线的交点。
    double y=EquationDirect(23, Low[23], 11, Low[11], 0);
    SetArrow(108, Red, "", 0, y);

  • 从红点通过图形上的两个任意点的直线。
    double p, x[2], y[2];
    int    cd=115, i, k, ot;
    string on;
    
    ArrayInitialize(x, 0.0);
    ArrayInitialize(y, 0.0);
    
    k=ObjectsTotal();
    for (i=k-1; i>=0; i--) {
      on=ObjectName(i);
      ot=ObjectType(on);
      if (ot==OBJ_ARROW) {
        if (ObjectGet(on, OBJPROP_ARROWCODE)==cd) ObjectDelete(on);
      }
    }
    k=ObjectsTotal();
    for (i=0; i<k; i++) {
      on=ObjectName(i);
      ot=ObjectType(on);
      if (ot==OBJ_ARROW) {
        if (x[0]==0) {
          x[0]=iBarShift(NULL, 0, ObjectGet(on, OBJPROP_TIME1));
          y[0]=ObjectGet(on, OBJPROP_PRICE1);
        } else {
          if (x[1]==0) {
            x[1]=iBarShift(NULL, 0, ObjectGet(on, OBJPROP_TIME1));
            y[1]=ObjectGet(on, OBJPROP_PRICE1);
          }
        }
      }
    }
    if (x[0]==0 || x[1]==0 || y[0]==0 || y[1]==0)
      Message("НЕ инициализированы исходные данные!");
    else {
      if (x[0]>x[1]) k=x[0]; else k=x[1];
      for (i=k; i>=0; i--) {
        if (i!=x[0] && i!=x[1]) p=EquationDirect(x[0], y[0], x[1], y[1], i);
        else {
          if (i==x[0]) p=y[0];
          if (i==x[1]) p=y[1];
        }
        SetArrow(cd, Red, "arr"+i, Time[i], p);
      }
    }

附上一个测试EquationDirect()的脚本。

附加的文件:
 

GetArrowInterval()函数。

我写这个函数是为了提高开发信号指标的便利性,也就是那些能给出明确的买入卖出 信号的指标。这种指标的信号,我通常是在一个柱状体的Khai上方 做一个向下的箭头,或者 相应柱状体的低点下方 做一个向上的箭头。低于 "和 "高于 "的数值通常是几个点,所以箭头不会 "跑过 "栏。例如,对于只为一小时条形图设计的单一时间框架指标来说,这并不是什么大问题。对于每个时间段,我都有不同的值 "低于 "和 "高于"。然而,对于一个多帧指标,我不得不使用GetArrowInterval()函数。

//+------------------------------------------------------------------+
//| Возвращает интервал установки сигнальных указателей              |
//+------------------------------------------------------------------+
int GetArrowInterval() {
  int p = Period();

  switch (p) {
    case 1:     return(4);
    case 5:     return(5);
    case 15:    return(6);
    case 30:    return(8);
    case 60:    return(10);
    case 240:   return(20);
    case 1440:  return(40);
    case 10080: return(80);
    case 43200: return(150);
  }
}

这是一个古老的变体,已经非常迅速地转变为一个更紧凑和通用的形式。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//+----------------------------------------------------------------------------+
//|  Описание : Возвращает интервал установки сигнальных указателей            |
//|  Параметры:                                                                |
//|    pr - процент относительно ценового размера окна                         |
//+----------------------------------------------------------------------------+
int GetArrowInterval(int pr=7) {
  if (pr<=0) pr=7;
  return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
}
 

如何使用GetArrowInterval()的例子。

  • 在当前柱状图上的卖出信号。
    SetArrow(242, Red, "", Time[0], High[0]+GetArrowInterval(15)*Point, 2);

  • 在前一个(第一个)条形上发出买入信号。
    SetArrow(233, Blue, "", Time[1], Low[1]-GetArrowInterval()*Point, 1);
    

SZY.附上一个测试函数GetArrowInterval()的脚本。

附加的文件:
 
亲爱的伊戈尔。在e-SOTrailing中,你需要修改采取和停止的位置。
 
khorosh писал (а)>>
在e-SOTrailing EA中,你需要对取舍和停止进行修改。

谢谢你!完成了...更正后的EA在我的网站上。

 
KimIV писал (а)>>

EquationDirect()函数。

直线的方程。这个函数计算在与通过图形上两个任意点的直线相交处的尾数X 的序数Y 的值。该函数需要以下强制性参数。

  • x1,y1- 第一个点的坐标。
  • x2,y2- 第二个点的坐标。
  • x- 数值,你想计算Y 轴的尾数。

请写出直线方程的第二部分。

计算X 的尾数在与通过图形上一个任意点的线的交点处的序数Y 的值,并给定角度。该函数需要以下强制性参数。

  • x1,y1 - 第一个点的坐标。
  • a - 角度,单位为度。
  • x - 值,你想计算y 轴的 尾数

谢谢你。

 
真正的程序员伊戈尔。对你表示极大的尊重和敬意。
 
djday писал (а)>>

请写出直线方程的第二部分。

计算在给定角度的图形上,与通过一个任意点的直线相交的点的序数Y 的值,即标线X。该函数需要以下强制性参数。

  • x1,y1 - 第一个点的坐标。
  • a - 角度,单位为度。
  • x - 值,要计算Y 轴的 尾数

谢谢你。

当导管相等时,出现45°角。当导管的测量单位是公制时,就没有问题了。一个猫头鹰是两米,另一个也是两米。所以这是一个45°的角度。但是,当一个cathetus是条数或时间,而另一个cathetus是价格时,怎么办?你如何确保它们是相等的,从而使角度为45°?这是一个规模化的问题。给我一个支点,我就能移动地面(c)。