Überprüfung des Mindeststopps in den auf dem Marktplatz veröffentlichten EAs. - Seite 17

 
Vladislav Andruschenko:

Mein Expert Advisor fängt Min-Bewegungen ab, also schlägt er den Server, aber nicht mit 1 Pip Stoploss, sondern mit einem normalen Min-Level + Spread, aber der Spread ist fließend. Deshalb hämmert EA so lange auf den Server ein, bis er wieder eine normale Streuung aufweist.

Mit anderen Worten, beim Öffnen der Datei wird geprüft, ob ein Minimalstopp vorliegt - die Werte werden neu aufgebaut - und dann wird auf den Server zugegriffen. Aber wenn Sie einen 10-Pips-Stopp setzen wollen, müssen Sie auf den Min-Spread warten und den Server anwerfen.

Es ist keine gute Idee, den Server zu stören. Es kann sein, dass Sie auf ein Verbot des Autotradings stoßen. (Wer möchte sich schon mit DDOS-Angriffen auf den Server durch seinen EA auseinandersetzen?)

Bevor wir eine Anfrage senden, müssen wir zunächst den Spread und das Stop-Level ermitteln, die Stops anpassen und, wenn der Stop für den Handel akzeptabel ist, eine Anfrage senden. Wenn die Größe der Haltestelle nicht akzeptabel ist, brauchen Sie niemanden zu belästigen. Wenn mein Server so zusammengeschlagen worden wäre, hätte ich ihn getötet...

Wenn jedoch nach dem Senden einer Anforderung mit einer akzeptablen Haltestellengröße erneut der Fehler 130 auftritt (die Bedingungen für die Nivellierung der Haltestelle haben sich während des Sendens der Anforderung geändert), dann können wir die Haltestellengröße anpassen und die Anforderung (mit einer akzeptablen Größe der neu berechneten Haltestelle) senden. Die Anzahl solcher Anfragen sollte begrenzt werden, sonst wird es ein weiteres dummes Geplapper.

Jetzt verstehe ich, warum Sie den Markt nicht betreten dürfen.

 

ist die Situation hier etwas anders,

Ich will nicht die ganze Zeit meißeln.

Natürlich gibt es nach dem Fehler eine Fehlerprüfung - Slip. aber die funktioniert im Tester nicht.

Es geht um die schwimmende Verbreitung.

wie ich oben geschrieben habe - vor dem Senden einer Anfrage - werden die Stop-Levels korrigiert und an den Server gesendet, - der Server gibt einen Fehler 130 zurück - Expert Advisor korrigiert die Levels erneut und sendet sie erneut an den Server.

und so weiter.

Der Schlupf funktioniert im Prüfgerät nicht, deshalb gibt es keine Verzögerung.

Im Moment habe ich das Problem folgendermaßen gelöst: Der Stopp sollte nicht niedriger sein als das Stopp-Niveau auf dem Server + Spread + 1.

Was soll ich tun, wenn der Server den Stopp-Level als 0 zurückgibt, d.h. wenn der Wert schwebend ist?

Option - Anpassung durch Fehler 130 - keine Option - der Moderator lässt diese Methode nicht zu.

Wie bereits vorgeschlagen = Fehler 130 - um 1 erhöhen und so weiter, bis der Server kein Geschäft mehr verpasst. - nicht in Frage.

Freunde, vielen Dank für die Hilfe bei der Lösung des Problems. Aber ich werde nach einer rationalen Lösung für dieses Problem suchen.

Ich danke Ihnen allen für Ihre Teilnahme.

 
Vladislav Andruschenko:

ist die Situation hier etwas anders,

Ich will nicht die ganze Zeit meißeln.

Natürlich gibt es nach dem Fehler eine Fehlerprüfung - Slip. aber die funktioniert im Tester nicht.

Es geht um die schwimmende Verbreitung.

wie ich oben geschrieben habe - vor dem Senden einer Anfrage - werden die Stop-Levels korrigiert und an den Server gesendet, - der Server gibt einen Fehler 130 zurück - Expert Advisor korrigiert die Levels erneut und sendet sie erneut an den Server.

und so weiter.

Der Schlupf funktioniert im Prüfgerät nicht, deshalb gibt es keine Verzögerung.

Im Moment habe ich das Problem so gelöst: Der Stopp sollte nicht niedriger sein als der Stopplevel auf dem Server + Spread + 1.

Was soll ich tun, wenn der Server den Stopp-Level als 0 zurückgibt, d.h. wenn der Wert schwebend ist?

Option - Anpassung durch Fehler 130 - keine Option - der Moderator lässt diese Methode nicht zu.

Wie bereits vorgeschlagen = Fehler 130 - um 1 erhöhen und so weiter, bis der Server kein Geschäft mehr verpasst. - nicht in Frage.

Freunde, vielen Dank für die Hilfe bei der Lösung des Problems. Aber ich werde nach einer rationalen Lösung für dieses Problem suchen.

Ich danke Ihnen allen für Ihre Teilnahme.

Im Prinzip ist es möglich, den Benutzer zu zwingen, den Multiplikationsfaktor für die Streuung manuell einzugeben, wenn stoplevel==0 ist. D.h. bei der Initialisierung (nicht beim Wechsel des Zeitrahmens) wird das Niveau überprüft und, wenn es Null ist, eine Aufforderung zur Eingabe des Koeffizienten angezeigt. Verweigert der Benutzer die Eingabe, so ist der Koeffizient zu verwenden. 2 (Spanne*2) und erhöhen dann entweder den Koeffizienten oder die Stoppgröße im Falle eines Fehlers 130. Wenn ein Benutzer weiß, wie die Stopp-Stufe berechnet wird (fragen Sie z. B. den technischen Kundendienst), dann verwenden Sie den vom Benutzer eingegebenen Koeffizienten, aber vergessen Sie nicht, auf einen 130-ten Fehler mit einer Erhöhung der Stopp-Größe zu reagieren (falls er immer noch auftritt). Aber in der Regel (ich habe es mehrmals erlebt und empirisch gelernt), wenn Sie stop=stopplavel*coefficient+1 verwenden, wird kein Fehler auftreten. Wenn Sie nicht 1 Punkt hinzufügen, erscheinen Fehler.

Prüfen Sie daher auf dem MC-Server, wie er die Höhe des Niveaus berechnet und geben Sie den erforderlichen Koeffizienten in den EA ein. Auch wenn der Moderator sich weigert, den Koeffizienten manuell einzutragen, wird er automatisch eingetragen.

 

Danke, das ist die Standardeinstellung von 2 +1 Punkten.

Es ist eine gute Idee, ihn zu fragen. Ich werde ein Formular erstellen und ihn es selbst eingeben lassen.

 

Manchmal verbietet der Broker den Autotrading für ein paar Minuten, wenn etwa 20 Befehle ohne Pause gesendet werden.
Mit anderen Worten: Sie sollten eine Reihe von Aufträgen mit einer Pause von mindestens 300-500 ms zwischen den Aufträgen ändern/abschließen. (Aber der Fehler ist nicht mehr 130)

 
MqlTick MS_MqlTick;

enum EnumStopLevel
  {
   a0 = 0, // Real StopLevel
   a1 = 1, // StopLevel correction spread
   a2 = 2, // StopLevel correction 2*spread
   a3 = 3, // StopLevel correction 3*spread
   a4 = 4, // StopLevel correction 4*spread      
   a5 = 5, // StopLevel correction 5*spread         
  };
input EnumStopLevel Mode_StopLevel = 0;


//========================================== StopLevFun
double StopLevFun(int Mode_StopLevelF)
{
   double StopLL = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) * _Point;
 
   if(MQLInfoInteger(MQL_TESTER) && Mode_StopLevelF < 3) Mode_StopLevelF = 3; ///////////////////////// Это для тестера при модерации
 
   switch(Mode_StopLevelF)
   {
      case 0: break;
      case 1: While_SymbolInfoTick(_Symbol); StopLL = MathMax(MS_MqlTick.ask - MS_MqlTick.bid, StopLL); break;
      case 2: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 2, StopLL); break;
      case 3: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 3, StopLL); break;
      case 4: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 4, StopLL); break;
      case 5: While_SymbolInfoTick(_Symbol); StopLL = MathMax((MS_MqlTick.ask - MS_MqlTick.bid) * 5, StopLL); break;
   }
 
   return(NormalizeDouble(StopLL, _Digits) );   
}


//=========================================== While SymbolinfoTick
bool While_SymbolInfoTick(string Fsymbol)
{
   int WhTi = 0;
   
   while(!SymbolInfoTick(Fsymbol, MS_MqlTick) ) 
   {
      if(WhTi % 10 == 0) Print(Fsymbol, " >> SymbolInfoTick(Fsymbol, MS_MqlTick)= false     Try= ", WhTi);
      
      WhTi++;
      
      if(WhTi > 100) return(false);
      
      Sleep(10);
   }
   
   return(true);
}
А если вот такой вариант.
Если реал или демо, то по умолчанию выбирается вариант 0 Mode_StopLevelF, и в этом случае возвращается реальный стоплевел.
Но можно выбрать и коррекцию стоплевела спредом, с разным коэффициентом. При этом если стоплевел будет больше чем спред, то будет учитываться стоплевел.
А для тестера, при модерации, выбирается всегда режим не ниже 3 Mode_StopLevelF, в этом случае стоплевел будет больше спреда в 3 раза и больше.
П.С. Как пишет разработчик SymbolInfoTick  предпочтительнее чем SymbolInfoDouble для Ask и Bid.
https://www.mql5.com/ru/docs/marketinformation/symbolinfodouble
 
Vladislav Andruschenko:

Hallo, Freunde!

Es gibt eine Besonderheit bei Marketplace: Wir müssen alle Werte für min stop überprüfen.

Wenn der Wert der Variablen kleiner ist als der Min-Stopp, dann weisen Sie einen Min-Stopp zu, damit kein Fehler 130 auftritt.

Gegenwärtig haben 90 % der Broker einen variablen Spread und einen Mindest-STOP sowie eine Rendite von 0.

Es gibt ein Code-Konstrukt, das alle Variablen dem Min-Stop zuweist.

Aber das funktioniert auf dem Marktplatz nicht mehr, weil minstop = 0 überall jetzt,

Wer befasst sich mit diesem Problem?

Hallo Vladislav, lesen Sie das Problem, das ich auch begegnet und beschlossen, wenn die gleitende Stop-Level einen Wert von 0 oder nahe Null zurück, dann verwenden Sie Reverse-Signale zu schließen.

Glauben Sie, dass diese Lösung in Ordnung ist?

 
Hallo, ist das Schlusssignal umgekehrt, im Sinne von virtuellen Stopps?
 
Ja, aber ich habe eine bessere Idee, also werde ich das tun. Wenn z.B. die automatische Berechnung der Stop-Levels durch die ATR Null oder nahe Null ergeben hat, was weniger als der Wert des durchschnittlichen Spreads ist, dann verwenden wir die vorherigen Daten, bis die neuen Daten bei der Eröffnung der nächsten Order erscheinen. Dies ist besser als umgekehrte Signale.
 
Wenn Sie das System - dann ist es OK, aber die Frage war über die Überprüfung auf dem Marktplatz, leider Fehler 130 verhindert, dass das Produkt weiter gehen
Grund der Beschwerde: