Wenn der Expert Advisor die Tests im Terminal bestanden hat und Trades eröffnet, dann schreibt er in der automatischen Prüfung einen Fehler, dass keine Trades eröffnet wurden (Paar und TF sind gleich), bzw. er besteht die "Automatische Prüfung" nicht
Ist es möglich, dass MetaQuotes eine Vorlage für Entwickler erstellt? Das würde es den Entwicklern leichter machen und MetaQuotes außerdem eine Menge Geld und Ressourcen für die Überprüfung eingereichter EAs sparen.
Die Vorlage für Entwickler befindet sich in der Codebasis
Das ist ein interessanter Artikel, leider gibt es zu viele Fehler (Tippfehler oder sogar logische Fehler im vorgeschlagenen Code), und es wird wahrscheinlich mehr Leute verwirren als ihnen an einigen Stellen helfen.
1°
1°
//+------------------------------------------------------------------+//| Rückgabe des maximal erlaubten Volumens für eine Order auf das Symbol |//+------------------------------------------------------------------+double NewOrderAllowedVolume(string symbol)
{
double allowed_volume=0;
//--- die Begrenzung des maximalen Auftragsvolumensdouble symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- die Begrenzung des Volumens durch ein Symbol erhaltendouble max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);
//--- Ermitteln des Volumens der offenen Position für ein Symboldouble opened_volume=PositionVolume(symbol);
if(opened_volume>=0) There is no opened positions
{
//--- wenn wir das Volumen ausgeschöpft habenif(max_volume-opened_volume<=0)
return(0);
//--- das Volumen der offenen Position übersteigt nicht max_volumedoubleorders_volume_on_symbol=PendingsVolume(symbol);
allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
}
return(allowed_volume);
}
Logischer Fehler. Wenn es noch keine Position gibt, muss man immer noch das anhängige Volumen prüfen und das erlaubte Volumen berechnen. Dieser Code gibt allowed_volume=0 zurück, wenn noch keine Position geöffnet ist, ohne die Pendings zu berücksichtigen.
+ fehlender Parameter (PrintFormat hat für %, aber nur 3 Parameter sind vorgesehen).
Dankeschön! Behoben
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- Bestellung nach Ticket auswählenif(orderinfo.Select(ticket))
{
//--- Punktgröße und Name des Symbols, für das ein schwebender Auftrag erteilt wurdestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- prüfen, ob es Änderungen im offenen Preis gibtbool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- prüfen, ob es Änderungen in der StopLoss-Ebene gibtbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
//--- prüfen, ob es Änderungen in der Takeprofit-Stufe gibtbool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);
//--- wenn es Änderungen in den Ebenen gibtif(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
return(true); // Reihenfolge kann geändert werden //--- es gibt keine Änderungen in den Ebenen Open, StopLoss und Takeprofitelse//--- Benachrichtigung über den FehlerPrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f",
ticket,orderinfo.PriceOpen(),orderinfo.StopLoss(),orderinfo.TakeProfit());
}
//--- zum Ende gekommen, keine Änderungen für den Auftragreturn(false); // Änderungen sind sinnlos
}
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- Bestellung nach Ticket auswählenif(orderinfo.Select(ticket))
{
//--- Punktgröße und Name des Symbols, für das ein schwebender Auftrag erteilt wurdestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- prüfen, ob es Änderungen im offenen Preis gibtbool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- prüfen, ob es Änderungen in der StopLoss-Ebene gibtbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
Ein anderer logischer Fehler. Das Ändern eines SL/TP um 1 Punkt ist erlaubt. Es sollte >= sein.
Soweit ich mich erinnere, verwenden wir diese Praxis nur, um keine Ablehnung vom Handelsserver zu erhalten, weil sich der Preis während der Zeit, in der unsere Handelsanfrage den Server erreicht, ändert.
bool OrderModifyCheck(ulong ticket,double price,double sl,double tp)
{
//--- Bestellung nach Ticket auswählenif(orderinfo.Select(ticket))
{
//--- Punktgröße und Name des Symbols, für das ein schwebender Auftrag erteilt wurdestring symbol=orderinfo.Symbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- prüfen, ob es Änderungen im offenen Preis gibtbool PriceOpenChanged=(MathAbs(orderinfo.PriceOpen()-price)>point);
//--- prüfen, ob es Änderungen in der StopLoss-Ebene gibtbool StopLossChanged=(MathAbs(orderinfo.StopLoss()-sl)>point);
//--- prüfen, ob es Änderungen in der Takeprofit-Stufe gibtbool TakeProfitChanged=(MathAbs(orderinfo.TakeProfit()-sl)>tp);
//--- wenn es Änderungen in den Ebenen gibtif(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
Ich meine, um es als ein Panel zu machen? und überprüfen Sie es auf diese Weise? oder wie?
öffnen Sie einfach jeden Handel manuell im Moment und diese EA ist auf dem Chart, um das Ticket der offenen Bestellung angehängt.
ok
Wenn SIE das Dienstprogramm selbst geschrieben haben, können SIE einen Handel im Tester in INIT öffnen und der Assistent wird ihn verwalten.
Wenn der Expert Advisor die Tests im Terminal bestanden hat und Trades eröffnet, dann schreibt er in der automatischen Prüfung einen Fehler, dass keine Trades eröffnet wurden (Paar und TF sind gleich), bzw. er besteht die "Automatische Prüfung" nicht
Zufall? Das glaube ich nicht!
Was ist zu tun?
Ist es möglich, dass MetaQuotes eine Vorlage für Entwickler erstellt? Das würde es den Entwicklern leichter machen und MetaQuotes außerdem eine Menge Geld und Ressourcen für die Überprüfung eingereichter EAs sparen.
Die Vorlage für Entwickler befindet sich in der Codebasis
https://www.mql5.com/de/code/mt4/experts/best
Das ist ein interessanter Artikel, leider gibt es zu viele Fehler (Tippfehler oder sogar logische Fehler im vorgeschlagenen Code), und es wird wahrscheinlich mehr Leute verwirren als ihnen an einigen Stellen helfen.
1°
1°
Logischer Fehler. Wenn es noch keine Position gibt, muss man immer noch das anhängige Volumen prüfen und das erlaubte Volumen berechnen. Dieser Code gibt allowed_volume=0 zurück, wenn noch keine Position geöffnet ist, ohne die Pendings zu berücksichtigen.
2°
+ fehlender Parameter (PrintFormat hat für %, aber nur 3 Parameter sind vorgesehen).
Dankeschön! Behoben
3°
Ähnlicher Fehler wie Punkt 2° oben.
Und gleiche Fehler auch in OrderModifyCheck() mql4 Version.
Alles behoben, vielen Dank!
2°
Ein anderer logischer Fehler. Das Ändern eines SL/TP um 1 Punkt ist erlaubt. Es sollte >= sein.
Soweit ich mich erinnere, verwenden wir diese Praxis nur, um keine Ablehnung vom Handelsserver zu erhalten, weil sich der Preis während der Zeit, in der unsere Handelsanfrage den Server erreicht, ändert.
Es ist einfach ein sicherer Ansatz.
2°
+ Tippfehler, sollte "-tp)>=Punkt);" sein
//--