Обсуждение статьи "Пишем скальперский стакан цен на основе графической библиотеки CGraphic" - страница 2

 

Добрый вечер, Василий

Статья меня настолько заинтересовала, что я решил зарегистрироваться и оставить свой комментарий (№1).

Пытаюсь вникнуть в алготрейдинг, но, всё ещё чувствую себя новичком.

Вложенный код запустил в режиме тестера для ознакомления с его работой. НО стакан почему-то не отображается полностью, а именно открывается рамка и легенда справа а график и кнопки отсутствуют. Тестер работает, в журнале нет указания на ошибку. Что я не так сделал? помогите подключиться.

Заранее благодарен,

Александр


 

 
AMK_robot:

Добрый вечер, Василий

Статья меня настолько заинтересовала, что я решил зарегистрироваться и оставить свой комментарий (№1).

Пытаюсь вникнуть в алготрейдинг, но, всё ещё чувствую себя новичком.

Вложенный код запустил в режиме тестера для ознакомления с его работой. НО стакан почему-то не отображается полностью, а именно открывается рамка и легенда справа а график и кнопки отсутствуют. Тестер работает, в журнале нет указания на ошибку. Что я не так сделал? помогите подключиться.

Заранее благодарен,

Александр  

Добрый день. Спасибо за проявленный интерес к статье и нашему сообществу. Ответ на Ваш вопрос скрывается в нем же. Тестер стратегий не предствляет историю стакана, поэтому запускать стакан можно только на графике в режиме реал-тайм. К тому же в режиме тестирования, графические компоненты отображаются с ограниченным функционалом, поэтому отобразить стакан цен в тестере все равно не получиться. Используйте стакан только на графике. Кроме того, стакан цен транслируется не для всех рынков, поэтому Вам лучше подключиться к Московской бирже или использовать демо-счет MetaQuotes.

 

Спасибо Василий за ваш труд, месяц назад внедрил Ваш класс в свои роботы, конечно не обошлось в глобальных доработках т.к. недоставало некоторых методов, но все получилось и работает.

Есть вопрос

Ваш пример

//+------------------------------------------------------------------+
//|                                                   MarketBook.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
#include <MarketBook.mqh>

CMarketBook MarketBook.mqh
double fake_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   MarketBook.SetMarketBookSymbol(Symbol());
//--- indicator buffers mapping
   SetIndexBuffer(0,fake_buffer,INDICATOR_CALCULATIONS);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| MarketBook change event                                          |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
   if(symbol != MarketBook.GetMarketBookSymbol())
      return;
   MarketBook.Refresh();
   ChartRedraw();
}

А как правильно сделать де инициализацию стакана

Какой вариант более правильный, вроде и так и так работает

void OnDeinit(const int reason)
  {  

//|-----------    
   if(!MarketBookRelease((string)m_book_market.SetMarketBookSymbol(Symbol())))
   {
   if(Debug){Print("Error MarketBookRelease ",m_symbol.Name());}}
//|-----------


//|-----------  
   if(!m_book_market.SetMarketBookSymbol(Symbol()))  
   {
   if(Debug){Print("Error MarketBookRelease ",m_symbol.Name());}}
//|-----------

  }
 
Konstantin Seredkin:

Спасибо Василий за ваш труд, месяц назад внедрил Ваш класс в свои роботы, конечно не обошлось в глобальных доработках т.к. недоставало некоторых методов, но все получилось и работает.

Есть вопрос

Ваш пример

А как правильно сделать де инициализацию стакана

Какой вариант более правильный, вроде и так и так работает

чего то не пойму, а это что:

CMarketBook MarketBook.mqh
 
Konstantin:

чего то не пойму, а это что:

Какая то строка кода...
 
Konstantin Seredkin:
Какая то строка кода...

так ты же этот код показал, вот и спрашиваю -это что такое, т.к. не понятный синтаксис

//+------------------------------------------------------------------+
//|                                                   MarketBook.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
#include <MarketBook.mqh>

CMarketBook MarketBook.mqh
double fake_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   MarketBook.SetMarketBookSymbol(Symbol());
//--- indicator buffers mapping
   SetIndexBuffer(0,fake_buffer,INDICATOR_CALCULATIONS);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| MarketBook change event                                          |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
   if(symbol != MarketBook.GetMarketBookSymbol())
      return;
   MarketBook.Refresh();
   ChartRedraw();
}
 
Konstantin:

так ты же этот код показал, вот и спрашиваю -это что такое, т.к. не понятный синтаксис

А слова которые я написал в своем вопросе не о чем не говорят ?

Ваш пример

Этот код опубликован автором темы в описании класса https://www.mql5.com/ru/articles/3336

По этому этот вопрос как минимум не мне должен быть адресован...

Пишем скальперский стакан цен на основе графической библиотеки CGraphic
Пишем скальперский стакан цен на основе графической библиотеки CGraphic
  • 2017.06.23
  • Vasiliy Sokolov
  • www.mql5.com
Именно с этой, улучшенной и дополненной версией мы и начнем работать, чтобы постепенно превратить ее в скальперский стакан цен. Краткий обзор графической библиотеки CPanel Созданию пользовательских интерфейсов в MQL5 посвящено много статей. Среди них особенно выделяется серия Анатолия Кажарского "Графические интерфейсы", после которой сложно...
 

Копипаста наверное. Бывает. Автор скорее всего писал этот код частично прямо в браузере.

Вместо 

CMarketBook MarketBook.mqh

напишите 

CMarketBook MarketBook;

 
Konstantin Seredkin:

А слова которые я написал в своем вопросе не о чем не говорят ?

Ваш пример

Этот код опубликован автором темы в описании класса https://www.mql5.com/ru/articles/3336

По этому этот вопрос как минимум не мне должен быть адресован...

мне эти слова вообще ни о чем не говорят кроме одного - код примера тобой не изучен

ты приводишь пример удаления через

m_book_market.SetMarketBookSymbol(Symbol())

если открыть этот метод, то увидим там подписку на передаваемый тикер

bool CMarketDepth::SetMarketBookSymbol(string symbol) {
   m_sell_deals = 0;
   m_buy_deals  = 0;
   ArrayResize(market_book, 0);
   m_available = false;
   m_best_ask_index = -1;
   m_best_bid_index = -1;
   m_depth_total = 0;

   bool _selelect = SymbolSelect(symbol, true);
   if(_selelect)
      m_symbol = symbol;
   else {
      if(!SymbolSelect(m_symbol, true) && SymbolSelect(Symbol(),true))
         m_symbol = Symbol();
   }

   if(_selelect)
      if(!MarketBookAdd(m_symbol))
         printf("%s - %d: [ %s ] не возможно открыть стакан!!!", __FUNCTION__, __LINE__, m_symbol);

   this.Refresh();
//---
   return _selelect;
}

но ни как не удаление подписки )) удаление подписки производится через функцию:

MarketBookRelease

Обеспечивает закрытие стакана цен по указанному инструменту, а также отменяет подписку на получение извещений об изменении указанного стакана.

bool  MarketBookRelease(
   string  symbol      // имя символа
   );

Параметры

symbol

[in]  Имя символа.

Возвращаемое значение

Значение true в случае успешного закрытия, иначе false.

Примечание

Обычно эта функция должна вызываться из функции OnDeinit() в том случае, если в функции OnInit() была вызвана соответствующая функция MarketBookAdd(). Либо должна вызываться из деструктора класса, если в конструкторе этого класса вызывается соответствующая функция MarketBookAdd().
 
TheXpert:

Копипаста наверное. Бывает. Автор скорее всего писал этот код частично прямо в браузере.

Вместо 

CMarketBook MarketBook.mqh

напишите 

CMarketBook MarketBook;

это был вопрос с подвохом к тезке )) он не любит читать код, а ждет когда ему дадут готовый ответ ))

Причина обращения: