Diskussion zum Artikel "Entwicklung eines Handelssystems auf der Grundlage des Orderbuchs (Teil I): Der Indikator"
Dies ist ein sehr kurzer Artikel mit sehr wenig Code. Mal sehen, im nächsten Teil, wenn es Sinn macht, haben Teil 1, 2 und so weiter.
SYMBOL_TICKS_BOOKDEPTH gibt die maximale Anzahl von Anfragen in Depth of Market angezeigt. Es ist nicht korrekt, dass diese Eigenschaft das gleiche Ergebnis liefert wie das Zählen der Anzahl der Ebenen im DOM. Es gibt die maximale Anzahl nicht genaue Zahl.
Sie können sehr, dass mit diesem Skript:
//+------------------------------------------------------------------+ //|TestOnderBook.mq5 | //|Urheberrecht 2025, Samuel Manoel De Souza | //| https://www.mql5.com/de/users/samuelmnl | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, Samuel Manoel De Souza" #property link "https://www.mql5.com/de/users/samuelmnl" #property version "1.00" //+------------------------------------------------------------------+ //| Skript-Programmstartfunktion| //+------------------------------------------------------------------+ int OnInit(void) { MarketBookAdd(_Symbol); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { MarketBookRelease(_Symbol); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnTick(void) { } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnBookEvent(const string& symbol) { double tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); MqlBookInfo book[]; MarketBookGet(_Symbol, book); int total = ArraySize(book); if(total == 0) { Print("there is no order available on the book"); ExpertRemove(); return; } int buy_levels = 0, sell_levels = 0; int buy_gaps = 0, sell_gaps = 0, gaps = 0; for(int i = 0; i < total; i++) { Print("price: ", book[i].price, ", volume: ", book[i].volume, ", type: ", EnumToString(book[i].type)); buy_levels += book[i].type == BOOK_TYPE_BUY ? 1 : 0; sell_levels += book[i].type == BOOK_TYPE_SELL ? 1 : 0; if(i > 0) { bool is_gap = fabs(book[i].price - book[i - 1].price) >= 2 * tick_size; gaps += is_gap ? 1 : 0; buy_gaps += is_gap && book[i].type == book[i - 1].type && book[i].type == BOOK_TYPE_BUY ? 1 : 0; sell_gaps += is_gap && book[i].type == book[i - 1].type && book[i].type == BOOK_TYPE_SELL ? 1 : 0; } } Print("max levels: ", SymbolInfoInteger(_Symbol, SYMBOL_TICKS_BOOKDEPTH)); Print("levels: ", total); Print("buy levels: ", buy_levels); Print("sell levels: ", sell_levels); Print("gaps: ", gaps); Print("buy gaps: ", buy_gaps); Print("sell gap: ", sell_gaps); ExpertRemove(); } //+------------------------------------------------------------------+
Dies ist ein sehr kurzer Artikel mit sehr wenig Code. Wir werden im nächsten Teil sehen, ob es Sinn macht, Teil 1, 2 und so weiter zu haben.
SYMBOL_TICKS_BOOKDEPTH gibt die maximale Anzahl von Anträgen an, die in der Markttiefe angezeigt werden. Es ist nicht richtig, dass diese Eigenschaft dasselbe Ergebnis liefert wie das Zählen der Anzahl der Ebenen im DOM. Sie gibt eine Höchstzahl an, keine genaue Zahl.
Sie können dies mit diesem Skript tun:
Der Artikel ist super! Ich wollte auch einen TS über den Stack schreiben - genauer gesagt mit der Verwendung der Anführungszeichen Stack!
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Entwicklung eines Handelssystems auf der Grundlage des Orderbuchs (Teil I): Der Indikator :
Lassen Sie uns kurz zusammenfassen, was Markttiefe, Depth of Market oder DOM, bedeutet. Es handelt sich um eine Reihe von schwebenden Limitaufträgen. Diese Aufträge stellen die Handelsabsichten der Marktteilnehmer dar und führen häufig nicht zu einem tatsächlichen Handelsgeschäft. Der Grund dafür ist, dass die Händler die Möglichkeit haben, ihre zuvor erteilten Aufträge aus verschiedenen Gründen zu stornieren. Dazu können Änderungen der Marktbedingungen und der daraus resultierende Verlust des Interesses an der Ausführung des Auftrags zu dem zuvor festgelegten Preis und der Menge gehören.
Der von der Funktion SymbolInfoInteger(_Symbol, SYMBOL_TICKS_BOOKDEPTH) zurückgegebene Wert entspricht genau der Tiefe des Orderbuchs und stellt die Hälfte des Arrays dar, das mit den zu analysierenden Kursniveaus aufgefüllt wird. Die Hälfte dieses Feldes ist für die Anzahl der Limit-Verkaufsaufträge vorgesehen, die andere Hälfte für die erteilten Limit-Kaufaufträge. Laut Dokumentation ist der Wert dieser Eigenschaft bei Anlagen, die keine Auftragswarteschlange haben, gleich Null. Ein Beispiel hierfür ist in der nachstehenden Abbildung zu sehen, die das Orderbuch mit einer Tiefe von 10 zeigt, wobei alle verfügbaren Kursniveaus angegeben sind.
Es ist zu beachten, dass die Tiefe aus dem Symbol und nicht unbedingt aus der Markttiefe abgeleitet werden kann. Die Verwendung der Funktion SymbolInfoInteger reicht aus, um den Eigenschaftswert abzurufen, ohne auf die Ereignisbehandlung durch OnBookEvent oder verwandte Funktionen wie MarketBookAdd zurückgreifen zu müssen. Natürlich könnten wir zum gleichen Ergebnis kommen, indem wir die Anzahl der Elemente im Array MqlBookInfo zählen, die OnBookEvent auffüllt, wie wir später noch genauer untersuchen werden.
Autor: Daniel Santos