mql5语言的特点、微妙之处以及技巧 - 页 61 1...545556575859606162636465666768...247 新评论 fxsaber 2017.11.24 08:57 #601 弗拉迪斯拉夫-安德鲁申科。我现在遇到了一个问题,当历史记录包含超过1000笔交易时,当我调用 历史处理函数 时,例如,计算历史的利润。+ 图表上的信息开始变慢,终端挂起。也就是说,报价是有延迟的。没有代码,人们只能猜测。 Artyom Trishkin 2017.11.26 21:30 #602 关于交易、自动交易系统和交易策略测试的论坛 mql5的特殊性,技巧和窍门 Alexey Navoykov, 2017.07.21 17:04 令人失望的是,MQL中没有多重继承。然而,我们可以用任何可能的方式使它工作--用模板和宏--我们怎么能避免它们呢?)这是我所做的。所有的源类都应该被声明为定义了父类 的模板。class CBase { }; // базовый класс // Макросы, задающие список наследования: #define INHERIT1(T) T<CBase> #define INHERIT2(T1, T2) T2<INHERIT1(T1)> #define INHERIT3(T1, T2, T3) T3<INHERIT2(T1,T2)> #define INHERIT4(T1, T2, T3, T4) T4<INHERIT3(T1,T2,T3)> // Различные пользовательские классы: template<typename TParent> class A : public TParent { public: void a() { Print("A"); } }; template<typename TParent> class B : public TParent { public: void b() { Print("B"); } }; template<typename TParent> class C : public TParent { public: void c() { Print("C"); } }; class X : public INHERIT3(A, B, C) { }; // Объявляем класс, наследуемый от A, B, C template<typename T> void SomeFunc(B<T>& obj) { obj.b(); } // Проверочная функция, принимающая класс B void OnInit() { X x; x.a(); x.b(); x.c(); SomeFunc(x); }当然,还有一些微妙之处,与类是按顺序继承的(按照我们设定的顺序),而不是同时继承的(如真正的多重继承)这一事实有关。特别是,当发生过载时,它们会有不同的优先级。此外,如果一个相同的模板类多次参与继承链,它们将是完全不同的类,彼此之间没有任何关系。所以我们在这里必须小心。但在接口方面没有问题,你可以不受限制地进行继承。但如果没有模板形式的声明呢?例如,我们有两个现成的自给自足的图书馆。class CLib1 : public CClass1 { };and class CLib2 : public CClass2 { };我们需要让它在程序类中有这样的继承性。CLib1--> CLib2--> CProgram,这样这两个库就可以在CProgram类中使用。而CLib1库将在CLib2中可用。这可以防止这两个库被以任何方式修改。这有可能吗?如果是多重继承,可能会是这样的 class CProgram : public CLib1,CLib2 { }; Features of the mql5 Koldun Zloy 2017.11.27 16:24 #603 阿尔乔姆-特里什金。没有模板声明如何呢?例如,我们有两个现成的自给自足的图书馆。class CLib1 : public CClass1 { };and class CLib2 : public CClass2 { };我们需要在程序类中进行这样的继承。CLib1--> CLib2--> CProgram,这样这两个库就可以在CProgram类中使用。而CLib1库将在CLib2中可用。这两个库的代码不能以任何方式改变。这有可能吗?如果是多重继承,可能会是这样的 class CProgram : public CLib1,CLib2 { };如果你这样做,你不会有任何损失。class CProgram { CLib1 lib1; CLib2 lib2; }; Artyom Trishkin 2017.11.27 16:48 #604 科尔敦-兹罗伊。 你这样做不会有任何损失。 是的,我做到了。我只是想避免不必要的对象。 fxsaber 2017.11.29 12:41 #605 从异步复制函数(CopyRates、CopyTicks等)获取数据的最好方法可能是通过EventChartCustom。特别是与指标有关。 fxsaber 2017.11.30 09:07 #606 可以知道交易服务器已经改变,而不仅仅是账户--OnDeinit(EA,不是指标)中的AccountInfoString(ACCOUNT_SERVER)将返回新的交易服务器。 fxsaber 2017.11.30 09:48 #607 备忘录行动/方案类型改变TF或符号账户变更指标运行OnDeinit和OnInit,全局类对象改变(完全重置)。除了prev_calculated被重置外,什么也没有发生。EA运行OnDeinit和OnInit,全局类对象没有 变化。运行OnDeinit和OnInit,全局类对象改变(完全重载)。 fxsaber 2017.12.04 09:35 #608 文件压缩和通用执行时间测量 关于交易、自动交易系统和策略测试的论坛 我对策略测试员的不满。 对MQL开发人员的不满 fxsaber, 2017.12.04 09:11 #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } void OnStart() { uchar Data[]; uchar Key[1]; uchar Result[]; FileLoad("thousands_rubies_galaxy.bmp", Data); BENCH(Print(CryptEncode(CRYPT_ARCH_ZIP, Data, Key, Result))) ArrayFree(Data); FileLoad("space_wind.wav", Data); BENCH(Print(CryptEncode(CRYPT_ARCH_ZIP, Data, Key, Result))) }结果826534 Time[Print(CryptEncode(CRYPT_ARCH_ZIP,Data,Key,Result))] = 53334 306648 Time[Print(CryptEncode(CRYPT_ARCH_ZIP,Data,Key,Result))] = 29029 fxsaber 2017.12.05 08:30 #609 有一整类指标在价格图上叠加其他符号的价格图。它们是以同样的方式进行的--通过指标缓冲器。然而,在MT5中,有一个很好的OBJ_CHART,它可以让你更漂亮地实现这一任务,而且没有指标缓冲区。例如,你可以把任何指标,立即看到它在另一个符号上的样子。从属方案 - 几个图表作为主图表的背景显示。 Vasiliy Pushkaryov 2017.12.05 08:49 #610 fxsaber:例如,你可以铸造任何指标,并立即看到它在另一个符号上的样子。从属方案 - 几个图表作为主图表的背景显示。 有没有一张这样的图片?不太清楚,我还没有使用OBJ_CHART 1...545556575859606162636465666768...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我现在遇到了一个问题,当历史记录包含超过1000笔交易时,当我调用 历史处理函数 时,例如,计算历史的利润。+ 图表上的信息开始变慢,终端挂起。也就是说,报价是有延迟的。
没有代码,人们只能猜测。
关于交易、自动交易系统和交易策略测试的论坛
mql5的特殊性,技巧和窍门
Alexey Navoykov, 2017.07.21 17:04
令人失望的是,MQL中没有多重继承。然而,我们可以用任何可能的方式使它工作--用模板和宏--我们怎么能避免它们呢?)
这是我所做的。所有的源类都应该被声明为定义了父类 的模板。
当然,还有一些微妙之处,与类是按顺序继承的(按照我们设定的顺序),而不是同时继承的(如真正的多重继承)这一事实有关。特别是,当发生过载时,它们会有不同的优先级。此外,如果一个相同的模板类多次参与继承链,它们将是完全不同的类,彼此之间没有任何关系。所以我们在这里必须小心。但在接口方面没有问题,你可以不受限制地进行继承。
但如果没有模板形式的声明呢?
例如,我们有两个现成的自给自足的图书馆。
class CLib1 : public CClass1 { };and
class CLib2 : public CClass2 { };
我们需要让它在程序类中有这样的继承性。
CLib1--> CLib2--> CProgram,这样这两个库就可以在CProgram类中使用。而CLib1库将在CLib2中可用。
这可以防止这两个库被以任何方式修改。
这有可能吗?
如果是多重继承,可能会是这样的
class CProgram : public CLib1,CLib2 { };
没有模板声明如何呢?
例如,我们有两个现成的自给自足的图书馆。
class CLib1 : public CClass1 { };and
class CLib2 : public CClass2 { };
我们需要在程序类中进行这样的继承。
CLib1--> CLib2--> CProgram,这样这两个库就可以在CProgram类中使用。而CLib1库将在CLib2中可用。
这两个库的代码不能以任何方式改变。
这有可能吗?
如果是多重继承,可能会是这样的
class CProgram : public CLib1,CLib2 { };
如果你这样做,你不会有任何损失。
class CProgram { CLib1 lib1; CLib2 lib2; };
你这样做不会有任何损失。
从异步复制函数(CopyRates、CopyTicks等)获取数据的最好方法可能是通过EventChartCustom。
特别是与指标有关。
可以知道交易服务器已经改变,而不仅仅是账户--OnDeinit(EA,不是指标)中的AccountInfoString(ACCOUNT_SERVER)将返回新的交易服务器。
备忘录
关于交易、自动交易系统和策略测试的论坛
我对策略测试员的不满。 对MQL开发人员的不满
fxsaber, 2017.12.04 09:11
结果
有一整类指标在价格图上叠加其他符号的价格图。它们是以同样的方式进行的--通过指标缓冲器。
然而,在MT5中,有一个很好的OBJ_CHART,它可以让你更漂亮地实现这一任务,而且没有指标缓冲区。
例如,你可以把任何指标,立即看到它在另一个符号上的样子。
从属方案 - 几个图表作为主图表的背景显示。
例如,你可以铸造任何指标,并立即看到它在另一个符号上的样子。
从属方案 - 几个图表作为主图表的背景显示。