KimIV的有用功能 - 页 34

 
KimIV писал (а)>>

MQL4中的指针是很棘手的。没有直接的支持。论坛上有人试图用数组来做这件事,我想。我无法更准确地表达。自己搜索一下。

MathRand()

你只能以编程方式改变数组的第一维。ArrayResize() 函数。第二、第三和第四维度必须硬性设定。

好吧,让我们也忘了指针和动态数组...

期待第五版语言的出现...

谢谢你的帮助...



使用一个网格工作很容易实现。

有趣的是,对于我的想法来说,一个网络是不够的,我想做一个网络间切换的算法,有了指针,这并不难。

但是没有......我们必须用硬编码。

 

SetTLineByAngle()函数。

此函数按当前图表上的斜率角度设置趋势线的OBJ_TRENDBYANGLE 对象。

  • cl- TRENDBYANGLE对象的颜色。必要的参数。
  • nm- 对象名称。当传递默认值--""时, 当前条形图的开放时间被用作名称。
  • t1- 对象设置时间的第一个坐标。默认值 -0- 第十条的开放时间。
  • p1- 设定价格的对象的第一个坐标。默认值 -0- 第十条的最小值。
  • t2- 对象设置时间的第二个坐标。默认值--0--当前酒吧的开放时间。
  • p2- 设定价格的对象的第二个坐标。这个参数是一种开关。它的非零值使这个函数等同于SetTLine(),也就是说,将使用时间/价格坐标对绘制一条趋势线,而趋势线的斜率角度值将被忽略。默认值 -0- 按斜率角度构建趋势线。
  • an- 斜坡角度,单位是度。默认值 -0- 水平线。
  • ry- BOW属性的标志。 默认值是False
  • st- 线条风格。有效值是STYLE_SOLID(默认)、STYLE_DASHSTYLE_DOTSTYLE_DASHDOT
  • wd- 线条宽度。默认值为1
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              double an=0, bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2);
  else ObjectSet(nm, OBJPROP_ANGLE, an);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

如何使用SetTLineByAngle()的例子。

  1. 橙色实心梁,与第5条的最小值成45°角。
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. 从第13条的最小值开始的红色点状射线的扇形。
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

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

附加的文件:
 

SetArrow()函数。

此函数将OBJ_ARROW 对象图标设置为当前图表。

  • cd- 图标代码。必要的参数。
  • cl- 图标的颜色。必要的参数。
  • nm- 对象的名称。如果默认值被转移--"",则 使用当前条形图的打开时间作为名称。
  • t1- 对象设定时间的第一个坐标。默认值--0--当前酒吧开放时间。
  • p1- 设定价格的对象的第一个坐标。默认值--0--当前买入价。
  • sz- 图标的大小。默认值--0
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 

如何使用SetArrow()的例子。

  • 在第9根柱子的高点上有一个金色的左边价格标记
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • 在第2个条形图的最大值处有红色的右边价格标记。
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3.蓝色箭头在第2条的最大值上方。
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

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

附加的文件:
 
非常感谢你所做的工作,你是否介意我收集这个主题的特点,并将它们发布在我的网站上,在一个单独的部分,并有一个链接到论坛和你的网站。
 

总的来说,如果在这篇文章的第一页有一个 "目录",那就很酷。一个包含功能列表、描述和页面链接的表格。或者在第一页保持一个更新的档案,而描述可以在其他页面找到。

所以,如果xrust会提出他的建议,在这里重复一下会很好。为了系统化的苦心经营:))

 
xrust писал (а)>>
......你是否介意我从这个主题中收集特征,并将其发布在我的网站上,在一个单独的部分,并附上论坛和你网站的链接。

不,我不会...

 
xrust писал (а)>>
非常感谢你所做的一切,你是否介意我收集这个分支的功能,并将它们发布在我的网站上,在一个单独的部分,并提及论坛和你的网站。

创建一个 "inluder "文件(mqh)(可能是2个--"贸易 "和 "其他"),就其名称达成一致,并强迫 "开发者 "将其纳入分发范围。这样,每个EA中的每个人都不必重新发明轮子。

:)

 
再次感谢你,我只是有点懒,我想收集手头的一切。还有一个问题,你是否介意我在我的函数中使用与你相同的语法和变量名,以使它们标准化,可以这么说。