错误、漏洞、问题 - 页 1868

 

建立1589

如果一个指标没有这样的行情,或者没有被添加到市场概览中,在不使用IndicatorDelete的情况下,如何使指标中的OnTimer在账户/经纪商改变时停止工作?

文档中的勘误--没有IndicatorDelete函数,有ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

bool  IndicatorDelete(
   int            sub_win      // номер подокна
   const string   name         // короткое имя индикатора
   );

情况如下 - 我在期货上运行所附的指标,我切换到另一个经纪商,但计时器一直在滴答作响,尽管图表变成黑色,没有更新。

它没有写出去初始化的原因

REASON_ACCOUNT

6

另一个账户已被激活或由于账户设置的改变而重新连接到交易服务器


2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:31.810 TF through OnTimer (DDM7,M1)    Аккаунт = AMPGlobalClearing-Demo-CQG
тут сменили брокера,причины деинициализации нет
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Работаем
2017.04.21 12:10:36.809 TF through OnTimer (DDM7,M1)    Аккаунт = FXOpen-MT5
//+------------------------------------------------------------------+
//|                                           TF through OnTimer.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
string server;
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   Print("Причина деинициализации = ",reason);
   
  }
//+------------------------------------------------------------------+
int OnInit()
  {
  server=AccountInfoString(ACCOUNT_SERVER);
   EventSetMillisecondTimer(5000);
   IndicatorSetString(INDICATOR_SHORTNAME,"name");
   
//--- indicator buffers mapping
//---
   return(INIT_SUCCEEDED);
  }  
  
  ////////////
  void OnTimer ()
  {
  Print("Работаем");
  Print("Аккаунт = ",AccountInfoString(ACCOUNT_SERVER));
//  if ( server!=AccountInfoString(ACCOUNT_SERVER) ) ChartIndicatorDelete(0,0,"name");
  }
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
Документация по MQL5: Стандартная библиотека / Ценовые графики / IndicatorDelete
  • www.mql5.com
Стандартная библиотека / Ценовые графики / IndicatorDelete - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

建立1589

OnDeinit不被调用。
 
什么意思
fxsaber:
OnDeinit不被调用。

你是什么意思? 根本没有调用,还是在这个代码中?

 
kaus_bonus:

建立1589

在不使用IndicatorDelete的情况下,如何使指标中的OnTimer在账户/经纪商改变时停止工作,前提是它没有这样的股票,或者它没有被添加到市场概览中?

文档中的勘误--没有IndicatorDelete函数,有ChartIndicatorDelete!

https://www.mql5.com/ru/docs/standardlibrary/cchart/cchartindicatordelete

情况如下 - 我在期货上运行所附的指标,我切换到另一个经纪商,但计时器一直在滴答作响,尽管图表变成黑色,没有更新。

它没有写出去初始化的原因

REASON_ACCOUNT

6

另一个账户被激活或重新连接到交易服务器是由账户设置的变化引起的



装载和卸载指标

在以下情况下上传指标

  • 在图表上附加一个指标
  • 终端的开始(如果一个指标在终端先前关闭之前被连接到一个图表上)
  • 加载一个模板(如果一个指标附在一个图表上)
  • 剖面图变化(如果指标附在其中一个剖面图上)。
  • 符号和/或图表周期的变化,该指标与之相连。
  • 在成功地重新编译一个指标后,如果该指标已被连接到一个图表上。
  • 改变指标的输入参数

在以下情况下,指标被卸载

  • 当指标从图表中分离出来时。
  • 关闭终端(如果一个指标已被连接到图表上)。
  • 如果一个指标被附在一个图表上,则加载一个模板。
  • 关闭该指标所连接的图表
  • 如果该指标被附在要改变的概况的一个图表上,则说明概况改变。
  • 符号和/或图表周期的变化,该指标与之相连。
  • 改变指标的输入参数。


帐户变更 "不存在的原因,它意味着指标在帐户切换时没有被卸载,因此,当你改变交易帐户时,指标的OnDeinit()也不会被卸载。

 
kaus_bonus:

你是什么意思? 根本没有调用,还是在这个代码中?

在你的情况下。
 
Vladimir Karputov:

装货和卸货指标


在以下情况下,指标被卸载

  • 当指标从图表中分离出来时。
  • 关闭终端(如果一个指标连接到一个图表上)
  • 如果一个指标附在图表上,则加载一个模板
  • 关闭该指标所连接的图表
  • 如果该指标被附在要改变的概况的一个图表上,则说明概况改变。
  • 符号和/或图表周期的变化,该指标与之相连。
  • 改变指标的输入参数。


帐户切换 "不存在的原因,它意味着指标在帐户切换时没有被卸载,因此当你改变交易帐户时,不会有指标的OnDeinit()。

事实上,我提到的原因只对专家顾问系统有效。

Коды причины деинициализации эксперта ....

那么问题来了--如何在不从图表中彻底删除指标的情况下使定时器停止工作?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
kaus_bonus:

事实上,我提到的原因只对专家有效

那么问题来了--如何让定时器停止工作,而不从图表中大幅删除指标?


在OnInit()中记忆分数。在定时器中查看账户号码。如果分数有变化--退出计时器。
 
kaus_bonus:

那么问题来了--你如何让定时器停止工作,而不从图表中大幅删除指标?

使用ACCOUNT_LOGIN和ACCOUNT_SERVER。
 

你不觉得这是个错误的解决方案吗?

假设我们做了ACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW,杀死了计时器,然后回到这个账户,会发生什么? 计时器不会再次启动?

以同样的方式将 "账户变更 "的原因添加到指标中更容易,还是我在某些方面错了,这将导致一些困难?

 
kaus_bonus:

你必须承认,这是个错误的解决方案。

这是个马步!

假设我们做了ACCOUNT_LOGIN!=ACCOUNT_LOGIN_NEW,杀死了定时器,然后再回到这个计数,会发生什么?

当检测到账户变化时,你已经记住了新的特征。

你可以把它设计成一个小库,原则是这里(宏)。那么,"歪门邪道 "的东西就不会成为一种困扰了。