Errori, bug, domande - pagina 818

 
sion:

Qualcuno usa OnTradeTransaction per determinare se un ordine è stato piazzato?

Nel tester della strategia, quando un trade e 2 ordini sono inviati entro 3 tick, TRADE_TRANSACTION_REQUEST arriva solo 1, sull'ultimo ordine inviato.

Stai guardando i log del tester o quelli dell'agente? Puoi scrivere al Service Desk e fornire dettagli?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Rosh:
Stai guardando i log del tester o quelli dell'agente? Puoi scrivere al Service Desk e fornire dettagli?

Ho guardato i registri nell'agente, e lì un pezzo di registro troppo grande dovrebbe essere stampato. Ho appena abbozzato un codice approssimativo, sono troppo pigro per trattare con Service Desk. L'ho eseguito su RoboForex dal 2011.10.10 dove appare uno dei tre TRADE_TRANSACTION_REQUEST, e su Metakvot due dei tre. Apparentemente dipende da quanto spesso appaiono le zecche.

2012.08.22 09:43:15 Terminale SIGTrader 5 x64 build 687 avviato

File:
test5.mq5  8 kb
 
sion:

Ho guardato i registri nell'agente, e lì un pezzo di registro troppo grande dovrebbe essere stampato. Ho appena abbozzato un codice approssimativo, sono troppo pigro per trattare con Service Desk. L'ho eseguito su RoboForex dal 2011.10.10 dove appare uno dei tre TRADE_TRANSACTION_REQUEST, e su Metakvot due dei tre. A quanto pare, dipende dalla frequenza delle zecche.

2012.08.22 09:43:15 Terminale SIGTrader 5 x64 build 687 avviato

Nell'idea,OnTradeTransaction non dipende affatto dai tick - è il gestore dell'evento commerciale.

E gestisce il proprio turno, la coda degli eventi commerciali.

 
Urain:

OnTradeTransaction non è presumibilmente affatto dipendente dal tick, è un gestore di eventi commerciali.

Ed elabora il suo turno, una coda di eventi commerciali.

In questo esempio, dipende dai tick per impostare gli ordini, su ogni tick viene impostato un nuovo ordine.

Mi chiedo se la mancanza di TRADE_TRANSACTION_REQUEST è stata ripetuta dagli sviluppatori, o non possiamo farlo senza Service Desk?

 
sion:

In questo esempio, la velocità di collocamento degli ordini dipende dai tick, un nuovo ordine viene collocato su ogni tick.

Mi chiedo se la mancanza di TRADE_TRANSACTION_REQUEST è stata ripetuta dagli sviluppatori, o non può farlo senza Service Desk?

Probabilmente non si può fare a meno di SD, la funzione è nuova e i bug sono possibili. Bisognerà approfondire l'argomento.

SZY Sto preparando un articolo su come utilizzare questa funzione, ma non ho incontrato una situazione simile.

ZZZY L'ho testato solo sui server Alpari e MQ,

Se mi dai il nome corretto del server, proverò a controllare.

 
Urain:

Probabilmente non senza un CD, la funzione è nuova e potrebbero esserci dei bug. Ho bisogno di approfondire la questione.

Sto facendo un articolo sull'uso di questa funzione, ma questa situazione non mi è mai capitata.

ZZZY Ho controllato solo sui server Alpari e MQ,

Per favore datemi il nome corretto del server, cercherò di controllarlo.

RoboForex-MetaTrader 5

MetaQuotes-Demo

EURUSD è la valuta, ma è menzionata nei log di cui sopra.

Ho allegato un file con la data 10.10.10. Ho controllato di nuovo e mostra solo 1 ultimo TRADE_TRANSACTION_REQUES su RoboForex.

 
sion:

RoboForex-MetaTrader 5

MetaQuotes-Demo

EURUSD è la valuta, ma è menzionata nei log di cui sopra.

Il file allegato sopra mostra un inizio il 10 del mese, quindi l'inizio del test è stato 2011.10.10. Ho controllato ancora una volta, solo 1 ultimo TRADE_TRANSACTION_REQUES è costantemente ricevuto da RoboForex.

Il bug non si riproduce.

Sia su MQ che su RoboForex, in tempo reale e nel tester tutte le TRADE_TRANSACTION_REQUEST arrivano normalmente.

Il sistema è x86, non posso controllare su x64 al momento.

 

Confrontando i 2 log, possiamo vedere che se OnTradeTransaction non è stato processato prima che un nuovo ordine sia piazzato, TRADE_TRANSACTION_REQUEST viene abbandonato.

Qui è 1 di 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

qui 2 di 3

CL 0 Commercio 03:36:07 2011.10.10 02:00:00 vendita istantanea 1,00 EURUSD a 1,33989 (1,33989 / 1,34003 / 1,33989)
NP 0 Trades 03:36:07 2011.10.10 02:00:00 affare #2 vendere 1.00 EURUSD a 1.33989 fatto (basato sull'ordine #2)
QR 0 Commercio 03:36:07 2011.10.10 02:00:00 operazione eseguita [#2 vendere 1,00 EURUSD a 1,33989]
DJ 0 Commercio 03:36:07 2011.10.10 02:00:00 ordine eseguito vendere 1,00 a 1,33989 [#2 vendere 1,00 EURUSD a 1,33989] <== 1
RK 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 TRADE_ACTION_DEAL 1 ordine eseguito
QE 0 Trade 03:36:07 2011.10.10 02:00:00 comprare limite 1,50 EURUSD a 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° ordine impostato
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===
RICHIESTA DI TRANSAZIONE COMMERCIALE
...
FD 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
OG 0 trade 03:36:07 2011.10.10 02:00:01 comprare limite 1,50 EURUSD a 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° ordine impostato
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===
RICHIESTA DI TRANSAZIONE COMMERCIALE

...

 
Urain:

Il bug non funziona.

Sia su MQ che su RoboForex, in tempo reale e nel tester tutte le TRADE_TRANSACTION_REQUEST arrivano normalmente.

Il sistema è x86, non posso controllarlo su x64 al momento.

Provato su un vecchio portatile, ha funzionato in modo sequenziale: impostazione degli ordini - risposta - impostazione degli ordini - risposta - impostazione degli ordini - risposta

Penso che dovrebbe funzionare se inviamo 2 ordini durante 1 tick.OnTradeTransaction non funzionerà in tempo allora.

Ho modificato un po' il file.

File:
test5.mq5  8 kb
 

Buon pomeriggio.

Ho creato un'unità per contare i battiti sulle linee delle buste, sembra contare tutto correttamente, ma nel log mancano alcune voci - per esempio il log ha count[Number] =3 e il prossimo count[Number] =5. Vedo che il conteggio è corretto ma il log manca per qualche motivocount [Number] =4. A volte il log ha tutte le voci. Non capisco perché succede. Se vedete errori nel codice, potete correggere il codice?

Inoltre, a volte l'esecuzione del tester lancia l'errore "OnTick critical error" ma al prossimo avvio inizia il test. Quale potrebbe essere il problema?

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

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

Motivazione: