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] Все таки нужно отдавать отчет в том, что примеры - это больше популистское, чем практичное.
|
|
Спасибо:
|
|
|
|