任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 650

 
AlexeyVik:

我的理解是,他需要从另一个图表中获得对象参数。

如果来自另一个图表,让他使用带有图表标识符的函数变体。

也没有问题。

 
sergeev:

如果它来自一个不同的图表,让它使用一个带有图表标识符的函数变体。

也没有问题。

完全正确,但我还不需要使用图表标识符,我只是在理论上熟悉它,这就是为什么我建议选择将对象映射到当前图表上。
 
rov_kvn:



那很好啊!这正是问题所在。谢谢你,亲爱的同志!
 
sergeev:

如果它来自一个不同的图表,让它使用一个带有图表标识符的函数变体。

也没有问题。


根据我的理解,在我的例子中,唯一的选择是价格用ObjectGetDouble(),日期用ObjectGetInteger()。

我试着在当前的TF中获取价格,chart_id = 0。

double price1 = ObjectGetDouble(0,"Supply",3);

- 价值,因为它应该是。我尝试了两种ID和价值,从这里https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes,而不是0,但它返回0。一个 "正确的 "图表_ID应该是什么样子?

 
.roman.:

根据我的理解,在我的例子中,唯一的选择是价格用ObjectGetDouble(),日期用ObjectGetInteger()。

我想获得当前TF中的价格,chart_id = 0。

- 价值,因为它应该是。我尝试了两种ID和价值,从这里https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes,而不是0,但它返回0。一个 "正确的 "图表_ID应该是什么样子?

chart_id = 0不是TF,是当前图表。你需要找到拥有所需对象的图表的chart_id。这就是我由于暂时没有必要而没有做的事情。
 
.roman.:

根据我的理解,在我的例子中,唯一的选择是价格用ObjectGetDouble(),日期用ObjectGetInteger()。

试图获取当前TF中的价格,chart_id = 0

double price1 = ObjectGetDouble(0,"Supply",3);


什么是3



- 价值是应该的。我尝试了两种ID和价值,从这里https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes,而不是0,但它返回0。一个 "正确的 "图表_ID应该是什么样子?

TF期与chart_id有什么关系?


你对使用什么的理解有一个不切实际的漏洞


描述你的问题,不要太晦涩难懂,围绕着内涵。

我需要什么? 要从一个对象中检索数据?

- ObjectGet 你为什么不喜欢它?

 
sergeev:

什么是3


矩形的下限的价格值。https://docs.mql4.com/constants/objectconstants/enum_object_property


TF周期与图表ID有什么关系?

我不知道怎么做。这就是为什么我想自己做,问,因为我失败了。

sergeev:
描述你的任务,不要黑着脸到处摸索。你到底需要什么? 从一个对象中获取数据? - ObjectGet 它有什么问题?

你真的在问吗?我已经写了3次,我需要从另外两个时间段(H4和D)获得矩形数据(用于建立矩形的2个价格坐标和2个时间坐标),同时在第三个时间段(H1)。

ObjectGet不适合,因为它不能从另一个时间段接收任何东西。

该指标在所有时间段都画矩形,我给它添加了代码,它将传输其他时间段的矩形坐标,而不切换到其他时间段。 我不知道如何解释它的其他方式。

 
.roman.:

矩形下限的价格值。https://docs.mql4.com/constants/objectconstants/enum_object_property



我不知道怎么做。这就是为什么我想通过直觉和询问来做,因为这没有用。

你真的在问吗?我已经写了3次,我需要从其他两个时间段(H4和D)获得矩形数据(2个价格坐标和2个时间坐标来建立矩形),同时在第三个时间段(H1)。

ObjectGet不合适,因为我不能用它从另一个时间段获得任何东西。

它在所有的时间段上画矩形,我正在给它添加代码,通过这些代码,它将传递其他时间段的矩形坐标,而不切换到它们。 我不知道如何以其他方式解释。

只要明白,另一个时间框架和另一个图表或图形是不同的概念,相应地,解决问题的方法也不同。
 
AlexeyVik:
理解不同的TF和不同的图或图表是不同的概念,因此是解决问题的不同方法。

所以我只乐意理解和接受任何解决方案,如果我有想法的话。这就是为什么我在征求如何实施的意见。
 
Top2n:

谢谢你!收到。只是在OrderSelect错误的情况下,除了继续,不清楚如何停止。

删除了迟到的信息,做了与描述几乎相同的事情。

有时你可以把返回值和错误符号结合起来。当把一些数值作为错误的标志是有意义的。例如,一个等于0的平均价格。

然后,只要OrderSelect() 返回一个错误符号,我们的函数就会立即返回一个错误符号。

#property strict

/******************************************************************************/
double CenaUsrednenija(const int type,const int Magic){
  double nn = 0, bb = 0;

  for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderType() == type && OrderMagicNumber() == Magic)
      {
        double op = OrderOpenPrice();
        double llot = OrderLots();

        bb += op * llot;
        nn += llot;
        Print("  type = ", type, " Цена открытия = ", op, " Лот = ", llot, " itog = op * llot = ", op * llot, " factb = bb / nn = ", bb / nn);
      }
    } else {
      return 0; // Цена == 0 - признак ошибки (OrderSelect() не смогла выбрать ордер)
    }
  }

  return nn != 0 ? NormalizeDouble(bb / nn, _Digits) : 0; // Делить на 0 не следует
}

/******************************************************************************/
void OnStart() {
  Print("CenaUsrednenija(OP_BUY, 536525) = ", CenaUsrednenija(OP_BUY, 536525));
}

独自运行,我得到了它。

23:32:03 Script 1 EURUSD,H1: loaded successfully
23:32:03 1 EURUSD,H1: initialized
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36626 Лот = 0.1 itog = op * llot = 0.136626 factb = bb / nn = 1.36626
23:32:03 1 EURUSD,H1:   type = 0 Цена открытия = 1.36931 Лот = 0.1 itog = op * llot = 0.136931 factb = bb / nn = 1.367785
23:32:03 1 EURUSD,H1: CenaUsrednenija(OP_BUY, 536525) = 1.36779
23:32:03 1 EURUSD,H1: uninit reason 0
23:32:03 Script 1 EURUSD,H1: removed

这似乎是真的...

是的,我没有在Print()中使用条件表达式来避免假设的除以0,因为这个Print()是调试用的。