Ошибки, баги, вопросы - страница 1803
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Либо, как тут только что сказали, спрашивать количество баров, тоже несколько тактов
К индикаторам тоже относится. Создайте 1-минутный таймер и спрашивайте количество баров у всех интересующих Вас таймсерий.
Проверкой факта синхронизированности синхронизация не удерживается.
Уважаемые разработчики! В очередной раз прошу как можно скорее добавить время в мс для значений сентимента (SYMBOL_SESSION_...) и стакана( OnBookEvent()). Дайте возможность сделать синхронизацию всех доступных данных!
Metaquotes-Demo, символ DIG-20170330
SymbolInfoDouble(Symb,SYMBOL_SESSION_PRICE_LIMIT_MIN) = 29528.0
(ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb,SYMBOL_TRADE_MODE) = SYMBOL_TRADE_MODE_FULL (4)
Ошибка в SYMBOL_SESSION_PRICE_LIMIT_MIN: выше Аска - невозможно выставить BuyLimit.
Прошу поделиться своим велосипедом: bool-функция, которая сообщает, готов ли символ к торговле или нет.
{
MqlDateTime sTime = {0};
TimeToStruct(time, sTime);
return((ENUM_DAY_OF_WEEK)sTime.day_of_week);
}
// true - находимся в торговой сессии
bool SessionTrade( string Symb = NULL )
{
datetime TimeNow = TimeTradeServer();
const ENUM_DAY_OF_WEEK DayOfWeek = GetDayOfWeek(TimeNow);
TimeNow %= 24 * 60 * 60;
if ((Symb == NULL) || (Symb == ""))
Symb = Symbol();
bool Res = false;
datetime From, To;
for (int i = 0; SymbolInfoSessionTrade(Symb, DayOfWeek, i, From, To) && (!Res); i++)
Res = ((From <= TimeNow) && (TimeNow < To));
return(Res);
}
// Возвращает true, если символ торгуемый. Иначе - false.
bool SymbolTrade( string Symb = NULL, const int Pause = -1 )
{
MqlTick Tick;
if ((Symb == NULL) || (Symb == ""))
Symb = Symbol();
if (Pause >= 0)
Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
return(SymbolInfoTick(Symb, Tick) ? ((Tick.bid != 0) && (Tick.ask != 0) && SessionTrade(Symb) &&
((ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)) : false);
}
if (Pause >= 0)
Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
А если это в индикаторе?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.02.14 12:31
Сразу после SymbolSelect(true) запрашиваю цены, а они нулевые. При этом _LastError == 0, SymbolInfoTick == true.
Как понять, что цены по новому для Обзора рынка символу доставлены до Marketwatch?
Отсюда ноги
Если индикатор в таблицу выводит некие статистические данные по заранее не известным символам, то при выборе очередного символа с панели, очень часто сразу нельзя получить данные по нему, и в таблицу выводится ложная информация... Как для дальнейших расчётов быть уверенным, что данные получены от символа корректны, и в достаточном количестве для получения дальгейших верных расчётов?
Честно говоря, не понял. Я интересовался: как в индикаторе узнать готовность символа? Sleep() не работает в индикаторах.
Если индикатор в таблицу выводит некие статистические данные по заранее не известным символам, то при выборе очередного символа с панели, очень часто сразу нельзя получить данные по нему, и в таблицу выводится ложная информация... Как для дальнейших расчётов быть уверенным, что данные получены от символа корректны, и в достаточном количестве для получения дальгейших верных расчётов?