错误、漏洞、问题 - 页 435 1...428429430431432433434435436437438439440441442...3184 新评论 Renat Fatkhullin 2011.06.27 22:42 #4341 voix_kas:一般来说,结果很有趣。 凭直觉,我认为OnDenit函数是一种析构器,而OnInit则是EA的构造器。事实上,事实证明,OnInit是一个多重事件(在Expert Advisor的生命周期内)。那么不清楚的是,如果我们知道EA不会终止其操作(例如,在改变图表周期的情况下),为什么我们需要明确地生成OnDenit事件?当符号发生变化时,为了快速启动和保存其前世的信息基础,专家顾问会被热加载。例如,专家顾问在图表上,它已经积累了它的统计数据和逻辑,然后它被改变了时间框架,不得不在冷启动时从零开始工作。而且还有一个问题。REASON_CHARTCHANGE去初始化的原因- 一个符号或一个图表周期被改变。 请解释如何在不删除图表上的EA的情况下改变图表符号? 在热重启模式下。 [删除] 2011.06.27 22:57 #4342 耶德尔金,有趣的,雷纳特 谢谢你的澄清。我认为在文档中明确列出 "热 "和 "冷 "的重新启动也很有意义。如果在每次OnInit时没有重新初始化,对于多播EA,我们将不得不使用一个拐杖,也就是一个全局标志。:( 我将在稍后发布代码。 Vladimir Gomonov 2011.06.27 23:00 #4343 Interesting:专家顾问在任何情况下都不会在正常的初始化过程中被删除,它只是被允许在某些终端设置 下进行交易(但为此专家顾问必须理解符号已经被改变......)。顺便说一下,这提醒了我。我一直想问一下开发人员关于这些设置。雷纳特,请做两个不同的 复选框,在改变时间框架和符号时禁止交易。 这是两个根本不同的变化。我不希望我的EA在改变时间框架时停止交易--这绝对是不必要的--无论如何,它们在处理每一个tick,没有任何问题。但符号的变化从根本上来说是很重要的。我想保持这种锁定...但现在这两种调整由于某种原因被同步调节在一起了。我正在用程序解决这个问题(将原始符号存储在一个静态变量中,并控制inite的变化)。但如果能在终端层面上阻止这种情况,那就更好了。更好的是,在专家顾问运行时,可以切换时间段或符号。为什么要因为愚蠢-忘乎所以而停止交易?也就是说,如果在设置中规定,当专家顾问出现在图表上时,禁止切换时间框架和/或符号(单独的!),这将是更好的 做法。//在试图这样做的时候给出相应的消息。其实这也可以通过程序解决(强行将符号或时间框架放回原位),但我想你自己对终端层面的真正用户友好 设置感兴趣。 [删除] 2011.06.27 23:10 #4344 MetaDriver:雷纳特,请做两个不同的 复选框来阻止时间框架变化和符号变化的交易。 这是两个根本不同的变化。我不希望我的EA在改变时间框架时停止交易--这绝对是没有必要的--反正它们在处理每一个tick,这没有任何问题。我支持这个想法,你应该在去初始化的原因 代码中做两个刻度和一个分隔(那样会很方便)。但是阻止改变时间框架的可能性,我不知道如何改变(关于符号),对我来说太过分了。 Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации www.mql5.com Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - Документация по MQL5 Renat Fatkhullin 2011.06.27 23:25 #4345 MetaDriver:这提醒了我。我很久以来一直想向开发者询问这些设置。雷纳特,请做两个不同的 复选框来阻止改变时间框架和改变符号的交易。 这是两个根本不同的变化。是的,看来改变符号和时间框架的条件是白白结合的。我也赞成把它们分成两个条件。该票据已被放入服务台。 [删除] 2011.06.27 23:28 #4346 实际上,我附上的是定义多用工具的工作工具的代码。欢迎提出批评。:)input uint inTimeToRescan = 3600; // Интервал времени для принудительного пересканирования рабочих инструментов, в секундах input string inWorkSymbols = "USDCHF; GBPUSD; EURUSD; USDJPY; USDCAD; AUDUSD; EURGBP; EURAUD; EURCHF; EURJPY; GBPJPY; GBPCHF"; // Рабочие инструменты bool Initialize; int OnInit() { //... Initialize = true; //... } void OnTick() { static ulong LastScan = 0; if ((ulong)TimeCurrent() - LastScan >= inTimeToRescan) Initialize = true; static string Symbol[]; // static int Forecast[]; // static int Volatile[]; if (Initialize) { Comment("Опрос рабочих инструментов..."); int SymbolCount_1 = 0; for (int i = 0; i < SymbolsTotal(false); i++) if (StringFind(inWorkSymbols, SymbolName(i, false)) != -1) SymbolCount_1++; if (!SymbolCount_1) return; if (ArrayResize(Symbol, SymbolCount_1) != SymbolCount_1) return; int SymbolCount_2 = 0; for (int i = 0; i < SymbolsTotal(false); i++) if (StringFind(inWorkSymbols, SymbolName(i, false)) != -1) Symbol[SymbolCount_2++] = SymbolName(i, false); if (SymbolCount_1 != SymbolCount_2) return; //if (ArrayResize(Forecast, SymbolCount_1) != SymbolCount_1) return; //if (ArrayResize(Volatile, SymbolCount_1) != SymbolCount_1) return; Initialize = false; } //... }专家顾问的每一个刻度都会试图获得一个工作工具的列表。 工作仪器列表的更新发生在两个条件下:1)OnInit被触发,2)在EA的输入参数 中给出的时间间隔之后。 正如我们所见,一个全局变量(bool Initialize)形式的拐杖被用来检测下一个初始化。如果有静态的初始化,就不需要了。我认为全局变量是邪恶的,以及无条件的Goto操作符在其时。 Renat Fatkhullin 2011.06.27 23:30 #4347 voix_kas: 在没有在每次OnInit时重新初始化的情况下,对于多边机构必须使用全局标志形式的 "拐杖"。:( 最好从一开始就仔细编写代码,不要留下中间静态变量 形式的拐杖。作为一个解决方案,将这些数据隐藏在一个类里面。如果这个班级死了,环境也就死了。而在全局层面上,要留下最少的静态变量。 Документация по MQL5: Основы языка / Переменные / Статические переменные www.mql5.com Основы языка / Переменные / Статические переменные - Документация по MQL5 Renat Fatkhullin 2011.06.27 23:32 #4348 voix_kas:实际上,我附上的是定义多用工具的工作工具的代码。欢迎提出批评。:)作为一个提示--把Symbol 放在全局级别,在OnInit中归零。如果数组是空的,那么就该初始化了。而且没有额外的旗帜。 [删除] 2011.06.27 23:38 #4349 Renat:作为一个提示,把Symbol带到全局水平,在OnInit中把它归零。如果数组是空的,那么就该初始化了。而且没有额外的旗帜。我想我是偏执狂。我不喜欢公共(全局)变量。我认为这是一个穆维顿。 是否可以在OnTick里面指定OnInit的触发方式? 例如,我是否可以在OnTick里面声明一个静态变量,存储EA的初始化次数(如果MQL5中有这样或类似的属性)? [删除] 2011.06.27 23:43 #4350 voix_kas:全局变量 是邪恶的,就像当年的无条件Goto操作符一样。我一定是个偏执狂。我不喜欢公共(全局)变量。我发现它是一个Muveton。1.为什么?有必要摆脱有害的症状,而且是果断地摆脱。2.不要用辅音或类似的语言关键词来命名变量、数组和其他东西(但 "Symbol "数组非常醒目,在你的代码中你无法分辨它是一个数组还是其他东西)。 雷纳特。解决办法是将这些数据隐藏在类里面。如果这个班级死了,环境也会死。而在全局层面上,要留下最少的静态变量。 好建议。是时候改用OOP了......:) 1...428429430431432433434435436437438439440441442...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
一般来说,结果很有趣。
凭直觉,我认为OnDenit函数是一种析构器,而OnInit则是EA的构造器。
事实上,事实证明,OnInit是一个多重事件(在Expert Advisor的生命周期内)。那么不清楚的是,如果我们知道EA不会终止其操作(例如,在改变图表周期的情况下),为什么我们需要明确地生成OnDenit事件?
当符号发生变化时,为了快速启动和保存其前世的信息基础,专家顾问会被热加载。
例如,专家顾问在图表上,它已经积累了它的统计数据和逻辑,然后它被改变了时间框架,不得不在冷启动时从零开始工作。
而且还有一个问题。
REASON_CHARTCHANGE去初始化的原因- 一个符号或一个图表周期被改变。
请解释如何在不删除图表上的EA的情况下改变图表符号?
耶德尔金,有趣的,雷纳特
谢谢你的澄清。
我认为在文档中明确列出 "热 "和 "冷 "的重新启动也很有意义。
如果在每次OnInit时没有重新初始化,对于多播EA,我们将不得不使用一个拐杖,也就是一个全局标志。:(
我将在稍后发布代码。
专家顾问在任何情况下都不会在正常的初始化过程中被删除,它只是被允许在某些终端设置 下进行交易(但为此专家顾问必须理解符号已经被改变......)。
顺便说一下,这提醒了我。我一直想问一下开发人员关于这些设置。
雷纳特,请做两个不同的 复选框,在改变时间框架和符号时禁止交易。 这是两个根本不同的变化。
我不希望我的EA在改变时间框架时停止交易--这绝对是不必要的--无论如何,它们在处理每一个tick,没有任何问题。
但符号的变化从根本上来说是很重要的。我想保持这种锁定...但现在这两种调整由于某种原因被同步调节在一起了。
我正在用程序解决这个问题(将原始符号存储在一个静态变量中,并控制inite的变化)。但如果能在终端层面上阻止这种情况,那就更好了。
更好的是,在专家顾问运行时,可以切换时间段或符号。为什么要因为愚蠢-忘乎所以而停止交易?
也就是说,如果在设置中规定,当专家顾问出现在图表上时,禁止切换时间框架和/或符号(单独的!),这将是更好的 做法。
//在试图这样做的时候给出相应的消息。
其实这也可以通过程序解决(强行将符号或时间框架放回原位),但我想你自己对终端层面的真正用户友好 设置感兴趣。
MetaDriver:
雷纳特,请做两个不同的 复选框来阻止时间框架变化和符号变化的交易。 这是两个根本不同的变化。
我不希望我的EA在改变时间框架时停止交易--这绝对是没有必要的--反正它们在处理每一个tick,这没有任何问题。
我支持这个想法,你应该在去初始化的原因 代码中做两个刻度和一个分隔(那样会很方便)。
但是阻止改变时间框架的可能性,我不知道如何改变(关于符号),对我来说太过分了。
这提醒了我。我很久以来一直想向开发者询问这些设置。
雷纳特,请做两个不同的 复选框来阻止改变时间框架和改变符号的交易。 这是两个根本不同的变化。
是的,看来改变符号和时间框架的条件是白白结合的。
我也赞成把它们分成两个条件。该票据已被放入服务台。
实际上,我附上的是定义多用工具的工作工具的代码。欢迎提出批评。:)
专家顾问的每一个刻度都会试图获得一个工作工具的列表。
工作仪器列表的更新发生在两个条件下:1)OnInit被触发,2)在EA的输入参数 中给出的时间间隔之后。
正如我们所见,一个全局变量(bool Initialize)形式的拐杖被用来检测下一个初始化。如果有静态的初始化,就不需要了。
我认为全局变量是邪恶的,以及无条件的Goto操作符在其时。
在没有在每次OnInit时重新初始化的情况下,对于多边机构必须使用全局标志形式的 "拐杖"。:(
最好从一开始就仔细编写代码,不要留下中间静态变量 形式的拐杖。
作为一个解决方案,将这些数据隐藏在一个类里面。如果这个班级死了,环境也就死了。
而在全局层面上,要留下最少的静态变量。
实际上,我附上的是定义多用工具的工作工具的代码。欢迎提出批评。:)
作为一个提示--把Symbol 放在全局级别,在OnInit中归零。如果数组是空的,那么就该初始化了。
而且没有额外的旗帜。
作为一个提示,把Symbol带到全局水平,在OnInit中把它归零。如果数组是空的,那么就该初始化了。
而且没有额外的旗帜。
我想我是偏执狂。我不喜欢公共(全局)变量。我认为这是一个穆维顿。
是否可以在OnTick里面指定OnInit的触发方式?
例如,我是否可以在OnTick里面声明一个静态变量,存储EA的初始化次数(如果MQL5中有这样或类似的属性)?
全局变量 是邪恶的,就像当年的无条件Goto操作符一样。
我一定是个偏执狂。我不喜欢公共(全局)变量。我发现它是一个Muveton。
1.为什么?有必要摆脱有害的症状,而且是果断地摆脱。
2.不要用辅音或类似的语言关键词来命名变量、数组和其他东西(但 "Symbol "数组非常醒目,在你的代码中你无法分辨它是一个数组还是其他东西)。
雷纳特。
解决办法是将这些数据隐藏在类里面。如果这个班级死了,环境也会死。
而在全局层面上,要留下最少的静态变量。