KimIV的有用功能 - 页 33

 

SetVLine()函数。

此函数设置当前图表上的OBJ_VLINE 对象垂直线。

  • cl- 垂直线对象的颜色。义务性参数。
  • nm- 对象名称。当传递默认值--""时, 当前酒吧的开放时间被用作对象名称。
  • t1- 对象设置时间。默认值--0--当前酒吧开放时间。
  • st- 线条风格。有效值是STYLE_SOLID(默认)、STYLE_DASHSTYLE_DOTSTYLE_DASHDOT
  • wd- 线条宽度。默认值为1
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

如何使用SetVLine()的例子。

  1. 蓝色实心垂直线 在当前条上。
    SetVLine(Aqua);

  2. ,第八条上的丁香色粗线。
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. 栅栏上的虚线网格 14:00。
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

行政长官。>> 我要去。

给我看一张照片,让我们试着做一个。

 
TheXpert писал (а)>>

在图中显示出来,让我们试着做一下。

一个自定义函数,计算指标所描述的区域,如RSI和中间线。

中线以下的曲线和中线本身所限定的空间是面积-S1,中线以上是+S2。

发布到https://www.mql5.com/ru/forum/109590,不要干涉。

 

SetTLine()函数。

此函数设置当前图表上的OBJ_TREND 趋势线对象。

  • cl- TREND LINE对象的颜色。它是一个强制性参数。
  • nm- 对象名称。当传递默认值--""时, 当前条形图的开放时间被用作名称。
  • t1- 对象设置时间的第一个坐标。默认值 -0- 第十条的开放时间。
  • p1- 设定价格的对象的第一个坐标。默认值 -0- 第十条的最小值。
  • t2- 对象设置时间的第二个坐标。默认值--0--当前酒吧的开放时间。
  • p2- 设定价格的对象的第二个坐标。默认值--0--当前条形图的低点。
  • ry- BLUE属性的标志。 默认值为False
  • st- 线条风格。有效值是STYLE_SOLID(默认)、STYLE_DASHSTYLE_DOTSTYLE_DASHDOT
  • wd- 线条宽度。默认值为1
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=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 (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
 

如何使用SetTLine()的例子。

  1. 橙色实线穿过第15条和当前条的最小值。
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. 红色趋势线 穿过第35条和第10条的高点。
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. 丁香浓郁的光线穿过前两天的高点。
    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));
    int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
    int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
    int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
    int n2=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH. 附上一个测试SetTLine()函数的脚本。

附加的文件:
 

伊戈尔,我是把你作为一个更有经验的MQL4编码者来称呼的。

我开始为Kohonen的网络编写一个库。

我想让它尽可能地灵活和方便,但我面临着一个我还不能克服的时刻。

例1:

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

使用MQL4是否可以做到这一点,如果可以,如何做到?



例2:

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

同样,如果可以的话,请给我代码。这个例子在我看来是可以实现的。



预先感谢你。

 
TheXpert писал (а)>>
我想让它变得最灵活、最方便,但我面临着一个我还不能克服的时刻。
>> 示例1。
是否可以用MQL4工具来做,如果可以,如何做?

我明白,你想用指针来组织工作。因此,一个变量指向另一个变量...或者,也许我弄错了?尝试用语言解释你的需求。

TheXpert 写道>>
例2:
同样,如果有可能做这样的事情,请给我代码。在我看来,这个例子是可以实施的。
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а)>>

我明白,你想用指针来组织工作。因此,一个变量指向另一个变量...或者,也许我弄错了?尝试用语言解释你的需求。

是的,算是吧。


关于第二个问题 -- 用随机值初始化如何?

是的,还有,我需要的正是动态数组。

 
TheXpert писал (а)>>
是的,算是吧。

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

TheXpert 写道(a)>>
关于第二个问题 -- 用随机值初始化怎么样?

MathRand()

TheXpert 写道(a)>>
是的,还有,我需要的正是动态数组。
只有数组的第一维可以通过编程改变。ArrayResize() 函数。第二、第三和第四维度必须硬性设定。