candlemanager))
Atom Ответить
02.02.2011


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

Теги:


Спасибо:




38 Ответов
< 1 2 
avkar

Фотография
Дата: 06.02.2011
Ответить


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.02.2011
Ответить


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


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


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

avkar

Фотография
Дата: 07.02.2011
Ответить


Mikhail Sukhov Перейти

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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.02.2011
Ответить


avkar Перейти
Mikhail Sukhov Перейти

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


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


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

avkar

Фотография
Дата: 07.02.2011
Ответить


Mikhail Sukhov Перейти


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.02.2011
Ответить


avkar Перейти
Mikhail Sukhov Перейти


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


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


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

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

mr leng

Фотография
Дата: 08.02.2011
Ответить


рецедив)))

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

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

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

хелп ми)
Автор топика
Спасибо:

Greene-nsk

Фотография
Дата: 08.02.2011
Ответить


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

mr leng

Фотография
Дата: 08.02.2011
Ответить



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;

}

}



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

avkar

Фотография
Дата: 08.02.2011
Ответить


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

avkar

Фотография
Дата: 08.02.2011
Ответить


Mikhail Sukhov Перейти

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


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

mr leng

Фотография
Дата: 09.02.2011
Ответить


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

перешел последнию версию
тьфу-тьфу-тьфу
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 10.02.2011
Ответить


mr leng Перейти

class SmaStrategy : Strategy
{

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


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

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy