Не работают правила BestAskPriceMore и BestAskPriceLess

Не работают правила BestAskPriceMore и BestAskPriceLess
Atom
3/2/2012
vader


Не работают правила BestAskPriceMore и BestAskPriceLess.
Создал их относительно одной цены - ни одно из них не сработало.
При этом MarketDepthChanged.

Версия S# - исправленная версия 4.0.20.

Tags:


Thanks:


<< < 2 3 4 
vader

Avatar
Date: 3/11/2012
Reply


"Quik\Sample попробовали?"
Да попробовал.

"И что у вас на 167 строке что он так ругается? :)"
System.Diagnostics.Debug.WriteLine("securitys " + p.BestAsk.Price.ToString() + " " + p.BestBid.Price.ToString());

Я просто перенес обработку событи туда, без изменений.
BestAsk оказался null, вот и ругается.
Thanks:

Alexander

Avatar
Date: 3/11/2012
Reply


ну и как с SampleQuik?
Давайте через скайп (amukhanchikov), быстрее будет.
Thanks:

vader

Avatar
Date: 3/12/2012
Reply


К сожадению не обладаю возможностью использовать скайп.

Касательно SampleQuik.
Модифицировал его таким образом.
Code

Trader.Connected += () => this.GuiAsync(() => ExportDde.IsEnabled = true);

Trader.SecuritiesChanged += (Trader_SecuritiesChanged); // мой код

ShowSecurities.IsEnabled = ShowTrades.IsEnabled = 
...

private void Trader_SecuritiesChanged(IEnumerable<Security> securitys)
        {
            foreach(Security p in securitys) {
                if(p == null) {
                    System.Diagnostics.Debug.WriteLine("p == null");
                }
                if(p.BestAsk == null) {
                    System.Diagnostics.Debug.WriteLine("p.BestAsk == null");
                }
                if(p.BestBid == null) {
                    System.Diagnostics.Debug.WriteLine("p.BestBid == null");
                }
                //System.Diagnostics.Debug.WriteLine("securitys " + p.BestAsk.Price.ToString() + " " + p.BestBid.Price.ToString());
            }
        }


Результат такой.
p.BestAsk == null
p.BestBid == null
p.BestAsk == null
p.BestBid == null
p.BestAsk == null
p.BestBid == null
Thanks:

Alexander

Avatar
Date: 3/13/2012
Reply


Правильно, экспорт по стакану не запущен ведь у вас, потому там и идут null

Попробовал в последние 5 минут вечерней сессии - запустил экспорт стакана (просто его открыв из Sample -> инструменты -> стакан) - ни разу не пришло null в биде или аске.

Завтра попробую с утра минут 10-15 погонять. Удивлюсь, если возникнет хоть 1 null.
Thanks:

Alexander

Avatar
Date: 3/13/2012
Reply


Гоняю полчаса после старта экспорта стакана - ни разу не возникло сообщения что либо bid, либо ask равен null.
Thanks:

Alexander

Avatar
Date: 3/13/2012
Reply


Далее. Переписал код класса стратегии Quik\SampleSma, сделал его таким
Code
	class SmaStrategy : Strategy
	{
		public SmaStrategy(CandleManager candleManager, SimpleMovingAverage longSma, SimpleMovingAverage shortSma, TimeSpan timeFrame)
		{
			LongSma = longSma;
			ShortSma = shortSma;
		}

		public SimpleMovingAverage LongSma { get; private set; }
		public SimpleMovingAverage ShortSma { get; private set; }

		protected override void OnStarting()
		{
			this.When(Security.BestBidPriceMore(0.0001)).Do(OnProcess);
			this.When(Security.BestBidPriceMore(new Unit(1800, UnitTypes.Limit))).Do(OnProcess2);

			base.OnStarting();
		}

		protected void OnProcess()
		{
			System.Diagnostics.Debug.WriteLine("Rule succeeded");
		}

		protected void OnProcess2()
		{
			System.Diagnostics.Debug.WriteLine("Rule2 succeeded");
		}
	}


всё сработало, правило успешно сработало при повышении лучшего бида на 0.0001 и лучшего бида значения 1800 (пример работает с лукойлом).

Собственно возникает вопрос в связи с чем это всё не работает у вас.
Может вы не так работаете с типом Unit, который передаётся в правило?
Thanks:

vader

Avatar
Date: 3/13/2012
Reply


Да, я понял, что у меня неправило было.
Я делал либо так.
this.When(Security.BestAskPriceLess(new Unit(_priceOfTask)))
.Do(SayPrice);
либо так
this.When(Security.BestAskPriceLess((_priceOfTask)))
.Do(SayPrice);

decimal _priceOfTask.
Thanks:

Alexander

Avatar
Date: 3/13/2012
Reply


vader
Да, я понял, что у меня неправило было.
Я делал либо так.
this.When(Security.BestAskPriceLess(new Unit(_priceOfTask)))
.Do(SayPrice);
либо так
this.When(Security.BestAskPriceLess((_priceOfTask)))
.Do(SayPrice);

decimal _priceOfTask.


Это равносильно :)
По умолчанию и там и там у вас создаётся Unit с типом Absolute, т.е. смотрится превышение на эту величину.
Thanks:

vader

Avatar
Date: 3/13/2012
Reply


Александр, спасибо за помощь и за разъяснение.
Thanks:
<< < 2 3 4 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy