Ошибки, баги, вопросы - страница 1803
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые разработчики! В очередной раз прошу как можно скорее добавить время в мс для значений сентимента (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() не работает в индикаторах.
Если индикатор в таблицу выводит некие статистические данные по заранее не известным символам, то при выборе очередного символа с панели, очень часто сразу нельзя получить данные по нему, и в таблицу выводится ложная информация... Как для дальнейших расчётов быть уверенным, что данные получены от символа корректны, и в достаточном количестве для получения дальгейших верных расчётов?
Sleep нужен только для случаев, когда символа нет в Обзоре рынка. Для всех символов, что есть в Обзоре рынка перед запуском (и во время работы) индикатора, никакие слипы не нужны.
1531 - тормоза Metaquotes-Demo не исчезли.
Запрос с ответом
Request.magic = 0
Request.order = 0
Request.symbol = #KO
Request.volume = 1.0
Request.price = 40.31
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 100
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = My Position
Request.position = 0
Request.position_by = 0
Result.retcode = 10009
Result.deal = 117613087
Result.order = 133997293
Result.volume = 1.0
Result.price = 40.31
Result.bid = 40.28
Result.ask = 40.31
Result.comment = Request executed 345.781 + 26.356 ms
Result.request_id = 5712
Result.retcode_external = 0
345 мс выполнялся OrderSend и 26 мс понадобилось на то, чтобы в истории стали доступны соответствующие ордер и сделка. Т.е. очень медленная синхронизация - такого раньше не наблюдал.
Стандартный лог
2017.02.14 22:26:46.852 Trades '5122740': accepted prices for #KO 1.00
2017.02.14 22:26:46.852 Trades '5122740': answer prices for #KO 1.00 40.28 / 40.31 in 86.046 ms (0.190 ms on server)
2017.02.14 22:26:46.852 Trades '5122740': request buy 1.00 #KO at 40.31
2017.02.14 22:26:47.107 Trades '5122740': accepted request buy 1.00 #KO at 40.31
2017.02.14 22:26:47.107 Trades '5122740': deal #117613087 buy 1.00 #KO at 40.31 done (based on order #133997293)
2017.02.14 22:26:47.107 Trades '5122740': order #133997293 buy 1.00 / 1.00 #KO at 40.31 done in 345.709 ms (3.022 ms on server)
Новый лог теперь в 1531! Прошу пояснить по этому случаю, что к чему.
ЗЫ Лог почти сразу после тормозов
2017.02.14 22:26:47.503 Trades '5122740': accepted prices for #KFT 1.00
2017.02.14 22:26:47.506 Trades '5122740': answer prices for #KFT 1.00 49.17 / 49.20 in 70.980 ms (4.166 ms on server)
2017.02.14 22:26:47.506 Trades '5122740': request buy 1.00 #KFT at 49.20
2017.02.14 22:26:47.583 Trades '5122740': accepted request buy 1.00 #KFT at 49.20
2017.02.14 22:26:47.583 Trades '5122740': deal #117613092 buy 1.00 #KFT at 49.20 done (based on order #133997299)
2017.02.14 22:26:47.583 Trades '5122740': order #133997299 buy 1.00 / 1.00 #KFT at 49.20 done in 149.304 ms (3.015 ms on server)
Это Requested-символы, поэтому на маркет-ордерах помедленнее, чем другие.