初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1311

 
Sprut 185:

谢谢你的参与。

不幸的是,ObjectSet*** 函数并不适合我的任务。

我自己用OnDeinit()函数 解决了这个问题。

现在一切都在正常工作。

但在你的问题中,有这样的话

Sprut 185:

请帮助我解决一个问题!

我只是在学习写代码,在这方面,我请你宽恕我的文盲身份。

我想帮助你理解OnChartEvent 函数,当你改变时间框架,或改变指标菜单中的设置,它将更新图表中的图形对象。

我知道你必须先删除 图形对象,然后再重新创建它们。如果对象被删除,就无法访问其属性,那么如何 重新创建这些对象.......。 也许我不明白?或者也许有其他方法--更新图表上的图形对象

请写一个例子,并对如何做到这一点提出意见。

而为了不被删除,只需通过ObjectSet***函数之一改变所需的对象属性

至于删除所有对象.........,在不分青红皂白地删除所有对象时应该非常小心......在图表上的对象中,可能有手动创建的对象或由其他专家顾问/指标创建的对象。如果你喜欢删除对象,你应该注意通过前缀删除。确实,你必须用前缀来创建。这并不困难。

 
什么是结果

iSpread ?


我看到,如果你在终端的Symbols/Bars中查询条形图,它与点差值大致相似。

当然,这些值并不对应于SYMBOL_SPREAD给出的真实值。

为什么有这样的差别?那么使用iSpread 显示的如此不真实的价差是什么呢?

 
Aleksei Skrypnev:
该函数显示的结果是什么

iSpread ?


我看到,如果你在终端的Symbols/Bars中查询条形图,它与点差值大致相似。

当然,这些值并不对应于SYMBOL_SPREAD给出的真实值。

为什么有这样的差别?那么使用iSpread 显示的如此不真实的价差是什么呢?

每条的最小差价。

我添加了一个用于检查的缓冲区--它从指标数组spread[]中获取数据,并显示当前条形的注释--iSpread的结果。


如何做到这一点:传播控制

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
附加的文件:
 

问候!

你能告诉我为什么变量 "ATR14 "没有变化,我怎么能看到它的变化?

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

问候!

你能告诉我为什么变量 "ATR14 "没有变化吗? 我怎样才能看到它的变化?

因为在MQL5中,指标句柄(顺便说一下,它有int类型)是一次性创建的,并且是在OnInit中完成的。

而对于来自指示器的数据接收,则使用CopyBuffer

 
Vladimir Karputov:

因为在MQL5中,指标句柄(顺便说一下,它有int类型)是一次性创建的,并且是在OnInit中完成的。

而对于来自指示器的数据接收,则使用CopyBuffer

好吧,让我们假设一下。

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



什么都没有改变。

 
Alexey Belyakov:

问候!

你能告诉我为什么变量 "ATR14 "没有变化吗? 我怎样才能看到它的变化?

下面是一个例子һttp://www.mql5.com/ru/docs/indicators/iatr

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

好吧,我们只能说

什么都没有改变。

你几乎得到了它。我建议调用数组'array_atr'而不是'ATR14m'。然后你会更快地看到你在调用'评论'时的错误。

 
Vladimir Karputov:

你几乎说对了。我建议调用数组'array_atr'而不是'ATR14m'。然后你会更快地在"评论"调用中看到你的错误。

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

改变了它,得到了错误:" 'array_atr' - 无效的阵列访问 "


 
Vladimir Karputov:

你几乎说对了。我建议调用数组'array_atr'而不是'ATR14m'。然后你会更快地看到你在调用'评论'时的错误。

你认为把孩子的便盆命名为夜光瓶会改变什么吗?

那里有如此大的误解,我甚至不敢提出建议......你必须读50遍文档才能理解......