Beunruhigt durch den Fehler gibt es keine Handelsgeschäfte - Seite 21

 
Arkadii Zagorulko:

Genau, MT5...

Sie sagen, nur MT4 sei das Problem.

Vielleicht ist es eine Sabotage, um auf MT5 umzusteigen...

 

Falls es jemandem hilft, hier ist, wie ich die Validierung bestanden habe. EA ohne Stopps und Orderänderungen, aber auf allen Zeitrahmen.

Validator gab Fehler 131 (falsches Lot) und keine Trades. Dies ist mein erster EA, also habe ich wahrscheinlich alle Fehler gemacht.

Zuerst habe ich alle englischen Kommentare hinzugefügt, um die Handelsfunktionen zu überprüfen, d.h. wenn der EA nicht handelt, sollte er einen Fehler in Print() ausgeben.

Ich fügte auch die Prüfung auf freien Spielraum hinzu und entfernte ExpertRemove(), aber das half nicht, die Fehler blieben dieselben.

void buy()
  {
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0)
     {
      if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,SLb,0,comment,Magic,0,Green)<1)
         Print(" Buy ​​order error !"+ IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
     }
   else
      Print("Not enough money!" +" Error code = " + IntegerToString(GetLastError(),0));
      /// ExpertRemove();
   return;   
  }

Ich habe mehrere andere Änderungen gleichzeitig vorgenommen, und ich weiß nicht, welche davon geholfen haben.

Ich habe die Fehler am Anfang und am Ende des Expert Advisors zurückgesetzt, die Kurse für alle TFs überprüft

int OnInit()
  {
    ResetLastError();   

      for(int cycle=1; cycle<=5; cycle++)
     {
      switch(cycle)
        {
         case 1:
            TF = PERIOD_D1;
            break;
         case 2:
            TF = PERIOD_H4;
            break;
         case 3:
            TF = PERIOD_H1;
            break;
         case 4:
            TF = PERIOD_M15;
            break;
         case 5:
            TF = PERIOD_M5;
            break;
        }
   if(iTime(_Symbol,TF,Limit)<1)
     Print("Missing quotes! " + IntegerToString(TF,0) + " Timeframe"+" Error = " + IntegerToString(GetLastError(),0));            
     }      
   return(INIT_SUCCEEDED);
  }
//****************************
void OnDeinit(const int reason)
  {  
   Alert("Error = "+ IntegerToString(GetLastError(),0));
   ResetLastError();
  }

und die Losberechnung wird für alle Fälle neu berechnet, wenn der Schritt (0,1), (0,01) und sogar (0,001) ist

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

   Lots = NormalizeDouble(AccountEquity()/10000*Lot_for_10K,3);
   if(lotstep>0.001)
   Lots = (MathRound(Lots/lotstep))*lotstep;    
   Lots = MathMax(Lots,MarketInfo(Symbol(),MODE_MINLOT));
   Lots = MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT));

Als Ergebnis kann ich sagen, dass ich es geschafft habe, alles schnell zu reparieren, nur 2 Tage und etwa 10 Versuche

 
Ich werde meine Experimente mit "es gibt keine Handelsoperationen" beschreiben:

1. Nachdem ich den alten EA von Market neu kompiliert und versucht habe, ihn auf die Website hochzuladen, erschien die Fehlermeldung "Es gibt keine Handelsoperationen":
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2. Die Überprüfung der Verfügbarkeit von Kursen für alle TFs hat keinen Fehler ergeben (ich habe die Division durch 0 verwendet).
3. Dann begann ich, das Volumen der Handelsvorgänge zu überprüfen, aber gleichzeitig erhielt ich die Fehlermeldung "Es gibt keine Handelsvorgänge".
4. Dann änderte ich die Anzahl der Lose in allen OrderSend auf SYMBOL_VOLUME_MIN - "es gibt keine Handelsoperationen"
5. Offensichtlich stimmt etwas mit dem Validierungsprüfgerät nicht. Und versucht, die Positionseröffnung in OnInit() hinzuzufügen:
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

und das ist, was ich bekam (übrigens das erste Mal, dass ich es so detailliert im Validator gesehen habe):

 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


Der Fehler "es gibt keine Handelsoperationen" ist hier bereits klar. Wenn wir einen Saldo von 1,00 haben, können wir natürlich keinen Auftrag zu 0,20 (SYMBOL_VOLUME_MIN) eröffnen. Die Saldoprüfung im Code erfüllt ihren Zweck und lässt eine solche Bestellung nicht zu und zeigt im Journal einen Ausdruck über einen unzureichenden Saldo an (er wird nur nicht im Validator angezeigt).

Was meinen Sie, wie gut der Validator funktioniert?


Wir werden warten, bis der Validator repariert ist.

 
Die kostenlose Marge stört mich nicht, denn ich habe genug von Honduras.
 
Алексей Тарабанов #:
Die kostenlose Marge stört mich nicht, ich habe genug von Honduras.

Schwierig? Ich spreche von Ausdruck.

 
Ja, ich spreche von den Testparametern
 
Löschen Sie Ihr Gedächtnis von allen möglichen Dingen.
 

Ich habe das Problem gefunden. Standardmäßig habe ich in den Eingabeparametern ein Limit für die maximale Anzahl von Positionen.

input double MaxLots=0.1;
...
lots = MathMin(lots, MaxLots);

Deshalb war es nicht möglich, Positionen zu eröffnen, wenn SYMBOL_VOLUME_MIN im Validator 0,20 beträgt. Sie können nicht standardmäßig eine so kleine Grenze für die maximale Anzahl von Positionen für den Validator festlegen.