[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 749

 
artmedia70:
明智的开发者。如果有可能调用脚本,我会在其中收取一笔费用,但你也不能,显然,因为不需要同时有一堆顾问......对我们来说,没有简单的出路 :)
 

各位程序员。能否请你帮助我。

从输入变量来看。

外部 bool UseHourTrade = True;
extern int FromHourTrade = 0;
extern int ToHourTrade = 23;

int start(){
if (UseHourTrade){
if (! (Hour()>=FromHourTrade && Hour()<=ToHourTrade)){
Comment("交易时间还没到!");
return(0);
}
}

我想用其他变量UseHourTrade2, FromHourTrade2, ToHourTrade2来添加第二个交易时间段。

请帮助我。请告诉我应该在启动功能中加入什么。我已经尝试了很多东西,但都没有效果。

我想提前感谢你。我无能为力。

 
cyclik33:
extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment("Time for trade has not come else!");
 return(0);
 }
 }

我想,类似这样的事情。

SZY代码插入 按钮 "SRC "使用起来很别扭,不容易阅读。

 
Abzasc:

这个难题是这样的。

代码最末端的指标创建了一个对象,作为另一个指标的标志。

创建对象后,我需要让指标 "休眠 "5秒,然后删除对象并休眠60秒,之后它将进入最后一次重试,并从头开始新的刻度。

试图这样做

它一直挂着,直到它似乎耗尽了时间

有什么诀窍可以做到这一点吗?


其逻辑是这样的--两个指标都知道对象的名称和一个额外的对象

第一个创建对象,如果它存在则不做任何事情--在开始的时候,我们写下退出条件(return;)。

第二个读取对象,执行其业务,并设置一个额外的对象

第一个,没有看到主要的对象,什么都不做,立即找到第二个(额外的对象),读取对象的创建时间(创建时由第二个组件在那里输入描述),倒数所需的暂停时间(60秒)并删除所有对象 - 你可以继续工作 ....

 
Abzasc:
它在指标中不起作用。我不明白这样做的原因。显然,一个不断工作的指标一定是催眠的 :)

原因是指标在界面流程中工作,你不能让它休眠,因为如果你能 "让它慢下来",在那一刻你就不能按终端的任何按钮,例如 "新订单",或关闭一个订单,等等。
这个话题还有一个微妙之处,就是关于测试者。在真实的终端中,有几个线程,其中一个接口线程是为Expert Advisors单独创建的(这就是为什么它可以放慢速度而不产生后果),而在测试器中,它对所有的线程都是一样的,而且都是一个:)
这就是为什么Sleep()函数在测试模式 下以如此特殊的方式工作。如果你让测试器的流程进入睡眠状态,那么一切都将停止工作,当然包括专家顾问、指标和tick生成。因此,如果我正确地理解了你的想法,它只能在一个演示上进行测试。 如果你想放慢界面流程,你可以使用以下函数。

//+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep(int sec){
   int pause = TimeSeconds(TimeLocal()) + sec;
   if(pause >= 60)pause = pause - 60;
   while(TimeSeconds(TimeLocal()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust:


倒数所需的暂停时间(60秒)。

你可以试试,但重要的是如何暂停...我在这个问题上卡住了。
 

仔细阅读,我已经解释了一切,而且根本不需要使用图形对象,你可以用globals....。

 
ToLik_SRGV:

原因是该指标在接口流中工作,它不能被置入睡眠状态...

就这样吧...现在变亮了,谢谢你。


男人,什么石头。不能把它放在一个指标里,不能把它放在睡觉的时候......我将尝试用全局变量 来做。
 
xrust:

仔细阅读,我已经解释了一切,而且没有必要使用图形对象,你可以用globals....。

我想我明白了。按存在时间删除也是一个计时器。但我将再次重读它:)
 
Abzasc:

...我会试着用全局变量使它工作。

我认为Rustam的暗示是正确的,因为线程冻结是你最不应该做的事情,这是一种极端的措施,不仅是在MQL中,在所有的编程语言中都是如此。

原因: