mql5语言的特点、微妙之处以及技巧 - 页 18 1...111213141516171819202122232425...247 新评论 fxsaber 2017.03.10 09:54 #171 丹尼斯-基里琴科。 我可以问为什么是静态的 吗? 因为断章取义--见原帖。 Sergey Gritsay 2017.03.10 13:34 #172 OnInit()函数的 非文档化特征,这个函数可以在程序的任何部分运行。测试代码。//+------------------------------------------------------------------+ //| test10.mq5 | //| Sergey Gritsay | //| https://www.mql5.com/ru/users/sergey1294 | //+------------------------------------------------------------------+ #property copyright "Sergey Gritsay" #property link "https://www.mql5.com/ru/users/sergey1294" #property version "1.00" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class CNevBar { private: datetime curbar; datetime lastbar; public: CNevBar(); ~CNevBar(); bool bar(string symbol,ENUM_TIMEFRAMES period); }; //+------------------------------------------------------------------+ void CNevBar::CNevBar() { } //+------------------------------------------------------------------+ void CNevBar::~CNevBar(void) { } //+------------------------------------------------------------------+ bool CNevBar:: bar(string symbol,ENUM_TIMEFRAMES period) { curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE); if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE); if(lastbar!=curbar) { lastbar=curbar; return(true); } return(false); } int test=0; CNevBar newbar; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- test=5; Print(__FUNCTION__,": test = ",test); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(newbar.bar(_Symbol,PERIOD_CURRENT)) { test=10; Print(__FUNCTION__,": test = ",test); OnInit(); } } //+------------------------------------------------------------------+ 结果2017.03.10 19:26:02.977 test10 (EURUSD,M1) OnInit: test = 5 2017.03.10 19:27:03.041 test10 (EURUSD,M1) OnTick: test = 10 2017.03.10 19:27:03.042 test10 (EURUSD,M1) OnInit: test = 5 2017.03.10 19:28:03.245 test10 (EURUSD,M1) OnTick: test = 10 2017.03.10 19:28:03.245 test10 (EURUSD,M1) OnInit: test = 5 2017.03.10 19:29:02.995 test10 (EURUSD,M1) OnTick: test = 10 2017.03.10 19:29:02.995 test10 (EURUSD,M1) OnInit: test = 5 ... fxsaber 2017.03.10 13:36 #173 谢尔盖-格里察伊。OnInit()函数的 非文档化特征,这个函数可以在程序的任何部分运行。测试代码。 所有的On-functions都是正常的函数,因此它们可以在你想的时候被调用。OnCalculate或OnTradeTransaction。 Sergey Gritsay 2017.03.10 13:42 #174 fxsaber: 所有的On-functions都是正常的函数,相应地,只要你想,它们就可以被调用。无论是OnCalculate还是OnTradeTransaction。 但文件中没有写明启用时OnInit()函数是OnInit事件处理程序。它可以是typevoid或int,并且没有参数。voidOnInit()。Init事件是在加载专家顾问或指标后立即生成的,该事件不为脚本生成。OnInit()函数用于初始化。如果OnInit()的返回值为int,非零的返回代码意味着初始化不成功,它将生成Deinit事件,其原因代码为REASON_INITFAILED。为了优化专家的输入参数,建议使用ENUM_INIT_RETCODE枚举的值作为返回代码。这些值被用来控制优化的过程,包括选择最合适的测试 剂。在测试开始前的专家顾问初始化过程中,你可以使用TerminalInfoInteger() 函数请求关于代理的配置和资源的信息(核心数量、可用内存数量等)。根据获得的信息,你可以允许使用这个测试代理,或者在这个专家顾问的优化期间拒绝使用它。enum_init_retcode识别器描述INIT_SUCCEEDED初始化成功后,可以继续测试专家顾问。这个代码的意思和零一样--测试器中的专家顾问初始化成功了。INIT_FAILED初始化失败,由于无法恢复的错误,测试没有意义。例如,未能创建一个专家顾问工作所需的指标。该值的返回意味着与返回一个非零的值相同--测试器中专家顾问的初始化已经失败。错的参数旨在向程序员指示一组不正确的输入参数。 包含该返回代码的结果字符串将在一般优化表中以红色突出显示。对专家顾问的这组参数的测试将不会被执行,代理可以自由接收新的任务。收到这个值后,策略测试者保证不把这个工作交给其他代理重复执行。激活代理不适合在初始化过程中没有错误,但由于某些原因,给定的代理不适合测试。例如,内存不足,支持OpenCL等等。返回该代码后,代理将不会收到任务,直到该优化 结束。空白类型的OnInit()函数总是意味着初始化成功。 Документация по MQL5: Программы MQL5 / События клиентского терминала www.mql5.com Программы MQL5 / События клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Dmitiry Ananiev 2017.03.10 13:44 #175 当我在周末写代码时,我在OnInit中插入OnTick。而且一切都很好,即使没有新的虱子进入也是如此 fxsaber 2017.03.10 13:48 #176 谢尔盖-格里察伊。 但文件中没有写明启用时OnInit()函数 是OnInit事件处理程序。它可以是typevoid或int,并且没有参数。voidOnInit()。启动事件在加载专家顾问或指标后立即生成。它说这是一个函数。在OnInit之前和OnDeinit之后,有全局对象的构造函数/解构函数的调用(帮助中不准确)。这就是为什么,例如在指标中,你可以不用OnInit来声明指标缓冲区。其基本原理如下。 fxsaber 2017.03.10 14:10 #177 搜索FullOnCalculate 可以立即找到很多在MT4/MT5中使用指标缓冲区的完全没有记录的功能--在一些地方它们有严重的差异。 Roffild 2017.03.10 20:52 #178 以下是我对解决问题的最终设想。iCustom(... inputs, PRICE_CLOSE, color &colors[], int &widths[], int &styles[] ); iAlligator(... params, PRICE_CLOSE, color &colors[], int &widths[], int &styles[] ); 比方说,一个指标有这些参数。#property indicator_plots 5 #property indicator_color1 clrAquamarine, clrBeige, clrBurlyWood #property indicator_color2 clrRed, clrGreen #property indicator_color5 clrGold, clrCrimson, clrCadetBlue 那么它的颜色阵列将如下。color colors[] = { clrAquamarine, clrBeige, clrBurlyWood, // 1 plot clrRed, clrGreen, // 2 plot clrBlack, // 3 plot clrWhite, // 4 plot clrGold, clrCrimson, clrCadetBlue, // 5 plot clrBurlyWood, clrBlue // ignore };如果阵列较小,则只传输部分颜色。如果阵列较大,就会被修剪。对于宽度和样式数组,原理是一样的。 Artyom Trishkin 2017.03.12 06:21 #179 fxsaber: 在OrderSendSync中,重载的(见上文)HistoryDealSelect被调用。如何确定最后一次开仓的时间 和最后一次平仓的时间?而一般来说,我想知道在mql5上获取开仓/平仓信息的一般原则和算法。需要考虑到什么,目前有哪些具体内容? Alexey Viktorov 2017.03.12 07:21 #180 阿尔乔姆-特里什金。如何确定最后一次开仓的时间 和最后一次平仓的时间?一般来说,我想知道在mql5中获取开仓/平仓信息的一般原则和算法。应该考虑什么,目前的特殊性是什么? 这都是通过选择订单和交易历史,然后读取订单的属性来确定的。bool HistorySelectByPosition( long position_id // идентификатор позиции - POSITION_IDENTIFIER );位置标识符职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。长并使用来自枚举的属性 ENUM_DEAL_ENTRY帐户进入市场拒绝接受市场退出交易_进入_退出U-turn交易_进入_退出_by近距离反击位置 1...111213141516171819202122232425...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我可以问为什么是静态的 吗?
因为断章取义--见原帖。
OnInit()函数的 非文档化特征,这个函数可以在程序的任何部分运行。测试代码。
结果
...
OnInit()函数的 非文档化特征,这个函数可以在程序的任何部分运行。测试代码。
所有的On-functions都是正常的函数,因此它们可以在你想的时候被调用。OnCalculate或OnTradeTransaction。
所有的On-functions都是正常的函数,相应地,只要你想,它们就可以被调用。无论是OnCalculate还是OnTradeTransaction。
但文件中没有写明
启用时
OnInit()函数是OnInit事件处理程序。它可以是typevoid或int,并且没有参数。
voidOnInit()。
Init事件是在加载专家顾问或指标后立即生成的,该事件不为脚本生成。OnInit()函数用于初始化。如果OnInit()的返回值为int,非零的返回代码意味着初始化不成功,它将生成Deinit事件,其原因代码为REASON_INITFAILED。
为了优化专家的输入参数,建议使用ENUM_INIT_RETCODE枚举的值作为返回代码。这些值被用来控制优化的过程,包括选择最合适的测试 剂。在测试开始前的专家顾问初始化过程中,你可以使用TerminalInfoInteger() 函数请求关于代理的配置和资源的信息(核心数量、可用内存数量等)。根据获得的信息,你可以允许使用这个测试代理,或者在这个专家顾问的优化期间拒绝使用它。
enum_init_retcode
识别器
描述
INIT_SUCCEEDED
初始化成功后,可以继续测试专家顾问。
这个代码的意思和零一样--测试器中的专家顾问初始化成功了。
INIT_FAILED
初始化失败,由于无法恢复的错误,测试没有意义。例如,未能创建一个专家顾问工作所需的指标。
该值的返回意味着与返回一个非零的值相同--测试器中专家顾问的初始化已经失败。
错的参数
旨在向程序员指示一组不正确的输入参数。 包含该返回代码的结果字符串将在一般优化表中以红色突出显示。
对专家顾问的这组参数的测试将不会被执行,代理可以自由接收新的任务。
收到这个值后,策略测试者保证不把这个工作交给其他代理重复执行。
激活代理不适合
在初始化过程中没有错误,但由于某些原因,给定的代理不适合测试。例如,内存不足,支持OpenCL等等。
返回该代码后,代理将不会收到任务,直到该优化 结束。
空白类型的OnInit()函数总是意味着初始化成功。
但文件中没有写明
启用时
OnInit()函数 是OnInit事件处理程序。它可以是typevoid或int,并且没有参数。
voidOnInit()。
启动事件在加载专家顾问或指标后立即生成。
它说这是一个函数。
在OnInit之前和OnDeinit之后,有全局对象的构造函数/解构函数的调用(帮助中不准确)。这就是为什么,例如在指标中,你可以不用OnInit来声明指标缓冲区。其基本原理如下。
如果阵列较小,则只传输部分颜色。如果阵列较大,就会被修剪。
对于宽度和样式数组,原理是一样的。
在OrderSendSync中,重载的(见上文)HistoryDealSelect被调用。
如何确定最后一次开仓的时间 和最后一次平仓的时间?
而一般来说,我想知道在mql5上获取开仓/平仓信息的一般原则和算法。
需要考虑到什么,目前有哪些具体内容?
如何确定最后一次开仓的时间 和最后一次平仓的时间?
一般来说,我想知道在mql5中获取开仓/平仓信息的一般原则和算法。
应该考虑什么,目前的特殊性是什么?
这都是通过选择订单和交易历史,然后读取订单的属性来确定的。
位置标识符
职位标识符是一个唯一的数字,它被分配给每个新开的职位,并且在其整个生命周期内不会改变。它与开仓时的订单票相对应。
仓位标识符在每个订单(ORDER_POSITION_ID)和每个开启、改变或关闭它的交易(DEAL_POSITION_ID)中被指定。使用此属性来搜索与头寸相关的订单和交易。
当一个头寸在净值模式下被逆转(一个单一的进出交易),头寸的POSITION_IDENTIFIER标识符不会改变。然而,POSITION_TICKET被改变为导致逆转的订单票。在对冲模式下,不存在头寸逆转。
长
并使用来自枚举的属性 ENUM_DEAL_ENTRY
帐户
进入市场
拒绝接受
市场退出
交易_进入_退出
U-turn
交易_进入_退出_by
近距离反击位置