mql5语言的特点、微妙之处以及技巧 - 页 55 1...484950515253545556575859606162...247 新评论 fxsaber 2017.09.14 08:40 #541 阿列克谢-纳沃伊科夫。另一个方便的变体是受保护的继承,当基类拥有所有方法时,在继承类中你只显示Get。当需要时,你把它带到基类。我使用了受保护的继承,但在选择的时候弄乱了。谢谢你!但Metaeditor仍然没有修复这个错误,即所有这些方法即使不可用,也会被倒入列表。我现在没有检查,但我在做实验时,它被储存在内存中,没有掉出来。 fxsaber 2017.09.15 07:00 #542 在修改或删除一个订单之前,你必须做一个检查OrderGetInteger(ORDER_STATE) == ORDER_STATE_PLACED SB没有这个功能,所以你必须自己做。在测试器中做这个检查是没有意义的--所有当前的订单总是有这个状态。 fxsaber 2017.09.22 07:47 #543 关于交易、自动交易系统和测试交易策略的论坛 市场关闭 fxsaber, 2017.09.22 09:45 // Время последнего тика символа long GetSymbolTime( const string Symb ) { MqlTick Tick; return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0); } // Время последнего тика Обзора рынка long GetMarketWatchTime( void ) { long Res = 0; for (int i = SymbolsTotal(true) - 1; i >= 0; i--) { const long TmpTime = GetSymbolTime(SymbolName(i, true)); if (TmpTime > Res) Res = TmpTime; } return(Res); } // Текущее время на торговом сервере без учета пинга long GetCurrenTime( void ) { static ulong StartTime = GetMicrosecondCount(); static long PrevTime = 0; const long TmpTime = GetMarketWatchTime(); if (TmpTime > PrevTime) { PrevTime = TmpTime; StartTime = GetMicrosecondCount(); } return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000)); } void OnInit() { MarketBookAdd(_Symbol); } void OnDeinit( const int ) { MarketBookRelease(_Symbol); } string TimeToString( const long Value ) { return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0')); } void OnBookEvent( const string& ) { Comment(TimeToString(GetCurrenTime())); } fxsaber 2017.09.22 18:43 #544 POSITION_TIME_UPDATE 只与仓位批次的变化有关。例如,在任何账户类型中部分平仓或净额平仓。SL/TP水平的变化不影响POSITION_TIME_UPDATE。解释一下,POSITION_TIME_UPDATE只受反映在交易历史--交易中的修改的影响。SL/TP级别不适用于这种修改,所以不影响它们。 fxsaber 2017.09.26 09:36 #545 关于交易、自动交易系统和交易策略测试的论坛 重新启动一个EA fxsaber, 2017.09.26 11:35 // Перезапуск себя bool ExpertReopen() { return(ChartSaveTemplate(0, __FILE__) && ChartApplyTemplate(0, __FILE__)); } fxsaber 2017.09.27 13:21 #546 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 fxsaber, 2017.09.08 11:11struct A { int i; }; struct B : public A {}; void OnStart() { A a = {0}; B b; b = (B)a; // cannot cast 'A' to 'B' b = a; // так без проблем } 来自BOD的消息这一切都在这里。在第一种情况下,它是一个演员,在第二种情况下,它是一个任务。从父母到后代的衍生关系是不允许的 对一个对象的赋值是对相应的复制操作符的调用,在这种情况下,隐式A::operator=(const A &)。谢谢,所以父级复制操作符仍然是在外部可用的,只有在公共继承的情况下。我查过了,是这样的。struct A { int i; }; struct B : protected A {}; void OnStart() { A a = {0}; B b; b = a; // 'A::operator=' - cannot access protected member function }它好吗?通过这个结构,我们需要声明一个额外的复制构造函数B::operator=(const A&),并在其中 "抛出 "对A::operator=的调用 fxsaber 2017.09.27 13:31 #547 计算自定义数据的标准指标的选项(不创建额外的指标)。 Базовые индикаторы, применяемые к кастомному инструменту 2017.09.27www.mql5.com Здравствуйте. Задавал этот вопрос на английском форуме... fxsaber 2017.10.04 10:19 #548 关于交易、自动交易系统和测试交易策略的论坛 市场关闭 fxsaber, 2017.09.22 09:45 // Время последнего тика символа long GetSymbolTime( const string Symb ) { MqlTick Tick; return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0); } // Время последнего тика Обзора рынка long GetMarketWatchTime( void ) { long Res = 0; for (int i = SymbolsTotal(true) - 1; i >= 0; i--) { const long TmpTime = GetSymbolTime(SymbolName(i, true)); if (TmpTime > Res) Res = TmpTime; } return(Res); }得把循环中的自定义符号扔掉,因为在市场观察中,它们可以被设置为任何时间,甚至3000年。 fxsaber 2017.10.05 07:04 #549 在MQL5中,可以这样写void OnTick() { double Buffer[]; CopyBuffer(iMA(NULL, PERIOD_CURRENT, 1, 0, MODE_SMA, PRICE_CLOSE), 0, 0, 1, Buffer); }也就是说,在每一个刻度 上 "创建 "一个手柄。新的指标实体将不会被创建,时间将只浪费在iMA输入参数与那些已经在以前的ticks上运行的指标的比较上。也就是说,与MT4中的做法完全相同。 Andrey Khatimlianskii 2017.10.05 07:06 #550 fxsaber: 在MQL5中,可以很好地接受这样的写法也就是说,在每一个刻度 上 "创建 "一个手柄。新的指标实体将不会被创建,时间将只浪费在iMA输入参数与那些已经在以前的ticks上运行的指标的比较上。也就是说,与MT4中的做法完全相同。你衡量过性能吗?很好奇它能在多大程度上减慢性能。特别是在自定义指标的情况下。 1...484950515253545556575859606162...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
另一个方便的变体是受保护的继承,当基类拥有所有方法时,在继承类中你只显示Get。当需要时,你把它带到基类。
我使用了受保护的继承,但在选择的时候弄乱了。谢谢你!
但Metaeditor仍然没有修复这个错误,即所有这些方法即使不可用,也会被倒入列表。
我现在没有检查,但我在做实验时,它被储存在内存中,没有掉出来。
在修改或删除一个订单之前,你必须做一个检查
SB没有这个功能,所以你必须自己做。
在测试器中做这个检查是没有意义的--所有当前的订单总是有这个状态。
关于交易、自动交易系统和测试交易策略的论坛
市场关闭
fxsaber, 2017.09.22 09:45
POSITION_TIME_UPDATE 只与仓位批次的变化有关。例如,在任何账户类型中部分平仓或净额平仓。
SL/TP水平的变化不影响POSITION_TIME_UPDATE。
解释一下,POSITION_TIME_UPDATE只受反映在交易历史--交易中的修改的影响。SL/TP级别不适用于这种修改,所以不影响它们。
关于交易、自动交易系统和交易策略测试的论坛
重新启动一个EA
fxsaber, 2017.09.26 11:35
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
fxsaber, 2017.09.08 11:11
这一切都在这里。
在第一种情况下,它是一个演员,在第二种情况下,它是一个任务。
从父母到后代的衍生关系是不允许的
对一个对象的赋值是对相应的复制操作符的调用,在这种情况下,隐式A::operator=(const A &)。
谢谢,所以父级复制操作符仍然是在外部可用的,只有在公共继承的情况下。我查过了,是这样的。
它好吗?
通过这个结构,我们需要声明一个额外的复制构造函数B::operator=(const A&),并在其中 "抛出 "对A::operator=的调用
计算自定义数据的标准指标的选项(不创建额外的指标)。
关于交易、自动交易系统和测试交易策略的论坛
市场关闭
fxsaber, 2017.09.22 09:45
得把循环中的自定义符号扔掉,因为在市场观察中,它们可以被设置为任何时间,甚至3000年。
也就是说,在每一个刻度 上 "创建 "一个手柄。新的指标实体将不会被创建,时间将只浪费在iMA输入参数与那些已经在以前的ticks上运行的指标的比较上。也就是说,与MT4中的做法完全相同。
在MQL5中,可以很好地接受这样的写法
也就是说,在每一个刻度 上 "创建 "一个手柄。新的指标实体将不会被创建,时间将只浪费在iMA输入参数与那些已经在以前的ticks上运行的指标的比较上。也就是说,与MT4中的做法完全相同。
你衡量过性能吗?很好奇它能在多大程度上减慢性能。特别是在自定义指标的情况下。