Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
И что?
Там не бывает пустой стакан. Но там и нет торговли, поэтому, предполагаю, могут быть нулевые, сам не проверял.
А вот проверку на нулевые bid и ask на обычных символах, тех же RTS и Si, делать приходится, ибо изредка пролетают, хоть стакан и не пустой.
Пустой стакан в 18:51:09 сегодня?
Это клиринг.
Там не бывает пустой стакан. Но там и нет торговли, поэтому, предполагаю, могут быть нулевые, сам не проверял.
А вот проверку на нулевые bid и ask на обычных символах, тех же RTS и Si, делать приходится, ибо изредка пролетают, хоть стакан и не пустой.
Откуда же Вы такие "всезнайки" выползаете?
Код (фьючерс RTS-3.21, Открывашка реал):
//+------------------------------------------------------------------+ //| Ticks_zero.mq5 | //| Copyright 2021 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021 prostotrader" #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_plots 1 #property indicator_buffers 1 datetime start_time, end_time; datetime time_array[]; int time_cnt; MqlTick ticks[]; input datetime StTime = D'2019.03.15 19:05:00'; // Начало расчета фьючерса enum IND_STAGE { LOAD_TICKS = 0, FILL_DATA = 1 }ind_stage; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping end_time = datetime(SymbolInfoInteger(Symbol(), SYMBOL_EXPIRATION_TIME)); start_time = StTime; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator Load ticks function | //+------------------------------------------------------------------+ bool LoadTicks(const datetime &a_times[]) { int result = CopyTime(Symbol(), PERIOD_M1, start_time, end_time, time_array); if(result > 0) { time_cnt = result; if(time_array[result - 1] == a_times[ArraySize(a_times) - 1]) { result = CopyTicksRange(Symbol(), ticks, COPY_TICKS_INFO, ulong(start_time) * 1000, ulong(end_time) * 1000); if(result > 0) { if(ticks[result-1].time >= time_array[time_cnt - 1]) { return(true); } else Print(__FUNCTION__, ": Не хватает тиков ", Symbol(), "!"); } else Print(__FUNCTION__, ": Не получены тики по символу ", Symbol(), "!"); } else Print(__FUNCTION__, ": Не хватает баров по символу ", Symbol(), "!"); } else Print(__FUNCTION__, ": Не скопировано время баров по символу ", Symbol(), "!"); return(false); } //+------------------------------------------------------------------+ //| Custom indicator Fill Data function | //+------------------------------------------------------------------+ void FillData() { for(int i = 0; i<ArraySize(ticks);i++) { if((ticks[i].ask == 0) && (ticks[i].bid == 0) && (ticks[i].last == 0)) { Print("Empty book with empty Last! Time: ", ticks[i].time); } else if((ticks[i].ask == 0) && (ticks[i].bid == 0) && (ticks[i].last != 0)) { Print("Empty book. Last = ", ticks[i].last, " Time: ", ticks[i].time); } } } //+------------------------------------------------------------------+ //| 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[] ) { switch(ind_stage) { case LOAD_TICKS: if(LoadTicks(time) == true) { ind_stage = FILL_DATA; } else return(0); break; case FILL_DATA: FillData(); break; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+Результат:
Это клиринг.
Не только, еще премаркет, не торговое время и еще так, как я говорил ранее
Сделка клиринга перешла в пустой стакан в торговое время.Откуда же Вы такие "всезнайки" выползаете?
Код (фьючерс RTS-3.21, Открывашка реал):
Результат:
Это не стакан пустой, а тик с пустыми bid и/или ask, что, как я и говорил, бывает, вероятно, в результате какого-то сбоя.
Вот на пустой стакан по актуальному RTS или Si я бы посмотрел.
Это не стакан пустой, а тик с пустыми bid и/или ask, что, как я и говорил, бывает, вероятно, в результате какого-то сбоя.
Вот на пустой стакан по актуальному RTS или Si я бы посмотрел.
Уважаемый!
Вы читаете что Вам пишут?
Открывашка, реал, фьючерс RTS-3.21
Код есть, может быть счета реального нет?
Фьючерс RTS-3.21 "родился"И частенько бывает стакан пустым в начале "жизни".
Уважаемый!
Вы читаете что Вам пишут?
Открывашка, реал, фьючерс RTS-3.21
Код есть, может быть счета реального нет?
Не увидел в коде MarketBookGet()
Я говорю про актуальный - т.е., ближайший фьюч. И в нём могут пролетать тики с нулевыми ask/bid, но стакан пустым это не делает.Не увидел в коде MarketBookGet()
Понятно...
И частенько бывает стакан пустым в начале "жизни".
Речь шла про сегодня.
Речь шла про сегодня.
Посмотрите время, это может быть клиринг.
Расписание сессий
7-00 - 14-00
Промклиринг
14-05 - 18-45
основной клиринг
19-00(19-05) - 23-50
Вы - Пустой стакан в 18:51:09 сегодня?
Это Основной клиринг.
Добавлено
Торговый день может начинаться как в 19-00 так и в 19-05
Если есть экспирация фьючерса или опциона, то день начинается в 19-05