读取设置为图表的指标缓冲区 - 页 5

 
Dmitry Fedoseev:
什么声明?标题中的说法是不正确的。读取缓冲区没有问题。带着什么问题--写了,而且还是给了这个帖子的链接。我还应该追着你跑,逼着你去吗?

侵略性与论证是成反比的!哪个链接是有问题的--我不明白。

给出了指标和EA代码。事实表明,在某些情况下,你无法通过iCustom获得缓冲区。因此,这个标题不仅是正确的,也是经过验证的。

与iCustom的限制不同,它是类似的。如果不说别的,你的 "你可以 "和 "我不认为有什么问题 "有什么意义?那就不要参与这个话题了,因为你无法贡献任何建设性的内容。

 
不可能编写一个专家顾问 来接收在非默认输入参数的图表上运行的指标的缓冲值。因为iCustom的实现方式是这样的,它需要在SOURCE中为每个指标编写自己的调用。
 
comp:

做出这样的声明,就像在头上踢了一脚。我决定在kodobase中寻找指标。我没有发现任何使用我所习惯的东西:事件驱动模型+OOP。

很难说哪种情况更多:对这种状况的挫折感和失望感。事实证明,指标是非常原始的写作方式。

给我举个例子,在什么情况下需要用事件模型结合给EA提供数据。

我并不反对访问图表上运行的指标。对参数的结构也是如此(顺便说一下,MT5已经有了)。

但我再次试图暗示,你从错误的方面来处理这个任务。没有必要用显微镜来敲打钉子,它是用来做别的事情的。

 
comp:
不可能编写一个专家顾问 来接收在图表上运行的具有非默认输入参数的指标的缓冲值。因为iCustom是以这种方式实现的,它需要在SOURCE中为每个指标编写自己的调用。

我不知道。

owl读取缓冲区0

靛蓝可以挂在不同的图表上

指挥官IComp

ecomp owl

也可以从Owl写值到指示器缓冲区。

附加的文件:
icomp_v2.ex4  8 kb
ecomp_v2.ex4  6 kb
 

输出图表上运行的所有指标的名称和输入参数的脚本实例

#property strict

string GetBetweenString( string &SourceString, const string BeginString, const string EndString = "" )
{
  string Str = SourceString;
  int Pos1 = 0;
  int Pos2 = 0;

  if (BeginString != "")
    Pos1 = StringFind(SourceString, BeginString);

  if (Pos1 >= 0)
  {
    Pos1 += StringLen(BeginString);

    Pos2 = StringFind(SourceString, EndString, Pos1);

    if (Pos2 != Pos1)
      Str = StringSubstr(SourceString, Pos1, Pos2 - Pos1);
    else
      Str = "";
  }

  SourceString = StringSubstr(SourceString, Pos2 + StringLen(EndString));

  return(Str);
}

string FileToString( const string FileName )
{
  string Res = "";

  const int handle = FileOpen(FileName, ::FILE_READ|::FILE_BIN);

  if (handle != INVALID_HANDLE)
  {
    uchar Array[];

    FileReadArray(handle, Array);

    Res = CharArrayToString(Array);

    FileClose(handle);
  }

  return(Res);
}

string GetIndicatorsData( const long Chart_ID = 0 )
{
  string Res = "Current chart:";

  const string FileName = ::WindowExpertName() + ".tpl";

  if (ChartSaveTemplate(Chart_ID, "..\\MQL4\\Files\\" + FileName))
  {
    string Str = FileToString(FileName);

    int PosName = StringFind(Str, "name=Custom Indicator");

    while (PosName > 0)
    {
      const string IndicatorName = GetBetweenString(Str, "<indicator>\r\nname=Custom Indicator\r\n<expert>\r\nname=", "\r\n");

      Res += "\n\nIndicator: " + IndicatorName;

      const int PosInputs = StringFind(Str, "<inputs>");
      PosName = StringFind(Str, "name=Custom Indicator");

      if (PosInputs > 0)
        if ((PosName < 0) || (PosName > PosInputs))
          Res += "\nInputs:\n" + GetBetweenString(Str, "<inputs>\r\n", "\r\n</inputs>");

      Res += "\n\nLast Null Buffer Value (ONLY Default Inputs) = " + (string)iCustom(Symbol(), Period(), IndicatorName, 0, 0);
    }
  }

  return(Res);
}

void OnStart( void )
{
  MessageBox(GetIndicatorsData());

  return;
}

这些数据应该足以计算出指标的数值。但由于iCustom的 "省略号",不可能做到这一点。

 
pako:

我不知道。

owl读取缓冲区0

靛蓝可以挂在不同的图表上

指挥官IComp

ecomp owl

消息来源?
 
comp:
消息来源?
没有动力。
 
comp:

输出图表上运行的所有指标的名称和输入参数的脚本实例

这些数据应该足以计算出指标的数值。但由于iCustom的 "省略号",不可能做到这一点。

你想知道哪个指标在图表上以及它的参数吗?

你可以看到名字

你能看到多少和哪些参数

并且脚本显示正确的


名称和多少个参数

 
pako:

你想知道哪个指标在图表上徘徊以及它的参数吗?

不,我想了解你的例子中什么地方不工作,因为你的EA没有显示变化的指标数据。

 
comp:

不,我想了解你的例子中什么地方不工作,因为你的EA没有显示变化的指标数据。

它显示了来自缓冲区0的数据

它显示的是缓冲区0的数据。