Diskussion zum Artikel "Das MQL5-Kochbuch: Implementierung Ihrer eigenen Markttiefe" - Seite 5

 
Ja, eine andere Version. Dieser Artikel von 2015 enthält den Code aus dem zweiten Folgeartikel von 2017 https://www.mql5.com/de/articles/3336. Leider ist er nicht kompiliert. Für Schulungszwecke können Sie die ursprüngliche Codebasis von 2015 verwenden, darin funktioniert das Preisglas ohne Chart. Ich habe den Code oben veröffentlicht. Was die neue Version betrifft, wird es einige Zeit dauern, sie zu korrigieren.
Пишем скальперский стакан цен на основе графической библиотеки CGraphic
Пишем скальперский стакан цен на основе графической библиотеки CGraphic
  • 2017.06.23
  • www.mql5.com
В статье создается базовый функционал скальперского стакана цен. Разрабатывается тиковый график на основе графической библиотеки CGraphic и интегрируется с таблицей заявок. С помощью описываемого стакана цен можно создать мощный помощник для краткосрочной торговли.
 
Vasiliy Sokolov #:
Leider lässt er sich nicht kompilieren.

Es gibt nur ein paar Fehler in dem Code, der diesem Artikel beigefügt ist.

In der Datei MBookFon.mqh ist die Methodenimplementierung nicht korrekt definiert - es fehlt void:

void  CBookFon::Show(void)
{
   ObjectCreate(ChartID(), m_name, OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_YDISTANCE, 13);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_XDISTANCE, 6);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_XSIZE, 116);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_BORDER_TYPE, BORDER_FLAT);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_BGCOLOR, clrWhite);
   int total = (int)m_book.InfoGetInteger(MBOOK_DEPTH_TOTAL);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_YSIZE, total*15+16);
   CreateCeils();
   
   OnShow();
}


In der Datei MBookCeil.mqh gibt es keine Prüfung auf Array-Größe und Array-Überlauf:

void CBookCeil::Refresh(void)
{
   int total = (int)m_book.InfoGetInteger(MBOOK_DEPTH_TOTAL);
   if(total == 0 || m_index < 0 || m_index > total-1)
      return;
   ENUM_BOOK_TYPE type = m_book.MarketBook[m_index].type;
   long max_volume = 0;
   if(type == BOOK_TYPE_BUY || type == BOOK_TYPE_BUY_MARKET)
   {
      ObjectSetInteger(ChartID(), m_name, OBJPROP_BGCOLOR, clrCornflowerBlue);
      max_volume = m_book.InfoGetInteger(MBOOK_MAX_BID_VOLUME);
   }
   else if(type == BOOK_TYPE_SELL || type == BOOK_TYPE_SELL_MARKET)
   {
      ObjectSetInteger(ChartID(), m_name, OBJPROP_BGCOLOR, clrPink);
      max_volume = m_book.InfoGetInteger(MBOOK_MAX_ASK_VOLUME);
   }
   else
      ObjectSetInteger(ChartID(), m_name, OBJPROP_BGCOLOR, clrWhite);
   MqlBookInfo info = m_book.MarketBook[m_index];
   if(m_ceil_type == BOOK_PRICE)
      m_text.SetText(DoubleToString(info.price, Digits()));
   else if(m_ceil_type == BOOK_VOLUME)
      m_text.SetText((string)info.volume);
   if(m_ceil_type != BOOK_VOLUME)return;
   double delta = 1.0;
   if(max_volume > 0)
      delta = (info.volume/(double)max_volume);
   if(delta > 1.0)delta = 1.0;   
   long size = (long)(delta * 50.0);
   if(size == 0)size = 1;
   ObjectSetInteger(ChartID(), m_name, OBJPROP_XSIZE, size);
   ObjectSetInteger(ChartID(), m_name, OBJPROP_YDISTANCE, m_ydist);
}

Beim ersten Durchlauf, wenn das Preisglas noch nicht angeschlossen ist, ist die Array-Größe Null und dementsprechend stürzt der kritische Fehler ab.

 
Ich habe die Dateien kompiliert, aber es treten immer noch Fehler auf. Kann jemand eine funktionierende Version bitte teilen
 
startatrix #:
Ich habe die Dateien kompiliert, aber die Fehler bleiben. Kann mir bitte jemand eine funktionierende Version zur Verfügung stellen.
Wenn kompiliert, gibt es keine Fehler. Wenn die Kompilierung fehlgeschlagen ist, was sind die Fehler?