Помогите плиз, по форуму смотрел не не чего не нашел чтобы решить проблему.
Проблема в следующем. Не могу получить свечки после регистрации:
Вот код:
_candleManager.RegisterTimeFrameCandles(newSec, new TimeSpan(0, 1, 0));
_candleManager.NewCandles +=new Action<CandleToken,MultiDictionary<Candle,Trade>>(_candleManager_NewCandle);
Выдает две последние свечи и потом работает нормально. Т.е. добавляет к ряду свечек новые.
_candleManager.CandlesChanged += new Action<CandleToken,
MultiDictionary<Candle, Trade>>(_candleManager_CandlesChanged);
Работает тоже нормально. Последняя свеча изменяется.
_candleManager.CandlesFinished += new Action<CandleToken,
System.Collections.Generic.IEnumerable<Candle>>(_candleManager_CandlesFinihed) { Здесь, в этом событии, я хочу получить историю (код ниже). Хотя этот участок кода куда я только не вставлял.... ;) результат нулевой. т.е. свечей нет.... :( или их совсем мало 2 - 3.
var candles = _candleManager.GetTimeFrameCandles(_Trade.Stakan.Security, new TimeSpan(0, 1, 0), 100); candles.count() всегда 0 или 2-3; Хотя их по идее должно быть много. Конец сессии.
Comentarios (16)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Страшные конструкции можно заменить на _candleManager.NewCandles +=_candleManager_NewCandles;
_candleManager.CandlesFinished - это не история. Это "Событие окончания формирования свечек." (источник
http://stocksharp.com/doc/help/html/E_Ecng_Trading_Algo_CandleManager_CandlesFinished.htm) Поэтому свечки будут приходять туда с такой же частотой, что и в NewCandles. И метод GetTimeFrameCandles повлиять на это не может.
Блин, чего я только не делал. Может дело в том что платформа FindowsForm? ОC Windows 7, Visual Studio 10, Quik 5.17.0.159, Stock# - 2.3
Код программы:
_candleManager = new CandleManager(_Trade.Trader); _candleManager.NewCandles += ChartNewCandles; _candleManager.CandlesChanged += ChartCandlesChanged; candletoken = _candleManager.RegisterTimeFrameCandles(Property.Security, new TimeSpan(0, 1, 0));
Уже и задержки ставил типа: while (проверка времени) { Application.DoEvent();
все равно не помогает. Первая свеча, которая приходит в событие ChartNewCandles имеет дату ближайшей по времени свечи на графике, т.е. последней. Все больше не чего не происходит. Попробовал в обработчике события вставить ChartNewCandles следующий код:
_candleManager.GetTimeFrameCandles(Property.Security, new TimeSpan(0, 1, 0), 100);
Результат candles.count() всегда равен количеству свечек которые уже получены 1, 2,3,4 т.е сколько минут прошло - столько и свечек.
Что делать? :(
Прошло с какого момента? С начала сессии? Так и должно быть. Или у Вас всегда 4 свечки возвращаются?
Михаил, не так все печально со мной. :)
С начала сессии прошло как минимум часа 3. т.е свечек как минимум должно быть больше ста.
Количество свечек каждый раз возвращается столько сколько проработала программа. Если работала 1 минут то одна свечка, две минуты - 2 свечки и т.д. Только программа начинает работать когда уже сессия в разгаре.
Интересное поведение. Еще такой вопрос. А сама то тики приходят с начала сессии? ITrader.NewTrades? У Вас есть какое-нибудь временное смещение с биржей?
Да с обновлениями свечек все нормально. Свечки обновляются, по времени добавляются новые, а истории нет.
Не совсем понял... Это ответ на мой вопрос? Мой вопрос "А сама то тики приходят с начала сессии? ITrader.NewTrades? У Вас есть какое-нибудь временное смещение с биржей? "
+4MSK
Четырех часовая разница с Москвой.
Ага, я думаю в этом причина. Посмотрю на выходных что там.
Попробовал поставить на компьютере московское время.... результат не изменился. Дело не в часовом поясе.
Хорошо. Такой тогда вопрос. Пример SampleCadles работает?
Да работает. Я уже писал что может быть проблема в том, что я работаю на платформе WindowsForm.
На версии квика 5.16 и версии Stock# 2.0.1 работало все все прекрасно. Код в программе не менял.
Я думаю ошибка где то в логике, раз пример работает... Нет, от ГУИ не зависит.
Попробуйте создать минимальную программу со свечками. Так будет проще найти, что не так.