错误、漏洞、问题 - 页 818

 
sion:

是否有人使用OnTradeTransaction,来确定订单是否已经下达?

在策略测试中,当一个交易和2个订单在3个点内发送时,TRADE_TRANSACTION_REQUEST只出现1个,即在最后一个订单发送时。

你是在看测试人员的日志还是代理人员的日志?你能写信给服务台 并提供细节吗?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Rosh:
你是在看测试人员的日志还是代理人员的日志?你能写信给服务台 并提供细节吗?

我看了看代理中的日志,有太大的一块日志应该被打印出来。我只是草拟了一个大概的代码,我太懒了,不想和服务台打交道。我从2011.10.10开始在RoboForex上运行,其中出现三个TRADE_TRANSACTION_REQUEST中的一个,在Metakvot上出现三个中的两个。显然,这取决于蜱虫出现的频率。

2012.08.22 09:43:15 终端SIGTrader 5 x64 build 687启动

附加的文件:
test5.mq5  8 kb
 
sion:

我看了看代理中的日志,有太大的一块日志应该被打印出来。我只是画了一个大概的代码,我太懒了,不想处理Servicedesk。我从2011.10.10开始在RoboForex上运行,出现了三个TRADE_TRANSACTION_REQUEST中的一个,在Metakvot上出现了三个中的两个。显然,这取决于蜱虫的频率。

2012.08.22 09:43:15 终端SIGTrader 5 x64 build 687启动

在理念上,OnTradeTransaction 根本不依赖于ticks--它是交易事件处理程序。

而且它处理自己的回合,即贸易事件的队列。

 
Urain:

OnTradeTransaction应该是完全不依赖tick的,它是一个交易事件处理程序。

而它处理的是它的轮子,是贸易事件的队列。

在这个例子中,它依赖于刻度线来设置订单,在每个刻度线上都 会设置一个新的订单。

我不知道缺乏TRADE_TRANSACTION_REQUEST是否已经被开发人员重复了,或者我们没有服务台就不能做?

 
sion:

在这个例子中,下单的速度取决于刻度,每一个刻度都会有一个新的订单。

我想知道,缺乏TRADE_TRANSACTION_REQUEST是开发人员重复的,还是没有服务台就不能做?

可能不是没有SD,该功能是新的,有可能出现bug。需要详细研究。

SZY 我正在撰写一篇关于如何使用这一功能的文章,但我没有遇到过这种情况。

ZZZY 我只在Alpari和MQ服务器上测试过。

如果你给我正确的服务器名称,我将尝试检查。

 
Urain:

没有CD可能不行,这个功能是新的,可能有bug。我需要详细研究一下。

我正在做一篇关于使用这个功能的文章,但这种情况我从来没有想到过。

ZZZY 我只在Alpari和MQ服务器上检查过。

请给我正确的服务器名称,我将尝试检查。

RoboForex-MetaTrader 5

MetaQuotes-Demo

欧元兑美元是货币,但在上面的日志中提到了它。

我附上了一个日期为10.10.10的文件,我再次检查了它,它显示RoboForex上只有1个最后的TRADE_TRANSACTION_REQUES。

 
sion:

RoboForex-MetaTrader 5

MetaQuotes-Demo

欧元兑美元是货币,但在上面的日志中提到了它。

上面所附的文件显示开始于本月10日,因此测试的开始时间是2011.10.10。我再次检查,只有最后1个TRADE_TRANSACTION_REQUES被RoboForex持续接收。

该错误没有重现。

在MQ和RoboForex,在实时和测试中,所有的TRADE_TRANSACTION_REQUEST都正常出现。

系统是x86的,我现在无法检查x64的情况

 

通过比较2个日志,我们可以看到,如果OnTradeTransaction在新订单下达之前没有被处理,TRADE_TRANSACTION_REQUEST会被放弃。

这里是3个中的1个

GM 0 Trade 03:35:28 2011.10.10 02:00:00 instant sell 1.00 EURUSD at 1.3385 (1.3385 / 1.3387 / 1.3385)
OL 0 Trades 03:35:28 2011.10.10 02:00:00 deal #2 sell 1.00 EURUSD at 1.3385 done (based on order #2)
JQ 0 Trade 03:35:28 2011.10.10 02:00:00 deal performed [#2 sell 1.00 EURUSD at 1.3385]
RJ 0 Trade 03:35:28 2011.10.10 02:00:00 order performed sell 1.00 at 1.3385 [#2 sell 1.00 EURUSD at 1.3385]       <== 1
MH 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 TRADE_ACTION_DEAL Установлен 1 ордер
HE 0 Trade 03:35:28 2011.10.10 02:00:00 buy limit 1.50 EURUSD at 1.3234 (1.3384 / 1.3386 / 1.3384)                    <== 2
MP 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 TRADE_ACTION_PENDING Установлен 2 ордер
QN 0 Trade 03:35:28 2011.10.10 02:00:00 buy limit 1.50 EURUSD at 1.3285 (1.3385 / 1.3387 / 1.3385)                    <== 3
MM 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 TRADE_ACTION_PENDING Установлен 2 ордер
HI 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==6----- n=0
GE 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
GD 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==2----- n=1
CF 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
MF 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==3----- n=2
OS 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
OQ 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=3
KL 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
JL 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=4
GN 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
EO 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=5
CK 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
PI 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=6
OD 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ****************************************************************************
LG 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ///////////////////// trans.type==10----- n=7
OJ 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 EnumToString(type)=TRADE_TRANSACTION_REQUEST
QN 0 test5 (EURUSD,M30) 03:35:28 2011.10.10 02:00:00 ------------trans===
TRADE_TRANSACTION_REQUEST

这里有2个3

CL 0 交易 03:36:07 2011.10.10 02:00:00 即时卖出 1.00 EURUSD 在 1.33989 (1.33989 / 1.34003 / 1.33989)
NP 0 交易 03:36:07 2011.10.10 02:00:00 交易 #2 在1.33989卖出1.00 EURUSD 完成(基于订单#2)。
QR 0 交易 03:36:07 2011.10.10 02:00:00 交易执行 [#2在1.33989卖出1.00欧元美元]
DJ 0 交易 03:36:07 2011.10.10 02:00:00 执行的订单在1.33989卖出1.00 [#2在1.33989卖出1.00 EURUSD] <== 1
RK 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 TRADE_ACTION_DEAL 1订单已执行。
QE 0 交易 03:36:07 2011.10.10 02:00:00 买入限额 1.50 欧元兑美元在 1.32490 (1.33990 / 1.34004 / 1.33990) <=2
LS 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 TRADE_ACTION_PENDING 第二单设置
GP 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==6----- n=0
JM 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
DM 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==2----- n=1
JH 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
FJ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==3----- n=2
JG 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
DG 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=3
JR 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
ID 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==0----- n=4
JQ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
IR 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ///////////////////// trans.type==10----- n=5
RP 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 EnumToString(type)=TRADE_TRANSACTION_REQUEST
RG 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ------------trans====。
交易请求
...
FD 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
OG 0交易 03:36:07 2011.10.10 02:00:01 在1.32992(1.33992 / 1.34006 / 1.33992)买入限额1.50欧元兑美元 <== 3
QQ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 TRADE_ACTION_PENDING 第二单设置
RQ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 ///////////////////// trans.type==0----- n=6
OO 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 ****************************************************************************
RM 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 ///////////////////// trans.type=10----- n=7
CF 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 EnumToString(type)=TRADE_TRANSACTION_REQUEST
CJ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 ------------trans===。
交易请求

...

 
Urain:

这个错误是不可行的。

在MQ和RoboForex,在实时和测试中,所有的TRADE_TRANSACTION_REQUEST都正常出现。

系统是x86的,我现在不能在x64上检查

在一台旧的笔记本电脑上试了试,它的工作顺序是:设置订单--回应--设置订单--回应--设置订单--回应

我认为,如果我们在1次勾选中发送2个订单,它应该是有效的。那么OnTradeTransaction 将无法及时工作。

我对文件进行了一些调整。

附加的文件:
test5.mq5  8 kb
 

下午好。

我创建了一个单元来计算信封线的节拍,它似乎能正确地计算所有的东西,但日志中缺少一些条目--例如日志中的count[Number] =3,而 下一个count[Number] =5。我可以看到计数是正确的,但日志由于某种原因缺少 count [Number] =4。有时,日志有所有的条目。我不明白为什么会发生这种情况。如果你看到代码中的错误,你可以纠正 代码 吗?

另外,有时运行测试器会出现错误 "OnTick critical error",但在下一次启动时却开始测试。可能是什么问题?

input string            Symb0 = "EURUSD";
input  bool            Trade0 = true;
int MA_Shift0=1;
input int MA_Per0 = 11;
input double     Envelopes_Deviation0     =0.1; 
//+-----------------------------------+
input string            Symb1 = "USDCHF";
input  bool            Trade1 = true;
int MA_Shift1=1;
input int MA_Per1 = 11;
input double     Envelopes_Deviation1     =0.1; 

bool MA (int Number,
         string  Symbol_,           // имя символа
         bool    Trade,
         int     MA_Per,         // период для расчета средней линии
         int     MA_Shift,          // смещение индикатора по горизонтали   
         double  Envelopes_Deviation,          // отклонение границ от средней линии    
         double  &Bid[],
         int &env[],
         int &count[],
         bool &flagenv[],
         bool &flagenv1[]      
        )

  {
   if(!Trade)return(true);

   static int Size_=0;

   static int Handle[];
  static int Recount[],MinBars[];
  double ma[];
  double Env_Up[2];  
double Env_Dn[2];   
 double  norm_Env_Dn;
 double  norm_Env_Up;

 
     if(Number+1>Size_) 
     {
      Size_=Number+1; 

      ArrayResize(Handle,Size_);
      ArrayResize(Recount,Size_);
      ArrayResize(MinBars,Size_);

      MinBars[Number]=3*MA_Per;

      ArraySetAsSeries(Env_Dn,true);

      Handle[Number]=iEnvelopes(Symbol_,0,MA_Per,MA_Shift,MODE_SMA,PRICE_CLOSE,Envelopes_Deviation); 
         
     }

   if(Bars(Symbol_,0)<MinBars[Number])return(true);

      if(CopyBuffer(Handle[Number],LOWER_LINE,0,2,Env_Dn)<0 || CopyBuffer(Handle[Number],UPPER_LINE,0,2,Env_Up)<0)
        {
         Recount[Number]=true; 

         return(false);  
        }
      
     
  int Digits_=int(SymbolInfoInteger(Symbol_,SYMBOL_DIGITS)+1);
  norm_Env_Dn = NormalizeDouble(Env_Dn[0], Digits_);
  norm_Env_Up = NormalizeDouble(Env_Up[0], Digits_);   
     
 Bid[Number]=SymbolInfoDouble(Symbol_,SYMBOL_BID); 
    
if(Bid[Number] < norm_Env_Dn && !flagenv1[Number]) env[Number] += 1;
if(Bid[Number] > norm_Env_Up && !flagenv[Number]) env[Number] += 2;      
if(env[Number]<=2)env[Number] *= 10;

if (env[Number]==20)flagenv[Number] = true;
if (env[Number]==10)flagenv1[Number] = true;

if(env[Number]==3 || env[Number]==12 || env[Number]==21 || env[Number]>21) 
{
env[Number]=0;
flagenv[Number] = false;
flagenv1[Number] = false;
count[Number]++;

Print("+++++++++@@@@@@@@@@@@@@@@@@@@@@@@@@@ count---------= ", count[Number],"      Number= ",Number);
}
  
  return(true);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  static double Bid[2];
  static int env[2],count[2];
  static bool flagenv[2],flagenv1[2]; 
MA(0,Symb0,Trade0,MA_Per0,MA_Shift0,Envelopes_Deviation0,Bid,env,count,flagenv,flagenv1);
MA(1,Symb1,Trade1,MA_Per1,MA_Shift1,Envelopes_Deviation1,Bid,env,count,flagenv,flagenv1);

  }
//+------------------------------------------------------------------+