Fehler, Irrtümer, Fragen - Seite 606

 
uncleVic:
Es ist nicht wirklich klar, warum? Denn wenn Ihr Programm ein Objekt gelöscht hat, weiß es darüber Bescheid. Wenn das Objekt jedoch gelöscht wird und das Programm davon "nichts weiß", ist das Terminal dafür verantwortlich.

so einfach ist es nicht (schade, dass es aus dem Service Desk verschwunden ist, ich werde versuchen, das Problem noch einmal zu erklären).

Wir müssen den Fall behandeln, dass ein Benutzer versehentlich ein Objekt aus dem Diagramm löscht. Aber dieses Objekt sollte nicht gelöscht werden. Zum Beispiel ist es das Substrat einer Liste oder eines Dropdown-Menüs.

So in der OnChartEvent-Code muss ich dieses Ereignis zu behandeln und das Steuerelement neu zu zeichnen.

Ich muss also alle anderen Objekte in diesem Steuerelement löschen. Ich denke, ich brauche nicht zu erklären, warum ich alle oberen Objekte dieses Steuerelements löschen sollte.

Es stellt sich also heraus, dass unser Algorithmus bei der Verarbeitung dieses Ereignisses in eine tiefe Schleife gerät. Das Skript löscht Objekte und erhält das Ereignis, dass die Objekte gelöscht wurden, und es bedeutet, dass dieses Ereignis erneut verarbeitet werden muss - entfernen und rendern... Kurz gesagt, ein algorithmisches Chaos.

Ich weiß nicht, wie man das im aktuellen CHARTEVENT-Set beheben kann. Deshalb schlage ich vor, dass das Skript versteht, von wem es entfernt wurde - vom Terminal (vom schlauen Benutzer) oder vom Skript selbst (vom selben Programmierer).

Früher oder später werden Sie selbst damit zu tun haben, wenn Sie anfangen, aktiv mit Kontrollen zu arbeiten.

 
sergeev:

so einfach ist das nicht (schade, dass es vom Service Desk verschwunden ist, ich werde versuchen, das Problem wieder zu finden).

Ich weiß nicht, wie ich diese Situation mit dem aktuellen CHARTEVENT-Set lösen kann. Deshalb schlage ich vor, dass das Skript verstehen sollte, wer es gelöscht hat - per Terminal (durch einen schlauen Benutzer) oder durch das Skript selbst (durch denselben Programmierer).

Damit werden Sie früher oder später konfrontiert, wenn Sie anfangen, aktiv mit den Kontrollen zu arbeiten.

Ich habe es selbst erlebt. In einer der ersten Versionen der Art Library (in Bezug auf die Steuerelemente) war dieser Mechanismus implementiert, aber aus bestimmten Gründen wurde er entfernt (ich plane, ihn später wiederherzustellen).

Daran ist nichts Cleveres. Jeder Controller sollte in der Lage sein, sich selbst wiederherzustellen. Wenn das Substrat gelöscht wird, wird alles, was darauf liegt, entfernt. Die Wiederherstellung erfolgt durch Ereignisse.

 
uncleVic:


Daran ist nichts Cleveres. Jeder Controller muss in der Lage sein, sich selbst zu reparieren. Wenn das Substrat gelöscht wird, wird alles auf ihm gelöscht. Dann erfolgt die Wiederherstellung durch Ereignisse.

Nun, das ist es, was ich meine: Wenn ein Löschereignis eintrifft, stellt sich das Steuerelement selbst wieder her.

Sobald sich die Steuerung jedoch selbst wiederherstellt (obere Objekte löscht), beginnt sie erneut, Ereignisse zu löschen.

Wie auch immer, warum mache ich mir die Mühe, das Offensichtliche noch einmal zu beweisen :)) Als Ihr Unternehmen ein Mausbewegungsereignis für die Entwicklung der Standardbibliothek benötigte, fügten sie es spontan und ohne unnötige Fragen hinzu. Die Praxis der doppelten Standards stellt sich heraus....
Aber ich denke, wenn derselbe Vorschlag von einem Benutzer an den Servicedesk geschickt würde, würden sie ihn einen weiteren Monat lang schleppen, um herauszufinden, warum sie ihn brauchen.

Glauben Sie mir, Sie brauchen es! Ich habe bereits im Service Desk geschrieben, dass wir nicht versuchen, für MT5 und MQL5 zu werben, aber wir tun es zu unserem eigenen Vorteil.

Wir gehen aufrichtig alle Wege, um schnelle und kompakte Lösungen für unsere Aufgaben in MQL zu finden. Wenn wir auf ein Hindernis stoßen, schreiben wir immer an den Service Desk. Aber wir stoßen dort nicht immer auf Verständnis.

Wie ich bereits oben schrieb, bin ich sehr froh, dass Sie die Kontrollbibliothek selbst erstellen. Sie können zumindest einen kleinen Einblick in all unsere Probleme bekommen, die ohne Ihr Verständnis gelöst werden müssen.

PS.
Victor, entschuldige, das ist so schwerwiegend, dass es einfach nur nervig ist.
Ich möchte Ihr Unternehmen nur bitten, auf die Wünsche der MQL-Programmierer einzugehen. Schließlich lösen wir in MQL viel mehr verschiedene Aufgaben, als Sie sich vorstellen können. Manchmal möchte ich im Service Desk einfach nur die Antwort hören: Ja, wir werden es im nächsten Build machen.

Ich danke Ihnen für Ihr Verständnis.

 

sergeev:

... als Ihr Unternehmen ein Mausbewegungsereignis benötigte ...

Wenn Sie wüssten, wie oft ich mir wegen "erwachsener" Programmierer die Fäuste brechen musste, um das zu tun...
 
Auf die Gefahr hin, unoriginell zu klingen, aber dennoch... Meine Damen und Herren - wann wird der Markt eröffnet? Kennt jemand zumindest einen groben Zeitplan?
 
uncleVic:
Wenn Sie wüssten, wie sehr ich mir wegen "erwachsener" Programmierer die Fäuste brechen musste, um das zu tun...
Victor, du und ich sitzen im selben Boot :)) lass uns zusammensein.
 

Ich versuche, eine Long-Position auf der Grundlage des Skripts für ein Symbol zu eröffnen, bei dem eine Börsenausführung implementiert ist ( SYMBOL_TRADE_EXECUTION_EXCHANGE, Börsenausführung).

#include <Trade\Trade.mqh>                   
input double InpLots          =0.1;  
input int    InpTakeProfit    =500;
input int    InpSL            =300;
CTrade       myTrade;

void OnStart()
  {   
   double price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double tp=SymbolInfoDouble(_Symbol,SYMBOL_BID)+InpTakeProfit*_Point;
   double sl=SymbolInfoDouble(_Symbol,SYMBOL_BID)-InpSL*_Point;
   myTrade.SetTypeFilling(ORDER_FILLING_IOC);
   myTrade.PositionOpen(_Symbol,ORDER_TYPE_BUY,InpLots,price,0,0,"Test Buy");
   Sleep(500); // интервал задержки
   myTrade.PositionModify(_Symbol,sl,tp);
  }

Ich erhalte eine Fehlermeldung:

  • Börse kaufen 0,10 EURUSD.e zu 0,00000;
  • failed exchange buy 0.10 EURUSD.e at 0.00000 [Invalid stops].

Das heißt, das Terminal sieht nicht den Preis, zu dem ich kaufen möchte. Ich habe verschiedene Preise ausprobiert, aber immer noch 0,00000 erhalten.

Ich habe ein ähnliches Skript im MT4 mit den gleichen Börsenbedingungen ausprobiert, es hat dort funktioniert... Nicht im MT5...

Bitte weisen Sie auf den Fehler hin.

 
denkir:
  • failed exchange buy 0.10 EURUSD.e at 0.00000 [Invalid stops].

Dies ist eine Server-Nachricht, keine Terminal-Nachricht. Mehr habe ich zu diesem Thema nicht zu sagen.

Stellen Sie eine Anfrage an den Service Desk.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
papaklass:

Warum tritt ein Array-Überlauffehler auf?

Nun, normalerweise schreibt man etwas dazu, bevor man es liest...
 
papaklass:

Warum tritt ein Array-Überlauffehler auf?


Und wo haben Sie den ArrayResize-Aufruf?
Документация по MQL5: Операции с массивами / ArrayResize
Документация по MQL5: Операции с массивами / ArrayResize
  • www.mql5.com
Операции с массивами / ArrayResize - Документация по MQL5