来自一个 "傻瓜 "的问题 - 页 197

 
FiftyStars:

我如何确定下一个柱状体何时打开,即尚未形成的那个柱状体?

一般来说,你不能这样做;尽管在半小时或更长时间内,正确预测的概率超过99.9%。
 

是否有可能像这样循环请求打开一个订单?)

      while(result.retcode!=TRADE_RETCODE_DONE)
      {
        if(OrderCheck(request,check))
        {
          OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
 
G001: 是否有可能像这样循环请求打开一个订单?)
不可取。例如,想象一下,服务器返回的答案 不是TRADE_RETCODE_DONE,而是订单已下那么你的代码就会因为同样的请求而使服务器过载。
 
Yedelkin:
不可取。例如,想象一下,服务器返回 的不是TRADE_RETCODE_DONE,而是一个已经下了订单的响应那么你的代码就会因为同样的请求而使服务器过载。

这样会不会更好?

      int ResBear = -1;
      while(ResBear == -1)
      {
        if(OrderCheck(request,check))
        {
          ResBear = OrderSend(request,result);
        }
        if((MQL5InfoInteger(MQL5_TESTING)||MQL5InfoInteger(MQL5_OPTIMIZATION)))break;
      }
 
G001: 这样做会更好吗?

不太可能。请看OrderSend()函数的描述。它应该告诉你,如果它被成功执行,你仍然需要检查返回代码。因此,我们将不得不采取最繁琐的方式:采取一个返回代码的列表,并思考出每个代码的程序行为。也就是说,"我们发送了OrderSend(),得到了返回代码,对我们收到的retcode作出了反应"

第二点。最好是使用事件模型。也就是说,在一个刻度线到达后,不要循环执行该函数,在几次不成功的尝试后,退出该函数,等待新的刻度线。

 
谢谢,真的很繁琐,我会对尝试进行更好的限制。
 
G001: 谢谢,真的很繁琐,我会对尝试进行更好的限制。

无论如何,你总有一天要这样做的 :)从我自己的经验来说。

 
我相信,但到目前为止,知识是缺乏的。
 

对不起,我怎样才能使一个条件在测试器中没有条件,但在可视化模式的测试器中却有条件?

属性列表 不允许这样做,而且由于某些原因,这个条件对我不起作用。

if(MQL5InfoInteger(MQL5_TESTER)!=1 || MQL5InfoInteger(MQL5_TESTER)==1 && MQL5InfoInteger(MQL5_VISUAL_MODE)==1)

 
if(MQL5InfoInteger(MQL5_TESTER)!=1 || MQL5InfoInteger(MQL5_TESTER)==1 && MQL5InfoInteger(MQL5_VISUAL_MODE)==1)

从这个条件中可以看出,它将在三种情况下执行。

1)测试器工作时

2)当测试器不工作时

3)视觉检测仪工作时

因此,该函数将一直工作,最可能的是你应该删除第二个条件,用&&连接第一个和第三个。