KimIV的有用功能 - 页 46

 
SK. писал (а)>>

这就是我的意思。你必须考虑到现有的限制,一般来说,这些限制一直在变化。

是否有一些函数可以分析所有可能的约束?

修改的情况也一样。

--

(我有16个函数 - 每个好的订单(OP,SL,TP)有3个,每个市场订单(SL,TP)有2个。

然后还有一些分析许可证组合的函数)。

是的,我也有一个单独的函数用于设置订单,检查所有可能的限制,还有一个单独的函数(部分类似于第一个)用于修改。我不会给出代码--那里有很多只有我需要的 "剩余 "东西,--哎哟。:-)但一般来说--在真正的交易专家顾问中没有它是很困难的。:-)

 
Shu писал (а)>>

是的,我也有一个单独的函数用于设置订单,它检查所有可能的限制,还有一个单独的函数(部分类似于第一个函数)用于修改。 我不会给你代码--有这么多 "左 "的技巧,只有我需要,所以--哎哟。:-)但一般来说--在真正的交易专家顾问中没有它是很困难的。:-)

实际上,我想检查一下自己--我是否已经考虑到了所有的事情。如果你不检查它们,你可能会遇到一系列的退信(有时可能会被禁止)。

我将简要地列出我的支票。

1) StopLevel。例如,在修改SL BuyStop时。

它不只是检查距离。你应该分析StopLevel的当前位置和止损单的移动方向。

如果SL在StopLevel走廊之外,你可以把它移近或无限期地移动它。

如果SL在走廊内,那么向上的运动就会被拒绝。接受向下移动,但要考虑到StopLevel:如果距离走廊内的修改距离被设定为3p,而走廊是30p,那么接受执行的实际值是由StopLevel走廊边界定义。

2) FreezeLevel。

3. StopLevel和TICKSIZE的比例。该订单可能在所有通道之外,但不是TICKSIZE的倍数--那么它就是麻烦。它需要向修改方向变圆。对 "非货币 "来说至关重要。

4.地段。 米洛特+/-米洛特。考虑到部分关闭和反关闭也只限于迷你区(虽然在我看来这是不合逻辑的,但这就是事实)。

在个人支票之后,如果每张支票的结果都是积极的(没有禁止),就会发出订单。

 

完全公布的函数库。

b-Graphics.rar - 与图形对象一起工作

b-Indicators.rar - 与指标一起工作

 

ArrayLR()函数。

该函数生成一个线性回归值的数组。该函数接受以下强制性参数。

  • x 是一个数字系列值的数组。这是输入参数。这个数组必须包含函数被调用前的数值。
  • y 是一个线性回归值的数组。这是输出参数,即该数组将在函数执行后被填充。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.05.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//|    y - массив значений линейной регрессии                                  |
//+----------------------------------------------------------------------------+
void ArrayLR(double& x[], double& y[]) {
  double a, b, c, sx=0, sx2=0, sxy=0, sy=0;
  int    i, n=ArraySize(x);

  if (n>1) {
    for (i=0; i<n; i++) {
      sx+=i+1;
      sy+=x[i];
      sxy+=(i+1)*x[i];
      sx2+=(i+1)*(i+1);
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
    if (c!=0) a=a/c; else a=0;
    b=(sy-a*sx)/n;
    ArrayResize(y, n);
    for (i=0; i<n; i++) y[i]=a*(i+1)+b;
  } else Print("ArrayLR(): Недостаточное количество элементов ряда! n=", n);
}
 

使用ArrayLR()函数的例子。

让我们标出前30个柱子的线性回归 的价格水平。

#define r 30
double x[r], y[];
for (int i=0; i<r; i++) x[i]=Close[i+1];
ArrayLR(x, y);
for (i=0; i<r; i++) SetArrow(170, Red, "arr"+i, Time[i+1], y[i]);

P.S. 附上一个测试ArrayLR()函数的脚本。

附加的文件:
 
KimIV писал (а)>>

完全公布的函数库。

b-Graphics.rar - 与图形对象一起工作

b-Indicators.rar - 与指标一起工作

非常酷!>> 谢谢你!

 
Parabellum писал (а)>>

伊戈尔,有一个很好的指标,可以把几个蜡烛合并成一个。但它只在小时图上起作用。是否有可能使其普及?

谢谢你。

?

 
Parabellum писал (а)>>

?

ooh...对不起...

这样的指标已经写过了,我不记得是谁写的,也不记得在哪里看到过......我以为你会自己找到它,或者有人会给你链接......。

 

ArrayLR()函数不能准确工作。

1.没有考虑到酒吧的时间位置。当条形图缺失时,它的工作是不正确的。

2.用于计算系数的算法有一个缺点,就是四舍五入的误差积累,见'帮我写一个线性回归'Rosh 页面的最底部证实了这个缺陷)。

3.我提出一种没有这些缺点的算法。

4.如果你把 X[i]=Time[i+1];改为 X[i]=i+1;,算法类似,但没有错误累积。

5.不仅是在周末,酒吧也会被跳过 :-( ( )

这里是我的变体

//+----------------------------------------------------------------------------+
//|  Автор    : Сергей Привалов aka Prival,  Skype: privalov-sv                |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.09.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии y(x)=A*x+B.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    X    - массив значений числового ряда, ось X                            |
//|    Y    - массив значений числового ряда, ось Y                            |
//+----------------------------------------------------------------------------+

void Array_LR(double &X[], double& Y[])
{
      double mo_X = 0, mo_Y = 0, var_0 = 0, var_1 = 0;
      int    i,N=ArraySize(X);
      double A,B;
     
      if(N>1)  {
         for ( i = 0; i < N; i ++ ) {
            mo_X +=X[i];
          mo_Y +=Y[i];
      }
      mo_X /=N;
      mo_Y /=N;
        
      for ( i = 0; i < N; i ++ )   {
         var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
         var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
      }
      // значение коэффициента A
      if(var_1!=0)   A = var_0 / var_1; else A=0;
      // значение коэффициента B
      B = mo_Y - A * mo_X;
      ArrayResize(Y, N);
     for (i=0; i<N; i++) Y[i]=A*X[i]+B;
    } else Print("ArrayLR(): Недостаточное количество элементов ряда! n=", N);
    
}

这里有一张图片

工作实例

#define r 280
void start() {
  double X[r], Y[r];
  for (int i=0; i<r; i++)  {
    Y[i]=Close[i+1];
    X[i]=Time[i+1];
  }
   Array_LR(X, Y);
  for (i=0; i<r; i++) {SetArrow(170, Blue, "arr"+i, X[i], Y[i])}

所附的检查脚本

附加的文件:
 
Prival писал (а)>>
这里是我的变体

好的,谢尔盖!让这个函数有两个变体。

我的变体是好的,因为它与内置图形对象OBJ_REGRESSION相同。如果有人需要从这个物体上获取价格,我的功能会帮助他们,而你的,唉......。但它可以用于其他方面...谢谢你!