Fragen von einem "Dummy" - Seite 166

 
Alphazavr:

Was ist mit dem Code falsch? Warum erscheint immer wieder die Fehlermeldung"failed cancel order #0 buy 0.00 at market [Invalid request]"?

Wo ist die Positionsauswahl?

Was haben Aufträge mit dem Handel zu tun?

Was wollen Sie tun? Eine Position schließen?


und der Name order_remove_mql_trade_request ist ein schlechter Traum.

 
sergeev:

Wo befindet sich die Positionsauswahl?

Was haben Aufträge mit dem Handel zu tun?

Was wollen Sie eigentlich tun? Eine Position schließen?


und der Name order_remove_mql_trade_request ist ein schlechter Traum.

Ja, das muss ich klarstellen.

Der Zweck des Codes - wenn es eine offene Position gibt, dann stornieren Sie alle Limit-Order der gleichen Richtung wie die Position.

zum Beispiel, wenn eine Position BAY. offen ist, dann stornieren Sie alle Aufträge wie Kauf-Limit

Ich habe vergessen, die Position zu wählen =). Nun, der Fehler liegt nicht daran (überprüft).

 
Alphazavr:

Was ist mit dem Code falsch? Warum erscheint immer wieder die Fehlermeldung"failed cancel order #0 buy 0.00 at market [Invalid request]"?


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


entfernen Sie diese Gleichen.
 
sergeev:
entfernen Sie diese Gleichheitszeichen.
Das habe ich bereits getan, es funktioniert nicht. Ich weiß nicht, wo der Fehler liegt. Außerdem verstehe ich nicht, warum diese Fehler nur bei BAY LIMIT Aufträgen auftreten, bei Sell Limits gibt es keine Fehler.
 
Alphazavr:
Das habe ich bereits getan, es funktioniert nicht.
Es ist nicht gut, die Älteren zu betrügen.
 
sergeev:
Es ist nicht gut, die Älteren zu betrügen.

Es ist nicht gut, zu schummeln, ich tue das nicht.


Ich habe gerade alles mit diesem Code doppelt überprüft:

   i = OrdersTotal();
   if(i > 0){
      PositionSelect(_Symbol);
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


Das Ergebnis ist das gleiche. Der oben erwähnte Fehler tritt häufig auf

 
Alphazavr:

das ergebnis ist das gleiche. der fehler tritt häufig auf

"oft" ist eine leere Phrase.

Du denkst, dass 2+2 oft gleich 4 ist?

Seien Sie nicht faul - machen Sie eine Sendeanalyse und eine Analyse des zurückgegebenen Fehlers.

Prüfen Sie, was Sie entfernen wollen?

Gibt es zum Zeitpunkt der Schließung noch Aufträge?

vielleicht versuchen Sie, einen Auftrag zu löschen, der bereits gelöscht wurde.


Drittens: Wer hat Ihnen beigebracht, Aufträge so zu schließen, dass Sie glauben, alle Aufträge schließen zu können? Sie glauben, dass nach jedem Ihrer Abschlüsse die Auftragssumme um 1 sinkt. Und Sie schlagen immer noch Ihr i2++, bis Sie gewinnen, bis das primäre i.

Sie machen sich nicht einmal die Mühe zu prüfen, ob OrderGetTicket oder OrderSelect einen Fehler zurückgibt

schlecht, sehr schlecht.

Solche Stifte sind der Grund dafür, dass unsere Satelliten aus der Umlaufbahn geraten.

 
sergeev:

"oft" ist eine leere Phrase.

Sie glauben, dass 2+2 oft gleich 4 ist?

Seien Sie nicht faul - führen Sie eine Sende- und Rücksendefehleranalyse durch.

prüfen, was Sie zu löschen versuchen?

Sind zum Zeitpunkt der Schließung noch Aufträge vorhanden?

vielleicht versuchen Sie, einen Auftrag zu löschen, der bereits gelöscht wurde.


Drittens: Wer hat Ihnen beigebracht, Aufträge auf diese Weise zu schließen? Sie denken, dass Sie alle Aufträge weitergeben, aber das tun Sie nicht. Nach jedem Ihrer Abschlüsse verringert sich OrdersTotal um 1. Und Sie schlagen immer noch Ihr i2++, bis Sie gewinnen, bis zum primären i.

Sie machen sich nicht einmal die Mühe zu prüfen, ob OrderGetTicket oder OrderSelect einen Fehler zurückgibt

Das ist schlecht, sehr schlecht.

Solche Stifte sind der Grund dafür, dass unsere Satelliten aus der Umlaufbahn geraten.

Ich war mir sicher, dass das nicht der Fall war, denn sonst hätte es nicht nur Fehler bei den Bylimits, sondern auch bei den Selllimits gegeben. Danke für den Versuch, mir zu helfen und mich anzuleiten.

 

Ich grüße Sie, meine Herren.

Dies ist ein Prototyp einer Windows-Funktion, die einen Tastendruck emuliert:

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

Das Problem ist, dass diese Funktion in MT4 mit int's anstelle von Bytes aufgerufen wird. Es sieht so aus:

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
Was ist das Problem? Werden mindestens 4 Bytes übertragen? Hängt es von der Hardware ab?
 
220Volt:

Ich grüße Sie, meine Herren.

Dies ist ein Prototyp einer Windows-Funktion, die einen Tastendruck emuliert:

Das Problem ist, dass diese Funktion in MT4 mit int's anstelle von Bytes aufgerufen wird. Es sieht so aus:

Was ist das Problem? Werden mindestens 4 Bytes übertragen? Hängt es von der Hardware ab?

Bei der Übergabe von Parametern an eine Funktion ist das Mindestquantum eine 32-Bit-Ganzzahl. Das heißt, bVk und bScan werden in Ihrem Fall in den Typ int konvertiert, bevor sie an die Funktion übergeben werden

Aus diesem Grund widersprechen sich die oben genannten Funktionsprototypen nicht

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5