← Zurück

candlemanager))

в своем старом коде ничего не менял но появились ошибки "В экземпляре объекта не задана ссылка на объект." и candle стала null. в чем может быть проблема??? версия 1.8 ))))

War dieses Thema hilfreich?

Thema teilen

Kommentare (38)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

mr leng: в своем старом коде ничего не менял но появились ошибки "В экземпляре объекта не задана ссылка на объект." и candle стала null. в чем может быть проблема??? версия 1.8 ))))

Без теста ошибки трудно разобраться.

mr leng
mr leng Autor

всмысле??какого теста?

Mikhail Sukhov
Mikhail Sukhov

mr leng: всмысле??какого теста?

Например как здесь.

mr leng
mr leng Autor

сформированную свечку var candle = _candleManager.GetTimeFrameCandle(Security, _timeFrameStra, _nextTime - _timeFrameStra);

в этой строчке ошибка
m = candle.LowPrice / 2;

ругается вот так System.NullReferenceException: В экземпляре объекта не задана ссылка на объект В Sampler.SStrategy.OnProcess() в C:\Doc* \SStrategy.cs : строка 339 в Ecng.Trading.Algo.Strategy.Process()

может ли это быть из-за того что свечка не успевает сформироваться?? из-за разницы во времени между платформой и системным временем??? это версия 1.8 здесь время еще не из платформы берется

Mikhail Sukhov
Mikhail Sukhov

mr leng: может ли это быть из-за того что свечка не успевает сформироваться?? из-за разницы во времени между платформой и системным временем??? это версия 1.8 здесь время еще не из платформы берется

Этого я не могу сказать, так как все зависит от кода стратегии. Но что понятно, так это то, что на строчке 339 в классе SStrategy происходит обращение к нулевой ссылке. Возможно, это как раз Candle, которая отсутствует для запрашиваемого периода, а Ваша стратегия это не учитывает (что не правильно).

mr leng
mr leng Autor

переход с 1.8 на последнюю версию болезненый??

почему при формировании свечки Security имеет значения closePrice а Low,High и Open нулевые???

Mikhail Sukhov
Mikhail Sukhov

mr leng: переход с 1.8 на последнюю версию болезненый??

Ошибка в стратегии. Вряд ли переход поможет.

mr leng: почему при формировании свечки Security имеет значения closePrice а Low,High и Open нулевые???

А в Квике отличные от 0? Verifier что нибудь пишет? ProcessDataError выводит?

mr leng
mr leng Autor

в Квике отличные от 0

Verifier пишет что все впорядке

ProcessDataError нет))

примеры с рисованием свечей по таймфреймам работают норм.

вот код где ошибка выскакивает

var bounds = _timeFrameStra.GetCandleBounds(base.Trader);

        if (_nextTime < base.Trader.MarketTime)
        {
            var endOffset = TimeSpan.FromSeconds(1);
            bounds = new Range<DateTime>(_lastCandleTime + _timeFrameStra, bounds.Min - endOffset);

            // получаем сформированную свечку
            var candle = _candleManager.GetTimeFrameCandle(Security, _timeFrameStra, _nextTime - _timeFrameStra);
            _nextTime += _timeFrameStra;

            var candles = _candleManager.GetTimeFrameCandles(Security, _timeFrameStra, bounds);
           
           if (candles.Count() > 0)
            {
                 _lastCandleTime = candles.Max(c => c.Time);
            }

           if (candle == null)        return true;


         m = candle.LowPrice / 2;

candle приходит null

mr leng
mr leng Autor

а может быть не корректный dde экспорт связан с новой версией квика 5,18,0,386 ????

Mikhail Sukhov
Mikhail Sukhov

mr leng: а может быть не корректный dde экспорт связан с новой версией квика 5,18,0,386 ????

А какие колонки в таблице инструменты?

mr leng
mr leng Autor

таблица инструментов проходит нормально, все колонки стандартные а вот таблица со всеми сделками по всей видимости вообще не проходит и таблица с ордерами тоже

Mikhail Sukhov
Mikhail Sukhov

mr leng: таблица инструментов проходит нормально, все колонки стандартные а вот таблица со всеми сделками по всей видимости вообще не проходит и таблица с ордерами тоже

Мне кажется, или мы скачем с темы на тему?

mr leng
mr leng Autor

нет... просто у меня проблема - не формируются свечи в candleManager и я хочу разобраться в чем дело...и как это исправить.....я понял что данные по сделкам не проходят вот я и хочу узнать может это из-за новой версии квика??? потому что вывод через dde вроде поменялся...

Mikhail Sukhov
Mikhail Sukhov

mr leng: нет... просто у меня проблема - не формируются свечи в candleManager и я хочу разобраться в чем дело...и как это исправить.....я понял что данные по сделкам не проходят вот я и хочу узнать может это из-за новой версии квика??? потому что вывод через dde вроде поменялся...

ITrader.NewTrades вызывается?

mr leng
mr leng Autor

да, вызывается

Mikhail Sukhov
Mikhail Sukhov

mr leng: да, вызывается

Пример SampleCandle свечки строит?

mr leng
mr leng Autor

да.... SampleCandle свечки строит Sample выводим проходившие сделки

но мой пример который раньше работал, при переходе на другой комп перестал работать, просто пишет что candle null и таблицу заявок не отображает и т.д. как такое может быть, что экспорт происходит, он ни на что не ругается а данных нет???

Mikhail Sukhov
Mikhail Sukhov

mr leng: да.... SampleCandle свечки строит Sample выводим проходившие сделки

но мой пример который раньше работал, при переходе на другой комп перестал работать, просто пишет что candle null...

А этом другом компе примеры работают?

mr leng
mr leng Autor

да, примеры вроде работают. как такое может быть, что экспорт происходит, он ни на что не ругается а данных нет???

Mikhail Sukhov
Mikhail Sukhov

mr leng: да, примеры вроде работают. как такое может быть, что экспорт происходит, он ни на что не ругается а данных нет???

Ну тогда только отладка на том другом компе... Вы ошибку ищите в QuikTrader. А она вовсе не там. Не тратьте время в пустую. Запустите отладчик, и посмотрите, что не работает и почему.

mr leng
mr leng Autor

я конечно может и туплю, но почему после запуска экспорта dde в настройках вывода в квике автоматически с таблиц снимается галочка выводить формальные заголовки???

Mikhail Sukhov
Mikhail Sukhov

mr leng: я конечно может и туплю, но почему после запуска экспорта dde в настройках вывода в квике автоматически с таблиц снимается галочка выводить формальные заголовки???

Это делает сам QuikTrader.

mr leng
mr leng Autor

абсолютно одинаково создаю шлюз, но из одного приложения(стандартного примера) он работает а из моего выдает Неудалось подключиться к Quik. Возможно, в Quik-е не включена обработка внешних транзакций. Имя параметра: path

путь одинаковый, транзакции подключены поскольку один из примеров работает конкретно

Mikhail Sukhov
Mikhail Sukhov

mr leng: абсолютно одинаково создаю шлюз, но из одного приложения(стандартного примера) он работает а из моего выдает Неудалось подключиться к Quik. Возможно, в Quik-е не включена обработка внешних транзакций. Имя параметра: path

путь одинаковый, транзакции подключены поскольку один из примеров работает конкретно

Win Vista или 7-ка? Нужно чтобы еще робот и Квик запускался из под одних и тех же привилегий. Квик рекомендуется запускать из под админа. Если так делаете, то и робота так же нужно запускать из под админа.

mr leng
mr leng Autor

заменил пару dll на более ранние версии. все заработало. ума не преложу почему)

спасибо за советы)

avkar
avkar

mr leng: да, примеры вроде работают. как такое может быть, что экспорт происходит, он ни на что не ругается а данных нет???

У меня такая же ситуация, версия 2.6.2, функция GetTimeFrameCandles не возвращает результат. Свечи не приходят только при первом вызове, если вызвать функцию позже, то все будет ОК (у меня чтобы получить первый график нужно 2 раза нажать на кнопку:)). Дело скорее всего в том, что при первом вызове функции, она запускается раньше, чем выполниться построение первой свечи (событие NewCandles) в другом потоке, и функция возвращает пустой результат, не дождавшись. Я не стал заморачиваться, т.к. посчитал это особенностью библиотеки, хотя на самом деле это наверное можно назвать ошибкой.

Mikhail Sukhov
Mikhail Sukhov

avkar:

mr leng: да, примеры вроде работают. как такое может быть, что экспорт происходит, он ни на что не ругается а данных нет???

У меня такая же ситуация, версия 2.6.2, функция GetTimeFrameCandles не возвращает результат. Свечи не приходят только при первом вызове, если вызвать функцию позже, то все будет ОК (у меня чтобы получить первый график нужно 2 раза нажать на кнопку:)). Дело скорее всего в том, что при первом вызове функции, она запускается раньше, чем выполниться построение первой свечи (событие NewCandles) в другом потоке, и функция возвращает пустой результат, не дождавшись. Я не стал заморачиваться, т.к. посчитал это особенностью библиотеки, хотя на самом деле это наверное можно назвать ошибкой.

Так а что CandleManager должен возвращать, если еще свечек не построено?

avkar
avkar

Mikhail Sukhov: Так а что CandleManager должен возвращать, если еще свечек не построено?

В данном случае CandleManager должен возвращать пустое множество. Но неясность вводит ведь функция GetTimeFrameCandles, которая дает разные результаты за один и тот же прошедший период. Сначала мне показалось, что лучше было бы, если бы функция дожидалась формирования свеч, но сейчас, понимаю, что это не нужно. Поэтому насчет того, что это можно назвать ошибкой, я наверное погорячился, но отметить это в документации было бы хорошо.

Mikhail Sukhov
Mikhail Sukhov

avkar:

Mikhail Sukhov: Так а что CandleManager должен возвращать, если еще свечек не построено?

В данном случае CandleManager должен возвращать пустое множество. Но неясность вводит ведь функция GetTimeFrameCandles, которая дает разные результаты за один и тот же прошедший период. Сначала мне показалось, что лучше было бы, если бы функция дожидалась формирования свеч, но сейчас, понимаю, что это не нужно. Поэтому насчет того, что это можно назвать ошибкой, я наверное погорячился, но отметить это в документации было бы хорошо.

Мне все равно до конца не ясно. Нужно что отметить? Что она не дожидается формирования свечек?

avkar
avkar

Mikhail Sukhov: Мне все равно до конца не ясно. Нужно что отметить? Что она не дожидается формирования свечек?

Что функция не получает свечи из Квика, а возвращает только уже полученные свечи, и поэтому, если между RegisterTimeFrameCandles и GetTimeFrameCandles не прошло достаточно времени, возвращает пустое множество (или не все свечи).

Mikhail Sukhov
Mikhail Sukhov

avkar:

Mikhail Sukhov: Мне все равно до конца не ясно. Нужно что отметить? Что она не дожидается формирования свечек?

Что функция не получает свечи из Квика, а возвращает только уже полученные свечи, и поэтому, если между RegisterTimeFrameCandles и GetTimeFrameCandles не прошло достаточно времени, возвращает пустое множество (или не все свечи).

Насчет пустого множества согласен. И я сейчас посмотрел код, там как раз пустой массив и возвращается. У вас не так?

Насчет времени... Не думаю что это имеет вообще расписывать. Потому что на этом S# целиком построен. Те же ITrader.Security, Order, MyTrades - все они будут возвращать пустые массивы, пока не придут данные по экспорту.

mr leng
mr leng Autor

рецедив)))

происходит что-то вообще сумашедшее....

один раз запускаю получаю правильные свечи во второй раз получаю null в третий раз могу получить не правильную свечку(close или low не совпадпют с настоящим)

и это когда свечка уже точно сформироваться

хелп ми)

Greene-nsk
Greene-nsk

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

mr leng
mr leng Autor
class SmaStrategy : Strategy
{
    private readonly CandleManager _candleManager;
    private TimeSpan _timeFrameStra;
    private double m;

    private DateTime _nextTime;
    private string line;
    private string _ClientCode1;
    private int _VOL1;
    private bool _isClientChek1;

    public SmaStrategy(CandleManager candleManager, ITrader trader, int vol1, LH20 lh20, string clientcode1, string account, Security security, TimeSpan TimeFrameStra, bool isChek1, TimeSpan interval)
        : base(trader, account, security, interval)
    {
        _candleManager = candleManager;

        _timeFrameStra = TimeFrameStra;
        _ClientCode1 = clientcode1;
        _VOL1 = vol1;
        _isClientChek1 = isChek1;
        this.LH20 = lh20;
    }

    public LH20 LH20 { get; private set; }

    protected override void OnRunning()
    {
        // вычисляем время окончания текущей пятиминутки
        _nextTime = _timeFrameStra.GetCandleBounds(base.Trader).Max;

        base.OnRunned();
    }

    protected override bool OnProcess()
    {
        // если наша стратегия в процессе остановки
        if (base.ProcessState == StrategyProcessStates.Stopping)
        {
                            base.Orders.Where(o => o.State == OrderStates.Active).ForEach(base.Trader.GuarantyCancelOrder);
            return false;
        }



        if (base.Trader.MarketTime < _nextTime)
        {
            return true;
        }



        if (base.Trader.MarketTime > _nextTime)
        {
            // получаем сформированную свечку
            var candle = _candleManager.GetTimeFrameCandle(Security, _timeFrameStra, _nextTime - _timeFrameStra);
 
      _nextTime += _timeFrameStra;

            
            //     if (candle == null)
            //       return true;
            var t = candle.ClosePrice;
            var t1 = candle.LowPrice ;
            var t2 = candle.HighPrice;
            var t3 = candle.OpenPrice;
            var ty = 0;
                        }
            return true;
       
    }

}

ничего всехр естественного, вот этот код и выводит то нормальные свечи то ненормальные(

Mikhail Sukhov
Mikhail Sukhov

mr leng: class SmaStrategy : Strategy {

... ничего всехр естественного, вот этот код и выводит то нормальные свечи то ненормальные(

Я так понял, что это стратегия из моего примера? Во-первых, в ней есть ошибки (я нашел их, когда тестировал ее на истории в 3.0). Во-вторых, я нашел не все.😀 Все таки нужно отдавать отчет в том, что примеры - это больше популистское, чем практичное.

avkar
avkar

Сначала нужно зарегистрировать ваш тайм-фрейм для инструмента с помощью функции RegisterTimeFrameCandles, а потом уже получать свечи, а в вашем коде я этого не вижу.

avkar
avkar

Mikhail Sukhov: Насчет пустого множества согласен. И я сейчас посмотрел код, там как раз пустой массив и возвращается. У вас не так?

Да, при первом вызове GetTimeFrameCandles всегда возвращается пустое множество. При следующих вызовах, бывают, что свечи выходят не полностью, но это происходит только, если квик только-что загрузился, и таблица всех сделок еще до конца не заполнилась с сервака.

mr leng
mr leng Autor

тайм фрейм регистрировал вызывал уже после формирования свечи все равно

перешел последнию версию тьфу-тьфу-тьфу