Индикатор другого графика - страница 5

 
Taras Slobodyanik:

Вот сейчас все спят — тики приходят раз в 10-30 секунд... или даже в 60 секунд.

Но это не значит что вы не можете опросить принудительно нужные вам инструменты через таймер. Так же можно отправлять торговые запросы по таймеру, не ждать пока придет очередной тик.

Этот индикатор (что на первой странице), работает только если пришел тик на текущем инструменте. Но на другом инструменте, в это же время, скорее всего не будет тика. Значит и не появится новая свеча.
А когда появится, то этот индикатор уже отработает этот тик и это время. То есть он попросту проигнорирует событие формирования свечи на другом инструменте.

Как всё запущено ((

А если вы запросили данные другого инструмента, а он говорит я пока не могу сообщить свои данные, я сильно занят, пока отдыхайте, ждите следующего понедельника. 

 
подождать и попробовать обновить через секунду... (чего нет в этом индикаторе)
 
Taras Slobodyanik:
подождать и попробовать обновить через секунду... (чего нет в этом индикаторе)

В том и дело, через секунду это о000чень много.

fxsaber вообще говорит что данные других графиков не обновляются в фоновом режиме. 

Но речь даже не о графиках, а о возможности получения данных с других инструментов особенно в индикаторах. 

По политике MQ индикатор должен работать очень быстро, даже если по какой то неизвестной причине данные не готовы - да и фиг с ним, подождем до приходите завтра.

Или пользуйтесь тем что есть.
 
много для чего? индикатор пропускает бары если не была построена история по символу, по моему лучше через секунду получить правильную картинку, чем вообще ее не видеть...
 
Taras Slobodyanik:
много для чего? индикатор пропускает бары если не была построена история по символу, по моему лучше через секунду получить правильную картинку, чем вообще ее не видеть...

Индикатор сам по себе пропускать ничего не может, т.к. алгоритм индикатора зависит от его создателя. Пропускает терминал, просто ему так выгоднее.

Доходит до абсурда, при переключении таймфрейма индикатор вызывает деинициализацию, затем новую инициализацию. Иногда получается так что деинициализация завершается после новой инициализации. И кирдык, индикатор в ауте. 

Но если для вас час, день не в счет... , разговор ниочем. Лучше торговать через gooooogle.

 

@Sergey Chalyshev, какие у вас возникли проблемы при работе с другими инструментами?

Событийная модель МТ5 позволяет организовать получение любых данных без задержки. Разовая задержка при первом запросе, даже в индикаторе, корректно обрабатывается небольшим ожиданием.

 

Версия 1.01

Индикатор стал реал-тайм 

Файлы:
 
fxsaber #:
Дело в том, что когда чарт максимизирован, то формирование новых баров на других чартах прекращается - экономия ресурсов, видимо. Поэтому CopyRates обламывается при первом запросе нового бара.

наверное так будет работать индикатор на другом символе или ТФ:

создаем пустой индикатор, который просто обращается к первому и последнему элементу таймсерий^

//+------------------------------------------------------------------+
//|                                                        empty.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_plots 0
MqlRates rates[2];
#define FillRates(n,b)  rates[n].close = close[b];\
                        rates[n].high = high[b];\
                        rates[n].low = low[b];\
                        rates[n].open = open[b];\
                        rates[n].time = time[b]


//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
//---
   CopyRates(_Symbol, _Period, 0, 1, rates);
   const int N = rates_total - 1;
   FillRates(0, 0);
   FillRates(1, N);
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+

и вызываем этот индикатор с помощью iCustom() в другом индикаторе:

//+------------------------------------------------------------------+
//|                                                      OtherTF.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_plots   0
input string symbol           = "EURUSD";
input ENUM_TIMEFRAMES period  = PERIOD_D1;
int ind_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   ind_handle = iCustom(symbol, period, "tst\\empty");
   if(ind_handle == INVALID_HANDLE)
   {
      Print("Ошибка подключения индикатора, error ", GetLastError());
      return(INIT_FAILED);
   }
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
//---
   int bar_c = BarsCalculated(ind_handle);
   if(bar_c == -1)
   {
      Print("empty not ready");
      return(0);
   }
   MqlRates rates[];
   int copy_r = CopyRates(symbol, period, TimeCurrent(), (datetime)0, rates);
   Print("CopyRates = ", copy_r, ", BarCalc = ", bar_c, " , iBars = ",
         iBars(symbol, period));

//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+

удалил историю Евро, запустил на биткоине, с каждым тиком подкачивалась история и закачалась вся история - признаком окончания закачки было CopyRates != -1