初学者的问题 MQL4 MT4 MetaTrader 4 - 页 230

 
Aleksey Mavrin:

什么,10秒后总是有更多的利润吗?)

当然并不总是这样,但经常发生的情况是,价格在一分钟内就飞了起来,EA直截了当地以固定价格关闭。
 
Nargiz Ravanova:

我按你说的做了,但由于某些原因,在关闭专家顾问后又打开了几次交易,尽管在CloseAll()函数后我有一个小时的滑点。

datetime sleep = TimeCurrent();
if(sleep > TimeCurrent())
     return;
//---
double op = CalculateProfit();

if(op >= Profit && LastTime == 0)
     LastTime = TimeCurrent();
if(LastTime > 0 && TimeCurrent() - LastTime >= Second)

    {
     CloseAll();
     LastTime = 0;

     SendNotification("Trade is end");
     sleep = TimeCurrent()+60*60;
    }

事情就是这样的。当然,这只是写在我的膝盖上。

 
Konstantin Nikitin:

类似这样的事情。当然,这只是当场写的。

谢谢,现在该EA在市场上所有的交易中只关闭了一个交易,而我有一个网格EA。

我没有收到任何单子,EA又开始了新的交易,并且忽略了单子。如果我看一下我的EA,我不能意识到这一点,只是把它恢复成以前的样子。我不知道该如何处理这个EA,我也不会知道该如何处理它。

 
Nargiz Ravanova:

谢谢你,现在该EA在市场上所有的交易中只关闭了一个交易,而我有一个网格EA。

我有很多问题,但我不知道该怎么做,所以我不知道该怎么办。我想这是不可能实现的,我就把它恢复成原来的样子。我想感谢他们的帮助。

你需要把它作为一个整体来实施
,原因可能不同。

 
Nargiz Ravanova:

谢谢你,现在该EA在市场上所有的交易中只关闭了一个交易,而我有一个网格EA。

我有很多问题,但我不知道该怎么做,所以我不知道该怎么办。我想这是不可能实现的,我就把它恢复成原来的样子。我已经实施了,还没有实施,所以我就把它恢复到以前的样子。

这应该更有意义,对吗?

input double Profit   = 100.0;
input int    Second   = 10;
//+------------------------------------------------------------------+
void CloseAllSleep(void)
    {
     static datetime sleep_all = TimeCurrent();
     static datetime LastTime = 0;
     if(sleep_all > TimeCurrent())
          return;
//---
     if(LastTime == 0)
         {
          if(CalculateProfit() < Profit)
               return;
          LastTime = TimeCurrent();
         }
     if(TimeCurrent() - LastTime >= Second)
          return;
//---
     if(!CloseAll())
          return;
     LastTime = 0;

     SendNotification("Trade is end");
     sleep_all = TimeCurrent()+60*60;
    }

//--- Считаем профит открытых позиций
double CalculateProfit(void)
    {
     return 0.0;
    }
//--- Закрываем все позиции
bool CloseAll(void)
    {
     return true;
    }

再说一遍,这纯粹是为了清晰起见。而你需要实施什么以及如何实施,请自己思考。

 
Nargiz Ravanova:
当然,并不总是这样,但经常发生的情况是,价格只是飞了一分钟,专家顾问就直截了当地以固定价格收盘。

不过,我还是认为这种方法是次优的。如果价格在飞,就应该有一个积极的滑移。如果你等待时机--这是一个轮盘游戏--那么这个策略是什么,你的利润可能已经低于给定的2英镑。

更合理的做法是衡量价格变化的速度,如果它是高的朝向利润 - 等待,当它下降 - 覆盖。

 
Konstantin Nikitin:

我认为这更有意义,你说呢?

同样,这纯粹是为了理解。这取决于你是否能想出要实施什么以及如何去做。

说实话,我不明白,算了吧,我会想办法的。

 
Aleksey Mavrin:

不过,我还是认为这种方法是次优的。如果价格在飞,就应该有一个积极的滑移。如果你等待时机--这是一个轮盘游戏--那么这个策略是什么,你的利润可能已经低于给定的2英镑。

更合理的做法是衡量价格变化的速度,如果它是高的朝向利润 - 等待,当它下降 - 覆盖。

我们不能在这里解决一个简单的失误,你在谈论速度))))。
 
Nargiz Ravanova:
我们不能在这里解决一个简单的失误,你在谈论速度))))。

如果你为自己设定了很高的目标,全能的上帝会帮助你实现这些目标的!这就是为什么你会有这样的想法。;)

 
Nargiz Ravanova:
我们不能在这里解决一个简单的失误,你在谈论速度))))。

嗯,更准确地说,看起来你不能。还有关于睡眠。你想把整个专家顾问冻结一段时间吗?或者只是某种功能,在它被解决之后。在任何情况下,即使是专家顾问的工作中断,也最好使用长期延迟的标志,当检查它时,如果没有许可,就退出OnTick/OnTimer。对于短时间的延迟,是的,你可以使用SLEEP
顺便说一下,SLEEP 在指标中不起作用。

Sleep()函数不能从自定义指标 中调用,因为指标是在界面线程中执行的,不能拖累它

因此,了解旗帜的使用,你将来会需要它。