Fehler, Irrtümer, Fragen - Seite 2410

 
Vladimir Karputov:

Nuh-uh :)

GUT. Klären Sie uns auf. Welcher Fehler im Code, oder welcher Code, kann eine Position im Tester zum Preis eines anderen Instruments schließen. Ich bin sehr, sehr interessiert.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Sergan:

Der Code umfasst mehrere tausend Zeilen. Es hat keinen Sinn, sie anzuhängen. Es gibt keine statischen Variablen. Es gibt Klassen. In jedem Fall ist es ein Fehler des Prüfers.

Hier liegt Ihr Fehler.

Führen Sie im Debug-Modus eine Prüfung durch, bevor Sie einen Handelsauftrag senden. Sehen Sie sich das Symbol und die Preise an. Und testen Sie zumindest im Modus "Alle Zecken".

 
Andrey Barinov:

GUT. Klären Sie uns auf. Welcher Fehler im Code, oder welcher Code, könnte eine Position im Tester zum Preis eines anderen Instruments schließen. Ich bin wirklich sehr, sehr neugierig.

Ganz einfach. Sie hängt direkt von der Sklaventreue des Codes ab. Ich habe es selbst gemacht :). Unzureichend durchdachtes System zur Kontrolle der Initialisierung von Zeichenklassen. Außerdem gibt es statische Variablen.

Wie auch immer, es ist sinnlos, ohne den von der Person, nach der Sie fragen, geschriebenen Code weiter zu sprechen.

 
Vladimir Karputov:

Ganz einfach. Es besteht ein direkter Zusammenhang mit der Krümmung des Codes. Ich habe es selbst getan :). Unzureichend ausgearbeitetes Kontrollsystem für die Initialisierung von Zeichenklassen. Außerdem gibt es statische Variablen.

Es ist also sinnlos, sich weiter zu äußern, ohne Sie nach dem Code zu fragen.

Können Sie uns ein Beispiel für den Code zeigen? Wie schließe ich eine Position in EURUSD zum GPBUSD-Kurs?

Wenn ja, dann ist das kein Problem für Sie. Dafür wäre ich sehr dankbar.

 
Andrey Barinov:

Können Sie mir einen Beispielcode zeigen? Wie kann ich eine EURUSD-Position zum GPBUSD-Kurs schließen?

Wenn ja, wäre das kein Problem für Sie. Ich werde sehr dankbar sein.

Forum für Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Vladimir Karputov, 2019.03.24 05:58

Es ist ganz einfach. Die Abhängigkeit der Krümmung des Codes. Ich habe selbst solche Fehler gemacht :). Unzureichend durchdachtes System zur Kontrolle der Initialisierung von Zeichenklassen. Dazu kommen statische Variablen.

Wie auch immer, es ist sinnlos, ohne den von der Person, nach der Sie fragen, geschriebenen Code weiter zu sprechen.


 
So cool können die Tester Graals sein, keine Trailing Pips mehr, cool)
 

Im Debugging- und Visualisierungsmodus liegt kein Fehler vor. Die Position wird nicht durch einen Handelsauftrag, sondern durch einen Stop-Loss geschlossen:



Möglicherweise ein logischer Fehler im Code, höchstwahrscheinlich hier, ich werde es mir ansehen, weiß natürlich noch nicht wie - kein Fehler im Debug-Modus:



Es gelingt ihm, einen Stop für einen Auftrag bei 1,60704 zu setzen, 3000 Punkte über dem aktuellen Preis der Position.

In diesem Fall hätte der Prüfer die Einstellung des Stopps verbieten müssen.

 

Hier sehe ich mir das Protokoll an:

der Auftrag zur Änderung des Stopps wird für gpbusd, die hervorgehobene Zeile, gesendet, wird aber tatsächlich für eurusd- als nächstes ausgeführt.


Hier ist der Code zum Setzen des Stopps


bool MyOrderSend( MqlTradeRequest &req, MqlTradeResult &res ){

  
  //Print("Попытка выполнения OrderSend ... ");
  Print("Try to execute OrderSend ... for ", req.symbol );
  ResetLastError();
  if (OrderSend( req, res  )){
    if( res.retcode != TRADE_RETCODE_DONE ){
      //Print("Ошибка обработки торгового запроса,код ответа сервера: ", res.retcode, "Описание:", TradeServerReturnCodeDescription(res.retcode) );
      Print("Error of trade requaest: ", res.retcode, "Description:", TradeServerReturnCodeDescription(res.retcode) );
      Print(STradeRequest(req) );
      return(false);
    }else{
      //Print("Успех, код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print("Success, return code is : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print(STradeRequest(req) );
    }
    return(true);
  }else{
    //Print("Ошибка выполнения OrderSend в ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    Print("Error of execution OrderSend in ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    //Print("Код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print("Server return code : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print(STradeRequest(req) ); 
    return(false);
  }
  return(true);
}


wobei


OrderSend( req, res  )

native mql-Funktion, nicht überladen.

z.B. hier

 Print("Try to execute OrderSend ... for ", req.symbol );


er sagt, dass er einen Stopp für gbpusd setzt, und das sollte auch so sein, aber in Wirklichkeit


OrderSend( req, res  )


setzt es für eurusd

 
Aleksey Sergan:

Hier sehe ich mir das Protokoll an:

Der Auftrag zur Änderung des Stopps wird für gpbusd, die hervorgehobene Zeile, gesendet, aber tatsächlich für eurusd - die nächste Zeile - ausgeführt.

Es gibt 2 Fehler.

№1. Ihr Fehler. Irgendwo im Code. Sie setzen SL für eine EURUSD-Position anhand des GBPUSD-Kurses. Das Terminal sollte nichts dagegen haben.

№2. Fehler im Terminal. Wenn dieser SL zu einem Preis ausgelöst wird, den es zu diesem Zeitpunkt im EURUSD-Fluss nicht gibt, wird der GBPUSD-Preis verwendet.

 
Aleksey Sergan:

Hier sehe ich mir das Protokoll an:

der Auftrag zur Änderung des Stopps wird für gpbusd, die hervorgehobene Zeile, gesendet, wird aber tatsächlich für eurusd- als nächstes ausgeführt.


Hier ist der Code zum Setzen des Stopps



wobei


native mql-Funktion, nicht überladen.

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Beim Senden einer Änderungsanfrage hat das Positionsfeld offenbar Vorrang vor dem Symbol.Anfrageposition drucken

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Взаимодействие клиентского терминала и торгового сервера для проведения операций постановки ордеров производится посредством торговых запросов. Запрос представлен специальной предопределенной структурой MqlTradeRequest, которая содержит все поля, необходимые для заключения торговых сделок. Результат обработки запроса представлен структурой...