Erreurs, bugs, questions - page 818

 
sion:

Quelqu'un utilise-t-il OnTradeTransaction, pour déterminer si un ordre a été passé ?

Dans le testeur de stratégie, lorsqu'une transaction et 2 ordres sont envoyés dans un intervalle de 3 ticks, TRADE_TRANSACTION_REQUEST n'arrive que 1, sur le dernier ordre envoyé.

Vous regardez les journaux du testeur ou ceux de l'agent ? Pouvez-vous écrire au Service Desk et fournir des détails ?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Rosh:
Vous regardez les journaux du testeur ou ceux de l'agent ? Pouvez-vous écrire au Service Desk et fournir des détails ?

J'ai regardé les journaux dans l'agent, et là, un trop gros morceau de journal devrait être imprimé. J'ai juste esquissé un code approximatif, je suis trop paresseux pour m'occuper du Service Desk. Je l'ai lancé sur RoboForex depuis 2011.10.10 où un TRADE_TRANSACTION_REQUEST sur trois apparaît, et sur Metakvot deux sur trois. Apparemment, cela dépend de la fréquence d'apparition des tiques.

2012.08.22 09:43:15 Terminal SIGTrader 5 x64 build 687 lancé

Dossiers :
test5.mq5  8 kb
 
sion:

J'ai regardé les journaux dans l'agent, et là, un trop gros morceau de journal devrait être imprimé. J'ai juste esquissé un code approximatif, je suis trop paresseux pour m'occuper du Service Desk. Je l'ai lancé sur RoboForex depuis 2011.10.10 où un TRADE_TRANSACTION_REQUEST sur trois apparaît, et sur Metakvot deux sur trois. Apparemment, cela dépend de la fréquence des tiques.

2012.08.22 09:43:15 Terminal SIGTrader 5 x64 build 687 lancé

En fait,OnTradeTransaction ne dépend pas du tout des ticks - c'est le gestionnaire de l'événement de transaction.

Et il gère son propre tour, la file d'attente des événements commerciaux.

 
Urain:

OnTradeTransaction est censé ne pas dépendre du tout du tick, c'est un gestionnaire d'événement de transaction.

Et il traite son tour, une file d'attente d'événements commerciaux.

Dans cet exemple, il dépend des ticks pour fixer les ordres, à chaque tick un nouvel ordre est fixé.

Je me demande si l'absence de TRADE_TRANSACTION_REQUEST a été répétée par les développeurs, ou si nous ne pouvons pas le faire sans Service Desk ?

 
sion:

Dans cet exemple, la vitesse de placement des ordres dépend des ticks, un nouvel ordre est placé à chaque tick.

Je me demande si l'absence de TRADE_TRANSACTION_REQUEST a été répétée par les développeurs, ou s'il est impossible de le faire sans Service Desk ?

On ne peut probablement pas se passer de SD, la fonction est nouvelle et des bugs sont possibles. Il faut l'examiner en détail.

SZY Je suis en train de rédiger un article sur l'utilisation de cette fonction, mais je n'ai pas rencontré une telle situation.

ZZZY Je ne l'ai testé que sur les serveurs Alpari et MQ,

Si vous me donnez le nom correct du serveur, je vais essayer de le vérifier.

 
Urain:

Probablement pas sans un CD, la fonction est nouvelle et il peut y avoir des bogues. Je dois l'examiner en détail.

Je suis en train de réaliser un article sur l'utilisation de cette fonction, mais cette situation ne m'est jamais arrivée.

ZZZY J'ai vérifié uniquement sur les serveurs Alpari et MQ,

Veuillez me donner le nom correct du serveur, je vais essayer de le vérifier.

RoboForex-MetaTrader 5

MetaQuotes-Démo

EURUSD est la devise, mais elle est mentionnée dans les logs ci-dessus.

J'ai joint un fichier avec la date du 10.10.10. Je l'ai vérifié à nouveau et il montre seulement 1 dernière TRADE_TRANSACTION_REQUES sur RoboForex.

 
sion:

RoboForex-MetaTrader 5

MetaQuotes-Démo

EURUSD est la devise, mais elle est mentionnée dans les logs ci-dessus.

Le fichier joint ci-dessus montre un début le 10 du mois, donc le début du test était 2011.10.10. Je l'ai vérifié une fois de plus, seul 1 dernier TRADE_TRANSACTION_REQUES est systématiquement reçu par RoboForex.

Le bogue ne se reproduit pas.

Tant sur MQ que sur RoboForex, en temps réel et dans le testeur, toutes les TRADE_TRANSACTION_REQUEST arrivent normalement.

Le système est x86, je ne peux pas vérifier sur x64 pour le moment.

 

En comparant les 2 journaux, nous pouvons voir que si la transaction OnTradeTransaction n'a pas été traitée avant qu'un nouvel ordre soit placé, TRADE_TRANSACTION_REQUEST est abandonné.

Voici 1 de 3

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

ici 2 de 3

CL 0 Trade 03:36:07 2011.10.10 02:00:00 instant vendre 1.00 EURUSD à 1.33989 (1.33989 / 1.34003 / 1.33989)
NP 0 Trades 03:36:07 2011.10.10 02:00:00 deal #2 sell 1.00 EURUSD at 1.33989 done (based on order #2)
QR 0 Trade 03:36:07 2011.10.10 02:00:00 transaction effectuée [#2 sell 1.00 EURUSD at 1.33989]
DJ 0 Trade 03:36:07 2011.10.10 02:00:00 ordre exécuté sell 1.00 at 1.33989 [#2 sell 1.00 EURUSD at 1.33989] <== 1
RK 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 TRADE_ACTION_DEAL 1 ordre exécuté
QE 0 Trade 03:36:07 2011.10.10 02:00:00 achat limite 1.50 EURUSD à 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 2ème ordre fixé
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===
DEMANDE_DE_TRANSACTION
...
FD 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
OG 0 transaction 03:36:07 2011.10.10 02:00:01 achat limite 1.50 EURUSD à 1.32992 (1.33992 / 1.34006 / 1.33992) <== 3
QQ 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:01 TRADE_ACTION_PENDING 2ème ordre fixé
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===
DEMANDE_DE_TRANSACTION

...

 
Urain:

Le bug ne fonctionne pas.

Tant sur MQ que sur RoboForex, en temps réel et dans le testeur, toutes les TRADE_TRANSACTION_REQUEST arrivent normalement.

Le système est x86, je ne peux pas le vérifier sur x64 pour le moment.

J'ai essayé sur un vieil ordinateur portable, cela a fonctionné de manière séquentielle : mise en place des commandes - réponse - mise en place des commandes - réponse - mise en place des commandes - réponse

Je pense que cela devrait fonctionner si nous envoyons 2 ordres pendant 1 tick.OnTradeTransaction ne fonctionnera pas à temps alors.

J'ai un peu modifié le fichier.

Dossiers :
test5.mq5  8 kb
 

Bon après-midi.

J'ai créé une unité pour compter les battements sur les lignes d'enveloppes, elle semble tout compter correctement, mais le journal manque certaines entrées - par exemple le journal a count[Number] =3 et le count[Number] suivant =5. Je peux voir que le comptage est correct mais le journal manque pour une raison quelconquecount [Number] =4. Parfois le journal contient toutes les entrées. Je ne comprends pas pourquoi ça arrive. Si vous voyez des erreurs dans le code, pouvez-vous corriger le code?

De plus, parfois, le testeur en cours d'exécution génère l'erreur " OnTick critical error ", mais au démarrage suivant, il commence à tester. Quel pourrait être le problème ?

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);

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