错误、漏洞、问题 - 页 2447

 

在优化过程中,策略测试器 的错误。

"测试员代理拒绝的任务"

例如,如果你的账户货币是欧元。

  • EURJPY 没问题
  • 对GBPJPY的错误


如果你的账户货币是美元

  • 美元兑加元没有问题
  • USDJPY 没问题
  • 误差在EURAUD


当代码中使用其他货币对时,就会出现这种情况。

在我的例子中,它使用的是动态地段的计算方法

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(DynamicLot)
     {
      if(SymbolInfoDouble(sym,SYMBOL_ASK)!=0)
        {
         if(Valdepo=="USD" || Valdepo=="USC")
           {
            if(StringSubstr(sym,0,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else if(StringSubstr(sym,3,3)=="USD")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/SymbolInfoDouble(sym,SYMBOL_ASK)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble(StringSubstr(sym,0,3)+"USD"+prefix,SYMBOL_ASK);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }
         else

         if(Valdepo=="EUR" || Valdepo=="EUC")
           {
            if(StringSubstr(sym,0,3)=="EUR")Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
            else
              {
               pr=SymbolInfoDouble("EUR"+StringSubstr(sym,0,3)+prefix,SYMBOL_BID);
               if(pr!=0)Lot2=BalanceFreeMargin*LotBalancePercent*AccountInfoInteger(ACCOUNT_LEVERAGE)*pr/100/SymbolInfoDouble(sym,SYMBOL_TRADE_CONTRACT_SIZE);
               else
                 {
                  double Margin=0;
                  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1,SymbolInfoDouble(Symbol(),SYMBOL_ASK),Margin);
                  if(Margin!=0)Lot2=BalanceFreeMargin/Margin/100*LotBalancePercent;
                 }
              }
           }



也就是说,当EA要求提供另一种货币的价格时。

 
Nikolai Semko:

那么你就需要一个合格的推理,来解释MQ。
它是用来做什么的?它如何以及在什么情况下可以增强mql的能力?而不仅仅是为了满足个人的心血来潮。

比方说,你写了EA经理。现在,两个名称不同的相同的EA不能被识别为相同的。

例如,你需要确定该EA和它的克隆体以前是否被运行过。

好吧,当有很多图表和EA的时候就会发生这种情况。而有些东西又误打误撞地发射了。

 

尊敬的开发者,请解释一下为什么我在将指标中的当前条形日期复制到缓冲区时周期性地出现错误?

2019.04.26 12:12:39.811 i-Regr4_05i (Si-6.19,M1)        Failed to copy data from the handle_Regressor indicator, error code 4401
   datetime Arr[],time1;
   if(CopyTime(symb,0,0,1,Arr)<=0)
   {
   PrintFormat("Failed to copy data from the handle_Regressor indicator, error code %d",GetLastError());
   return(0);
   }

在冬天,没有这样的错误--指标持续工作了一个月,但在新的构建中,我开始看到它。

 
谢谢你!
[删除]  
Mykhailo Ohorodniichuk:

帮助我解决这个问题。我怎样才能让正常的字符被传送,而不是目前的字符?

谷歌chcp命令

Chcp 1251 - Windows-1251

chcp 65001 - utf-8

...

 
fxsaber:

比方说,你写了EA经理。现在,两个名称不同的相同的EA不能被识别为相同的。

例如,你需要确定该EA和它的克隆体以前是否被运行过。

好吧,当有很多图表和EA的时候就会发生这种情况。而有些东西又误打误撞地发射了。

我明白了...

但我仍然倾向于以下公式。每个交易账户不超过一个专家顾问。这更有意义。即使你想结合几个策略,你也应该在一个专家顾问的框架内进行。在这种情况下,你不需要一个EA经理。此外,再次强调,不同的哈希值并不能保证EA是不同的,即使它是开发者的本地内部哈希值。

如果我们想在启动一个EA的时候检查是否有其他EA意外地在这个账户上启动,以防止和进一步允许一个新的EA运行,以避免可能的冲突,它可以很容易地通过常规函数解决,这里不需要相同性检查。

 
Nikolai Semko:

我明白了...

但我仍然倾向于以下公式

那么,你的个人偏好与此有什么关系?这是关于MT5的一般情况。
 
fxsaber:
那么,这与你的个人喜好有什么关系呢?这是关于MT5的一般情况。
我非常怀疑,除了你之外,还有谁会想到创建一个EA经理。))
 
Nikolai Semko:
我非常怀疑,除了你之外,还有谁会想到要创建一个EA经理。))

为什么?这是一件非常好的、方便的事情。

我现在不得不使用配置文件,但它们有很多限制。

 
Andrey Khatimlianskii:

为什么?这是一件非常好的、方便的事情。

我现在不得不使用配置文件,但它们有很多限制。

安德烈,我不明白关于配置文件的问题。