初学者的问题 MQL5 MT5 MetaTrader 5 - 页 803

 

一个简单的问题。

有可能以这种方式退出循环吗?或者说,这样的简单是不自由的吗?

while(1)
{
 .........
 if(............ ) return;
 ..........
}
 

还有一个问题。

一个MqlTick结构,其字段如下

longtime_msc;// 上次价格更新的时间,以毫秒为单位

据我所知,time_msc 存储的是1970年以来的毫秒数

CopyTick函数有以下参数

ulongfrom=0//要求的刻度线的日期

在帮助中,它被指定为" 请求刻度的日期"。自1970年1月1日起,以毫秒为单位指定"。

注意问题。

为什么在MqlTick结构和函数CopyTick的参数中使用不同的数据类型?毕竟,他们都储存了1970年以来的时间。

 
pivomoe:

还有一个问题。

一个MqlTick结构,其字段如下

longtime_msc;// 上次价格更新的时间,以毫秒为单位

据我所知,time_msc 存储的是1970年以来的毫秒数

CopyTick函数有以下参数

ulongfrom=0//要求的刻度线的日期

在帮助中,它被指定为" 请求刻度的日期"。自1970年1月1日起,以毫秒为单位指定"。

注意问题。

为什么在MqlTick结构和函数CopyTick的参数中使用不同的数据类型?毕竟,他们都储存了1970年以来的时间。

ulong - 无符号长类型

 
我知道。为什么在一种情况下使用有符号类型,而在另一种情况下使用无符号类型?这些案例都很相似。
 
pivomoe:

一个简单的问题。

有可能以这种方式退出循环吗?或者说,这样的简单是不自由的吗?

有什么好担心的?终止的条件。只有当你只是想退出循环,而不是返回而是中断时才会这样做

 
Alexey Viktorov:

什么事困扰着你?按条件结束执行。只有当你只是想退出循环,而不是返回而是中断时才会这样做

我不明白这样的返回循环退出后的内存消耗是多少?
 
pivomoe:
我不明白在这样的一个returnom退出后,内存消耗情况如何?

我为什么要这样做?不要胡思乱想了。这种退出方式将快速发挥作用。

 

我怎样才能放弃一个通过市场在终端下载的免费实用程序(指标)。卸载它并没有帮助。我不断收到关于更新产品的信息,尽管它已经被卸载了很久。

 

先生们,请帮助我了解情况,在策略测试器中,一切都没有错误,在模拟账户 中也没有问题,但当我在市场中加载EA时,自动测试器说。

2016.04.01 00:00:12 未能在1.13780处即时卖出0.10欧元兑美元 sl: 1.14030 tp: 1.13030 [无效量]
2016.04.01 00:00:24 在1.13779卖出0.10欧元兑美元失败 sl: 1.14029 tp: 1.13029 [无效量]
2016.04.01 00:00:59 未能在1.13782的位置即时卖出0.10欧元兑美元 sl: 1.14032 tp: 1.13032 [无效量]
2016.04.01 00:01:00 未能在1.13793的位置即时卖出0.10欧元兑美元,Sl: 1.14043 Tp: 1.13043 [无效量]
2016.04.01 00:01:08 未能在1.13783的位置即时卖出0.10欧元兑美元,Sl: 1.14033 Tp: 1.13033 [无效量]
2016.04.01 00:01:17 在1.13784卖出0.10欧元兑美元失败 sl: 1.14034 tp: 1.13034 [无效量]
2016.04.01 00:01:25 在1.13774卖出0.10欧元兑美元失败,Sl: 1.14024 Tp: 1.13024 [无效量]
2016.04.01 00:01:34 在1.13776卖出0.10欧元兑美元失败 sl: 1.14026 tp: 1.13026 [无效量]
2016.04.01 00:01:59 未能在1.13778处即时卖出0.10欧元兑美元 sl: 1.14028 tp: 1.13028 [无效的成交量]
2016.04.01 00:02:00 在1.13778卖出0.10欧元兑美元失败,Sl: 1.14028 Tp: 1.13028 [无效量]
2016.04.01 00:02:08 未能在1.13776的价位上即时卖出0.10欧元,Sl: 1.14026 Tp: 1.13026 [无效的成交量]

下面是函数代码。

OpenPos(NormalizeDouble(Lot,2), NormalizeDouble(Bid,_Digits), NormalizeDouble(_sl,_Digits),NormalizeDouble(_tp,_Digits),ORDER_TYPE_SELL,MagicSell,Comm);
void OpenPos(const double volume,const double price, const double stop, const double take, const ENUM_ORDER_TYPE o_type, const int magic,const string coment=NULL)
{
   MqlTradeRequest request={0};
   MqlTradeResult result={0};
   
   string t=(o_type==ORDER_TYPE_BUY)?"Buy":"Sell";
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action=TRADE_ACTION_DEAL;
   request.symbol=Symbol();
   request.volume=volume;
   request.type=o_type;
   request.magic=magic;
   request.price=price;
   request.sl=stop;
   request.tp=take;
   request.comment=coment;
   
   if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_FOK))
      request.type_filling=ORDER_FILLING_FOK;
   else if(IsFillingTypeAllowed(Symbol(),SYMBOL_FILLING_IOC))
      request.type_filling=ORDER_FILLING_IOC;
   else
      request.type_filling=ORDER_FILLING_RETURN;
   
   if(!OrderSend(request,result))
      PrintFormat("Can't open position %s error %i",t,GetLastError());
}
 
Andrii Djola:

请帮助我理解这种情况,在策略测试器中,我的EA运行没有任何错误或问题,当我把它加载到模拟账户 时也没有问题,但当我在市场中加载EA时,自动测试器写道。

打印OrderCheck的结果和它的完整结构。对OrderSend也要这样做。

在十个不同的交易服务器上设置模拟账户。并在那里尝试你的代码。大多数情况下,交易服务器的一些特殊功能没有被考虑到,这在市场中检查时被重现。

不要忘记输出LastError。所有这些加在一起,将非常迅速地让你找到错误原因的根源。