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

 

这个问题更加有趣。我根据上面帖子的代码建立了一个简单的EA。它还开了5笔交易,每笔交易在市场上进行5分钟,然后关闭。以下是代码。

#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static int test_ticket[2]={0,0};
   if(test_ticket[1]<5 && test_ticket[0]==0) {
      test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"test",33333,0,clrNONE);
      if(test_ticket[0]>0) test_ticket[1]++;
   }   
   if(OrderSelect(test_ticket[0],SELECT_BY_TICKET))
      if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent())
         if(OrderClose(test_ticket[0],OrderLots(),NormalizeDouble(Bid,_Digits),30,clrNONE)) {
            printf("Test order closed, ticket #%d",test_ticket[0]);
            test_ticket[0]=0;
         }   
   
  }
//+------------------------------------------------------------------+

它第一次就通过了验证,但在NZDUSD上没有交易。为什么?


即使验证器设置的存款不足以以最小的手数开仓,也会出现如上述信息的错误134。但就是没有交易!为什么?

也许验证器出现了故障,或者有一个合理的解释?

 
Renat Akhtyamov:

而你先把验证器的完整响应放在这里

而你为什么认为验证者是按照你想出的原则来分配门票的?

开立5笔交易,你需要计算未平仓交易的数量,而不是费力地处理票据。

雷纳特,这就是我认为的交易,仔细看一下。你甚至可以在测试器中运行我的代码。有一个包含两个值的数组:test_ticket[0] - 存储票据顺序,test_ticket[1] - 尝试的次数。

通过改变第一个条件中的尝试次数,你可以开启不同数量的交易

if(test_ticket[1]<5 && test_ticket[0]==0) {
 

这就是关于以下不同订单数量 的尝试的故事


而在这里,在接下来的一次尝试中,验证者居然使用了最低手数,明知不能用1美元的存款开盘。问题是,为什么先前没有交易的尝试?还有,为什么这次运行使用了一个明知错误的最低手数和存款,从而引发了验证错误?

Vladimir Karputov:

...

总而言之,到目前为止,验证器已经应对了它的主要任务:从市场中筛选出不完整的代码。

嗯...

而且这不是一个随机的镜头。下面是接下来的三次尝试。


 

日志中的错误 "没有钱开启这样那样的交易...... "表明你确实发送了一个交易指令,但事先没有完全检查任何东西(或不是所有东西)。该文章提供了一个明确的检查算法。


请记住--"没有钱来开这样那样的交易 "的错误。- 是专家顾问的逻辑中99%的错误。这是缺少检查(或完全没有检查)。这是一个对编码原则理解不足的表现。


请记住:在现实世界中,存款可能是1美元,杠杆不一定是1:100,最小手数可能是0.01和0.02,0.30和1.0,还有很多其他的东西...

 
Vladimir Karputov:

日志中的错误 "没有钱开启这样那样的交易...... "表明你确实发送了一个交易指令,但事先没有完全检查任何东西(或不是所有东西)。该文章提供了一个明确的检查算法。


记住--"没有钱开某某交易 "的错误...。- 是专家顾问的逻辑中99%的错误。这是缺少检查(或完全没有检查)。这是对编码原则缺乏了解的表现。


请记住:在现实世界中,存款可能是1美元,杠杆不一定是1:100,最小手数可能是0.01和0.02,0.30和1.0,还有很多其他的东西...

弗拉基米尔,你错过了大象。主要的错误是。

我可以用你的语言回答,给你讲课。

 
Vladimir Karputov:

日志中的错误 "没有钱开启这样那样的交易...... "表明你确实发送了一个交易指令,但事先没有完全检查任何东西(或不是所有东西)。该文章提供了一个明确的检查算法。


请记住--"没有钱来开这样那样的交易 "的错误。- 是专家顾问的逻辑中99%的错误。这是缺少检查(或完全没有检查)。这是一个对编码原则理解不足的表现。


请记住:在现实世界中,存款可能是1美元,杠杆不一定是1:100,最小手数可能是0.01和0.02,0.30和1.0,还有很多其他的东西...

弗拉基米尔,我不明白你是一般地看帖子,还是只挑出有趣的照片。再仔细阅读 所有内容,或至少从头开始读几遍。并阅读代码!我甚至不想费力向你解释这一切!我想说的是。

 
Andrey Kaunov:

我甚至不想费力向你解释所有的事情!"。

安德鲁,没有人愿意重复已经写过和嚼过的东西。

 
是的,但问题很明显。也许这个强大的网站的人将尝试分析它并检查验证器。没有参数的简单透明代码在NZDUSD和GBPUSD的检查中有时不能执行交易。如果我们添加一些条件,而黄金也没有交易,那么我们将再次收到没有交易操作和 漏检的错误。
 
Andrey Kaunov:
是的,但问题就在那里。也许这个强大的网站有人会尝试理解这一切并检查验证器。没有参数的简单透明代码对NZDUSD和GBPUSD检查有时根本不起作用。如果我们添加一些条件,而黄金也没有交易,那么我们将再次收到没有交易操作和 漏检的错误。

不要依赖验证器从贸易服务器错误列表中返回错误代码。始终自己记录错误信息。仔细阅读文章中写的内容,你就会知道无法执行订单以及在这种情况下你需要做什么。

很有可能在日志中没有错误信息,例如批量大小的计算,是导致验证错误的原因。

 
Andrey Kaunov:

这就是关于以下不同订单数量 的尝试的故事


而在这里,在接下来的一次尝试中,验证者居然使用了最低手数,明知不能用1美元的存款开盘。问题是,为什么先前没有交易的尝试?还有,为什么这次运行使用了一个明知错误的最低手数和存款,从而引发了验证错误?

嗯...

而且这不是一个随机的镜头。下面是接下来的三次尝试。


发送交易指令错误 134 ...

测试人员是否写了这个错误?如果是的话,这也是导致验证错误的原因之一。你必须自己计算开仓的可能性,如果不可能,就把你自己关于无法用设定的参数交易的信息写进日志,而不是向服务器发送一个明知错误的订单,依靠终端和服务器为你做一切。通过这种不正确的订单,你可以淹没服务器,然后被安全地禁止自动交易。这是你的错,不是验证者的错。