Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1856

 

Ein Ratschlag. Ich bin mit einer Frage nicht weitergekommen.

Wie zähltiOpen für Ask oder Bid?

double DayOpenone = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 0), Digits);

double DayOpentwo = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 1), Digits); 

Das Problem ist, dass der Vergleich des Eröffnungskurses von heute mit dem Eröffnungskurs von gestern zu einer Spread-Kolokation zu führen scheint, und dann gibt es weitere Probleme im Code: Entweder werden nur Käufe oder Verkäufe gehandelt, weil die iOpen-Kurse an manchen Tagen nicht korrekt sind.

 
Порт-моне тв iOpen für Ask oder Bid?

Das Problem ist, dass der Vergleich des heutigen Eröffnungskurses mit dem gestrigen Eröffnungskurs zu einer Spread-Kolokation zu führen scheint und ich dann Probleme im Code bekomme. Ich kann entweder nur Gebote oder nur Verkäufe handeln, da die iOpen-Kurse an manchen Tagen nicht korrekt sind.

Das Diagramm basiert auf dem Geldkurs

 

Leute, bitte um Rat.

Ich schreibe einen Multi-Währungs-EA, alles funktioniert wie geplant, außer für die Eröffnung von Aufträgen. Bitte sagen Sie mir, was das Problem ist.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Ich erhalte keine Fehlermeldungen, ich kann nur keine Aufträge öffnen

 
Sergey Dymov einen Multi-Währungs-EA, alles funktioniert wie geplant, außer für die Eröffnung von Aufträgen. Bitte sagen Sie mir, was das Problem ist.

Ich erhalte keine Fehlermeldung, es werden nur keine Aufträge geöffnet.

BestellungSenden

Zurückgegebener Wert

Gibt die Ticketnummer zurück, die dem Auftrag vom Handelsserver zugewiesen wurde, oder -1 im Falle eines Fehlschlags. Um Fehlerinformationen zuerhalten , müssen Sie GetLastError() aufrufen.

Selbst der Compiler sagt Ihnen, dass Ordersend überprüft werden sollte.

Der Kauf wird mit Ask getätigt. Es kann aber auch mit Bid funktionieren, wenn der Schlupf mindestens so groß ist wie der Spread, was die Suche nach diesem Fehler erschweren könnte.

 

einen Multicurrency-EA und alles funktioniert wie geplant, außer bei der Eröffnung von Aufträgen. Ich bin auf der Suche nach Fehlermeldungen.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Es wird keine Fehlermeldung ausgegeben, es wird nur keine Bestellung geöffnet.

Haben Sie bemerkt, wo der Fehler liegt?

       if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         int nDigits = (int)MarketInfo("USDJPY", MODE_DIGITS);
         OrderSend("USDJPY", OP_SELL, 0.1, NormalizeDouble(Bid1, nDigits), 3, NormalizeDouble((Ask1-StopLoss*Point1), nDigits), NormalizeDouble((Ask1+TakeProfit*Point1), nDigits), NULL, magic, 0, 0);
        }

https://docs.mql4.com/ru/trading/ordersend

Примечание

Bei der Eröffnung einer Marktorder (OP_SELL oder OP_BUY) kann nur der letzte Geldkurs (für den Verkauf) oder Briefkurs (für den Kauf) als Eröffnungskurs verwendet werden. Wenn die Operation für ein anderes Finanzinstrument als das aktuelle durchgeführt wird, sollte man die FunktionMarketInfo() mit dem Parameter MODE_BID oder MODE_ASK verwenden, um die neuesten Kurse für dieses Instrument zu erhalten.

Sie können keinen geschätzten oder nicht-normalisierten Preis verwenden. Wenn der angeforderte Eröffnungskurs nicht im Preisfluss enthalten ist oder der angeforderte Preis nicht nach der Anzahl der Dezimalstellen normalisiert ist, wird der Fehler 129 (ERR_INVALID_PRICE) erzeugt. Wenn der angeforderte Eröffnungskurs stark veraltet ist, wird unabhängig vom Wert des Slippage-Parameters ein Fehler 138 (ERR_REQUOTE) erzeugt. Ist der angefragte Preis hingegen veraltet, aber noch im Preisfluss vorhanden, wird der Auftrag zum aktuellen Preis eröffnet, und zwar nur dann, wenn der aktuelle Preis innerhalb der Preisspanne+Slippage liegt.

...

Es ist auch wünschenswert, einen einzigartigen Zauber für den Roboter festzulegen.

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
Mihail Matkovskij #:

der Eröffnungskurs nicht im Preisfluss enthalten war oder der angeforderte Preisnicht nach derAnzahl der Nachkommastellennormalisiert ist, dann

.

Soviel ich weiß, sind Ask und Bid bereits normalisiert. Eine ähnliche Frage wurde bereits gestellt, und es wurde kein Widerspruch erhoben.

Die Magie und die Ziffern von Stoploss und Profit mögen angemessen sein, aber die Absicht des Autors ist nicht bekannt.

 
Andrey Sokolov #:

Soviel ich weiß, sind Ask und Bid bereits normalisiert. Eine ähnliche Frage wurde bereits gestellt, und es wurde kein Widerspruch erhoben.

Vielleicht ist es angebracht, die Magie und die Ziffern von Stop-Loss und Gewinn zu erwähnen, aber ich weiß nicht, was die Idee des Autors war.

Soweit ich weiß, wird in der Dokumentation kein Wort darüber verloren. Sie sollten also besser Vorkehrungen treffen. Es wird es nicht schlimmer machen.

Die SL und TP werden berechnet. Daher sollten sie auf jeden Fall auf den Ziffernwert normiert werden.

 

Hallo Freunde.

 
Können Sie mir sagen, ob der blau eingekreiste Gewinn in der Geschichte Provisionen und Swaps beinhaltet?
 

Guten Tag.

Wie erhalte ich die Eröffnungszeit des zweiten und der nachfolgenden Aufträge, da OpenOrderTime() nur den ersten ausgibt, und wie erhalte ich den Eröffnungspreis des zweiten und der nachfolgenden Aufträge, da das Analogon OpenOrderPrice() auch den Preis des ersten ausgibt?