新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 933

 
Yevhenii Levchenko:
如何为EA交易设置一个时间过滤器(按小时)?以下选项是否可行。

你的谷歌(比如说EA的时间限制)--可能有特殊功能,比如说从22:00时到04:00时的竞价。在Kim的字体中:只有来自Kim的有用字体--看看吧。

这里有一个选择。

extern int HourStart=2;
// время начала работы советника в часах по времени терминала - может быть от 0 до 23
extern int HourEnd=22;
// время окончания работы советника в часах по времени терминала
// пример - советник начинает работать в 2 часа 0 минут, заканчивает работу в 22, то есть в 22 часа и после советник не выставляет новых ордеров и ждет рабочего времени - 2 часа
extern bool Use_Time=false;

...

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
   bool time_trade=false;
   if(Use_Time==false) {time_trade=true;}
   if(Use_Time==true && Hour()>=HourStart && Hour()<HourEnd) {time_trade=true;}

...
   
 
Roman Shiredchenko:

你去谷歌一下--可能会有一些特别的功能,例如从22:00时到4:00时的竞价。在Kim的f.i.v.主题:只有Kim的有用f.i.v.--看一看。

这里有一个选择。

哇,多么酷的主题啊!谢谢你!


而我所做的一切都没有用?
 
Yevhenii Levchenko:

哇,多么酷的主题啊!谢谢你!


而我所做的一切都没有用?

是的,不知道--准备好并使用它,弄清楚什么是正确的。自行车都已经被发明了,IMHO。

 
Yevhenii Levchenko:
我如何为EA交易设置时间过滤器(按小时)?以下方案是否可行。

我们前段时间讨论过这个问题,这里有一个话题,我的例子都是有效的,我用它,在MT4中一切都正常https://www.mql5.com/ru/forum/317351


叶夫根尼-列夫琴科

使用Symbol() 和_Symbol的具体内容是什么?

下面的代码可以正确地检查当前符号的订单吗?

不,Symbol()是一种获得符号名称的老方法,最新的MQL4-MQL5兼容性的构建已经添加了_Symbol

如果你从头开始写代码,请使用_Symbol,如果你想把代码移植到MQL5,你会有更少的时间来编辑它。

 
Igor Makanu:

我们前段时间讨论过这个问题,这里有一个话题,我的例子都是有效的,我用它,在MT4中一切都正常https://www.mql5.com/ru/forum/317351


不,Symbol()是一种获得符号名称的老方法,最新的MQL4-MQL5兼容性的构建已经添加了_Symbol

如果你从头开始写代码,请使用_Symbol,如果你想把代码移植到MQL5,你会有更少的时间来编辑它。

谢谢你!

当然,这个代码比我试图规定的要大得多......:)我得坐着想办法......
 
Igor Makanu:

我们前段时间讨论过这个问题,这里有一个话题,我的例子都是有效的,我用它,在MT4中一切都正常https://www.mql5.com/ru/forum/317351


不,Symbol()是一种获得符号名称的老方法,最新的MQL4-MQL5兼容性的构建已经添加了_Symbol

如果你从头开始写代码,请使用_Symbol,如果你想把代码移植到MQL5,你会有更少的时间来编辑它。

差异是不同的。_Symbol是一个预定义变量,Symbol()是一个函数。

两人都在那里工作,也在那里工作。一切都是一模一样的。但是很久以前,有一个开发人员(我不记得是哪个了)说,最好是使用一个函数。

 

关于交易、自动交易系统和测试交易策略的论坛

Symbol()和_Symbol之间有什么不同?

fxsaber, 2019.07.07 14:47

void Func( const string& ) {}

void OnStart()
{
  Func(Symbol()); // ERROR: 'Symbol' - parameter passed as reference, variable expected
  Func(_Symbol);  // OK   
}
 
Artyom Trishkin:

差异是不同的。_Symbol是一个预定义变量,Symbol()是一个函数。

两者都是双向的。一切都是绝对相同的。但一段时间前,一个开发者(记不清具体是谁了)说,最好是使用一个函数。

我认为最好的使用方法是什么,我翻阅了帮助,开发人员没有明确的建议。

在实践中,在一些库中,开发人员在类方法 中覆盖了Symbol(),在MQL5中,我也在我的类中覆盖了Symbol()方法,用于自定义TF ....如果方便的话,我就这样用,我不认为书中的公理有任何冒犯之处))))。

SZZ: 我认为这是一种宗教...不应使用iClose()函数--"它是一个假的!"(С)

那么这里有一个新的趋势_符号比Symbol()差......为了以防万一,测量了速度,完全没有区别,同样的工作。

#property strict
//+------------------------------------------------------------------+
#define    test(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong i=0;i<count&&!_StopFlag;i++){EX;} \
                                printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
void OnStart()
  {
   Print("test 1:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 2:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 3:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 4:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
   Print("test 5:"); srand(GetTickCount()); test(9,"_Symbol",string s=_Symbol+IntegerToString(rand()));
   Print("test 6:"); srand(GetTickCount()); test(9,"Symbol()",string s=Symbol()+IntegerToString(rand()));
  }
//+------------------------------------------------------------------+

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

 
Igor Makanu:

我认为你应该使用更方便的方式。 我翻阅了参考资料,开发人员没有明确的建议。

在实践中,在一些库中,开发人员在类方法 中覆盖了Symbol(),我也覆盖了MQL5中自定义TF的Symbol()方法 ....如果方便的话,我就这样用,我不认为书中的公理有任何冒犯之处))))。

SZZ: 我认为这是一种宗教...不应使用iClose()函数--"它是一个假的!"(С)

那么这里有一个新的趋势_符号比Symbol()差......为了以防万一,测量了速度,完全没有区别,同样的工作。

2019.08.09 00:54:20.631 tst EURUSD,H1: Symbol(): loops=1000000000 ms=66203

2019.08.09 00:53:14.432 tst EURUSD,H1: test 6:

2019.08.09 00:53:14.432 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65515

2019.08.09 00:52:08.921 tst EURUSD,H1: test 5:

2019.08.09 00:52:08.921 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65610

2019.08.09 00:51:03.301 tst EURUSD,H1: test 4:

2019.08.09 00:51:03.301 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65890

2019.08.09 00:49:57.418 tst EURUSD,H1: test 3:

2019.08.09 00:49:57.418 tst EURUSD,H1: Symbol(): loops=1000000000 ms=65563

2019.08.09 00:48:51.850 tst EURUSD,H1: test 2:

2019.08.09 00:48:51.850 tst EURUSD,H1: _Symbol: loops=1000000000 ms=65750

2019.08.09 00:47:46.105 tst EURUSD,H1: test 1:

俗话说--你买什么,就卖什么。该建议不在文件中,而是来自论坛上的口碑。

 
Igor Makanu:

为什么最后一行没有斜线,是否有可能从宏中返回一个值

#define  FOR3(a,b,c,loop) for(int i=0; i<a; i++) \
for(int j=0; j<b; j++) \
for(int k=0; k<c; k++) \
{loop;} 
原因: