被错误困扰的是没有交易业务 - 页 21

 
Arkadii Zagorulko:

正是MT5...

他们说只有MT4有问题。

也许这是对切换到MT5的一种破坏...

 

如果对大家有帮助的话,下面是我通过验证的方法。没有止损和订单修改的EA,但在所有的时间段

验证器给出错误131(错误的手数),没有交易。这是我的第一个EA,所以可能有我犯的所有错误。

首先,我添加了所有的英文注释来检查交易功能,即如果EA没有交易,它应该在Print()中输出错误。

我还增加了对自由保证金的检查,并删除了ExpertRemove(),但这并没有帮助,错误仍然没有改变。

void buy()
  {
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0)
     {
      if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,SLb,0,comment,Magic,0,Green)<1)
         Print(" Buy ​​order error !"+ IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
     }
   else
      Print("Not enough money!" +" Error code = " + IntegerToString(GetLastError(),0));
      /// ExpertRemove();
   return;   
  }

我同时做了其他几个改动,我不知道其中哪个有帮助。

我在专家顾问的开始和结束时重置了错误,检查了所有TF的报价。

int OnInit()
  {
    ResetLastError();   

      for(int cycle=1; cycle<=5; cycle++)
     {
      switch(cycle)
        {
         case 1:
            TF = PERIOD_D1;
            break;
         case 2:
            TF = PERIOD_H4;
            break;
         case 3:
            TF = PERIOD_H1;
            break;
         case 4:
            TF = PERIOD_M15;
            break;
         case 5:
            TF = PERIOD_M5;
            break;
        }
   if(iTime(_Symbol,TF,Limit)<1)
     Print("Missing quotes! " + IntegerToString(TF,0) + " Timeframe"+" Error = " + IntegerToString(GetLastError(),0));            
     }      
   return(INIT_SUCCEEDED);
  }
//****************************
void OnDeinit(const int reason)
  {  
   Alert("Error = "+ IntegerToString(GetLastError(),0));
   ResetLastError();
  }

如果步长为(0,1)、(0,01)甚至(0,001),则所有情况下都要重新计算批次计算。

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

   Lots = NormalizeDouble(AccountEquity()/10000*Lot_for_10K,3);
   if(lotstep>0.001)
   Lots = (MathRound(Lots/lotstep))*lotstep;    
   Lots = MathMax(Lots,MarketInfo(Symbol(),MODE_MINLOT));
   Lots = MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT));

因此,我可以说我成功地快速解决了所有问题,只用了2天和大约10次尝试。

 
我将描述我对 "没有交易操作 "的实验:

1.在从Market重新编译旧的EA并试图上传到网站后,出现了 "没有交易操作 "的错误。
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2.检查所有TF的报价可用性并没有显示任何错误(我用除以0)。
3.然后我开始检查交易业务量,但同时我得到的错误是 "没有交易业务"。
4.然后将所有OrderSend中的手数改为SYMBOL_VOLUME_MIN-"没有交易操作"
5。很明显,验证器测试器出了问题。并试图在OnInit()中添加位置开放:
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

这就是我得到的结果(顺便说一下,这是我第一次在验证器中看到如此详细的信息)。

 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


这里已经明确了 "没有交易业务 "的错误。如果我们有一个1.00的余额,我们显然不能用0.20(SYMBOL_VOLUME_MIN)开单。在代码中检查余额是有作用的,不允许下这样的订单,并在日志中显示余额不足的打印信息(只有验证人没有看到)。

你认为验证器是如何确定的?


我们将等待,直到验证器被修复。

 
免费的人造黄油并没有困扰我,因为我已经厌倦了洪都拉斯。
 
Алексей Тарабанов #:
免费的人造黄油并不影响我,我已经厌倦了洪都拉斯。

困难?我说的是表达。

 
是的,我说的是测试参数
 
清除你的各种记忆。
 

我找到了问题所在,在默认情况下,我在输入参数中对最大手数的头寸有限制。

input double MaxLots=0.1;
...
lots = MathMin(lots, MaxLots);

这就是为什么在验证器中SYMBOL_VOLUME_MIN 为0.20时,不允许开仓。你不能为验证器默认设置这么小的最大持仓手数限制