Fehler, Irrtümer, Fragen - Seite 818

 
sion:

Verwendet jemand OnTradeTransaction, um festzustellen, ob ein Auftrag erteilt worden ist?

Im Strategietester, wenn ein Handel und 2 Aufträge innerhalb von 3 Ticks gesendet werden, kommt TRADE_TRANSACTION_REQUEST nur 1, auf dem letzten gesendeten Auftrag.

Sehen Sie sich die Protokolle des Testers oder die des Agenten an? Können Sie sich schriftlich an den Service Desk wenden und Einzelheiten mitteilen?
Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Rosh:
Sehen Sie sich die Protokolle des Testers oder die des Agenten an? Können Sie sich schriftlich an den Service Desk wenden und Einzelheiten mitteilen?

Ich habe mir die Protokolle im Agenten angesehen, und dort sollte ein zu großer Teil des Protokolls gedruckt werden. Ich habe nur einen ungefähren Code skizziert, da ich zu faul bin, mich mit Service Desk zu befassen. Ich habe es auf RoboForex seit 2011.10.10 ausgeführt, wo eine von drei TRADE_TRANSACTION_REQUEST erscheint, und auf Metakvot zwei von drei. Offenbar hängt es davon ab, wie oft die Zecken auftreten.

2012.08.22 09:43:15 Terminal SIGTrader 5 x64 build 687 gestartet

Dateien:
test5.mq5  8 kb
 
sion:

Ich habe mir die Protokolle im Agenten angesehen, und dort sollte ein zu großer Teil des Protokolls gedruckt werden. Ich habe nur einen ungefähren Code skizziert, da ich zu faul bin, mich mit Service Desk zu befassen. Ich habe es auf RoboForex seit 2011.10.10 ausgeführt, wo einer von drei TRADE_TRANSACTION_REQUEST erscheint, und auf Metakvot zwei von drei. Offenbar hängt es von der Häufigkeit der Zecken ab.

2012.08.22 09:43:15 Terminal SIGTrader 5 x64 build 687 gestartet

Im Grunde hängtOnTradeTransaction überhaupt nicht von Ticks ab - es ist der Trade Event Handler.

Und er kümmert sich um seinen eigenen Zug, die Warteschlange der Handelsereignisse.

 
Urain:

OnTradeTransaction ist angeblich überhaupt nicht tickabhängig, es ist ein Trade Event Handler.

Und sie bearbeitet ihrerseits eine Warteschlange von Handelsereignissen.

In diesem Beispiel hängt es von den Ticks ab, Aufträge zu setzen, bei jedem Tick wird ein neuer Auftrag gesetzt.

Ich frage mich, ob das Fehlen von TRADE_TRANSACTION_REQUEST von den Entwicklern wiederholt wurde, oder ob wir es nicht ohne Service Desk machen können?

 
sion:

In diesem Beispiel hängt die Geschwindigkeit der Auftragserteilung von den Ticks ab, bei jedem Tick wird ein neuer Auftrag erteilt.

Ich frage mich, ob das Fehlen von TRADE_TRANSACTION_REQUEST von den Entwicklern wiederholt wurde, oder ob man es nicht ohne Service Desk machen kann?

Wahrscheinlich nicht ohne SD, die Funktion ist neu und Bugs sind möglich. Das müssen wir uns im Detail ansehen.

SZY Ich arbeite gerade an einem Artikel über die Verwendung dieser Funktion, aber ich bin noch nicht auf eine solche Situation gestoßen.

ZZZY Ich habe es nur auf Alpari und MQ Servern getestet,

Wenn Sie mir den richtigen Servernamen nennen, werde ich versuchen, ihn zu überprüfen.

 
Urain:

Wahrscheinlich nicht ohne eine CD, die Funktion ist neu und kann noch Fehler enthalten. Ich muss mir das im Detail ansehen.

Ich schreibe gerade einen Artikel über die Verwendung dieser Funktion, aber diese Situation ist mir noch nie untergekommen.

ZZZY Ich habe nur die Server von Alpari und MQ überprüft,

Bitte geben Sie mir den richtigen Servernamen an, ich werde versuchen, ihn zu überprüfen.

RoboForex-MetaTrader 5

MetaQuotes-Demo

EURUSD ist die Währung, aber sie wird in den Protokollen oben erwähnt.

Ich habe eine Datei mit dem Datum 10.10.10 angehängt. Ich habe es noch einmal überprüft und es zeigt nur 1 letzte TRADE_TRANSACTION_REQUES auf RoboForex.

 
sion:

RoboForex-MetaTrader 5

MetaQuotes-Demo

EURUSD ist die Währung, aber sie wird in den Protokollen oben erwähnt.

Die oben angehängte Datei zeigt einen Start am 10. des Monats, daher war der Beginn des Tests der 10.10.2011. Ich habe es noch einmal überprüft, nur 1 letzte TRADE_TRANSACTION_REQUES wird konsequent von RoboForex empfangen.

Der Fehler reproduziert sich nicht.

Sowohl auf MQ als auch auf RoboForex, in Echtzeit und im Tester kommen alle TRADE_TRANSACTION_REQUEST normal.

Das System ist x86, bei x64 kann ich es gerade nicht überprüfen.

 

Ein Vergleich der beiden Protokolle zeigt, dass TRADE_TRANSACTION_REQUEST verworfen wird, wenn OnTradeTransaction nicht verarbeitet wurde, bevor ein neuer Auftrag erteilt wird.

Hier ist 1 von 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

hier 2 von 3

CL 0 Trade 03:36:07 2011.10.10 02:00:00 sofortiger Verkauf 1,00 EURUSD bei 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 deal performed [#2 sell 1.00 EURUSD at 1.33989]
DJ 0 Trade 03:36:07 2011.10.10 02:00:00 Auftrag ausgeführt Verkauf 1,00 bei 1,33989 [#2 Verkauf 1,00 EURUSD bei 1,33989] <== 1
RK 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 TRADE_ACTION_DEAL 1 Auftrag ausgeführt
QE 0 Trade 03:36:07 2011.10.10 02:00:00 Kauflimit 1,50 EURUSD bei 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. Order gesetzt
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===
HANDEL_TRANSAKTION_ANFORDERUNG
...
FD 0 test5 (EURUSD,H1) 03:36:07 2011.10.10 02:00:00 ****************************************************************************
OG 0 Handel 03:36:07 2011.10.10 02:00:01 Kauflimit 1,50 EURUSD bei 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. Order gesetzt
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===
HANDEL_TRANSAKTION_ANFORDERUNG

...

 
Urain:

Die Wanze funktioniert nicht.

Sowohl auf MQ als auch auf RoboForex, in Echtzeit und im Tester kommen alle TRADE_TRANSACTION_REQUEST normal.

Das System ist x86, ich kann es im Moment nicht auf x64 überprüfen.

Ich habe es auf einem alten Laptop ausprobiert, es funktionierte nacheinander: Aufträge einstellen - Antwort - Aufträge einstellen - Antwort - Aufträge einstellen - Antwort

Ich denke, es sollte funktionieren, wenn wir 2 Aufträge während eines Ticks senden.OnTradeTransaction wird dann nicht rechtzeitig funktionieren.

Ich habe die Datei ein wenig bearbeitet.

Dateien:
test5.mq5  8 kb
 

Guten Tag.

Ich habe eine Einheit zum Zählen von Schlägen auf Umschlagzeilen erstellt, sie scheint alles korrekt zu zählen, aber im Protokoll fehlen einige Einträge - zum Beispiel hat das Protokoll count[Number] =3 und das nächste count[Number] =5. Ich kann sehen, dass die Zählung korrekt ist, aber im Protokoll fehlt aus irgendeinem Grundcount [Number] =4. Manchmal enthält das Protokoll alle Einträge. Ich verstehe nicht, warum das passiert. Wenn Sie Fehler im Code sehen, können Sie den Code korrigieren?

Außerdem wird bei der Ausführung des Testers manchmal die Fehlermeldung "OnTick critical error" ausgegeben, aber beim nächsten Start beginnt der Test. Was könnte das Problem sein?

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

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