стал вдруг получать ошибку в дочерней стратегии при переходе на 2.2


стал вдруг получать ошибку в дочерней стратегии при переходе на 2.2
Atom
27.07.2010


Приветствую, Михаила и коллег!

Переписываю роботов под новую логику стратегий. При котирование в
OnProcess стал получать NullReferenceException

Вот кусок кода

public class MyStrategy : ActionStrategy
{
public MarketQuotingStrategy strategy;

......................skipped

protected override bool OnProcess()

.......skipped
// создаем заявку
var order = base.CreateOrder(Direct, IsMarket ?
base.Security.GetMarketPrice(Direct,
MarketPriceTypes.Opposite):base.Security.GetMarketPrice(Direct,
MarketPriceTypes.Following), base.Volume);
// регистрируем заявку (обычным способом -
лимитированной заявкой)

if (IsMarket){base.RegisterOrder(order);}
else
{

// регистрируем заявку (через котирование)
strategy = new MarketQuotingStrategy(order, new
Unit().Value = PD);
if (strategy != null)
{
strategy.Start(); //ТУТ ОШИБКА
base.ChildStrategies.Add(strategy);
}

}

NullReferenceException В экземпляре объекта не задана ссылка на
объект.
в строке strategy.Start();

в 2.1 всё работало. Что я не учёл?

Спасибо и с уважением!

Теги:


Спасибо:


1 2  >
Mikhail Sukhov

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


О! А вот это хорошее замечание. Надо про это написать:

base.ChildStrategies.Add(strategy);
strategy.Start();

Спасибо:

ustas

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


Спасибо, поменял местами, по Вашему совету.

Но стал получать другую ошибку

Необработанное исключение: System.InvalidOperationException:
Последовательность не содержит элементов
в System.Linq.Enumerable.Min[TSource](IEnumerable`1 source)
в System.Linq.Enumerable.Min[TSource,TResult](IEnumerable`1 source,
Func`2 selector)
в Ecng.Trading.Algo.Strategy(SynchronizedCollection`1 ☻)
в Ecng.Collections.CollectionHelper.SyncGet[TCollection,TResult]
(TCollection collection, Func`2 func)
в Ecng.Trading.Algo.Strategy.♫()
в Ecng.Trading.Algo.StrategyManager.♠.☻(SynchronizedList`1 ☻)
в Ecng.Collections.CollectionHelper.SyncGet[TCollection,TResult]
(TCollection collection, Func`2 func)
в Ecng.Trading.Algo.StrategyManager.☻(Object ☻)
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart(Object obj)

Спасибо и с уважением!

Спасибо:

ustas

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


Вопрос пока не снимается, это, похоже, я туплю.
а PriceDelta - да, выставляется.

Спасибо и с уважением!

Спасибо:

ustas

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


Приветствую, Михаил!

После Вашего последнего изменения 2.2 те ошибки что выше в этой теме
ушли. Спасибо огромное!
Дошел до котирования, но оно перестало работать. Заявки даже не
выставляются.

Спасибо и с уважением!

Вот лог:

10:25:33.5763796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:33.5773796 MQS MQS останавливается.
10:25:34.6693796 MQS Котирование закончилось.
10:25:34.6693796 MQS MQS остановлена.
10:25:35.7113796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:35.7113796 MQS MQS останавливается.
10:25:36.7133796 MQS Котирование закончилось.
10:25:36.7133796 MQS MQS остановлена.
10:25:38.5023796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:38.5033796 MQS MQS останавливается.
10:25:39.5773796 MQS Котирование закончилось.
10:25:39.5773796 MQS MQS остановлена.
10:25:40.6703796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:40.6703796 MQS MQS останавливается.
10:25:41.7133796 MQS Котирование закончилось.
10:25:41.7133796 MQS MQS остановлена.
10:25:42.5793796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:42.5793796 MQS MQS останавливается.
10:25:43.6703796 MQS Котирование закончилось.
10:25:43.6703796 MQS MQS остановлена.
10:25:44.7133796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:44.7143796 MQS MQS останавливается.
10:25:46.5033796 MQS Котирование закончилось.
10:25:46.5033796 MQS MQS остановлена.
10:25:47.5773796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:47.5773796 MQS MQS останавливается.
10:25:48.6703796 MQS Котирование закончилось.
10:25:48.6703796 MQS MQS остановлена.
10:25:49.7143796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:49.7143796 MQS MQS останавливается.
10:25:51.5033796 MQS Котирование закончилось.
10:25:51.5043796 MQS MQS остановлена.
10:25:52.5773796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:52.5773796 MQS MQS останавливается.
10:25:52.5823796 MQS Котирование закончилось.
10:25:52.5823796 MQS MQS остановлена.
10:25:53.6713796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:25:53.6713796 MQS MQS останавливается.
10:28:45.6923796 MQS Котирование закончилось.
10:28:45.6923796 MQS MQS остановлена.
10:28:45.6933796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:28:45.6933796 MQS MQS останавливается.
10:28:47.6923796 MQS Котирование закончилось.
10:28:47.6923796 MQS MQS остановлена.
10:28:49.6923796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:28:49.6923796 MQS MQS останавливается.
10:28:51.6923796 MQS Котирование закончилось.
10:28:51.6923796 MQS MQS остановлена.
10:28:53.6923796 MQS Заканчиваем котирование с неисполненным объемом
равный 2 контрактов.
10:28:53.6923796 MQS MQS останавливается.

Спасибо:

Mikhail Sukhov

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


Ага, еще одна ошибка. Перегрузите функцию CanFinish()

protected override bool CanFinish()
{
return base.LeftContracts == 0;

Спасибо:

ustas

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


наверно имелось в виду

return base.LeftPosition == 0; // LeftContracts не нашёл

Создал класс (ниже)
Котирование вроде заработало, но ещё буду смотреть дальше внимательно.

Большое спасибо и с уважением!

{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ecng.Collections;
using Ecng.Trading.Algo;
using Ecng.Trading.BusinessEntities;

class MyMarketQuotingStrategy: MarketQuotingStrategy
{
public MyMarketQuotingStrategy(Order order, Unit priceDelta) :
base(order, priceDelta)
{
}
protected override bool CanFinish()
{
return base.LeftPosition == 0;
}

}

Спасибо:

Garry

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


Добрый день, переопределил метод CanFinish() как сказано выше, но у
меня появилась другая проблемма, почему-то MyMarketQuotingStrategy не
забирает управление, т.е. метод OnProcess родительской стратегии
продолжает вызываться, при этом плодятся новые MyMarketQuotingStrategy
и соответсвенно заявки. Делаю все как сказанно выше:
base.ChildStrategies.Add(strategy);
strategy.Start();

вот лог

MQS запущена.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324448 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324449 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324450 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324451 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324452 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324453 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
Цена текущей 84,55 и лучшей 84,55.
Runned
Регистрация новой заявки на Buy с ценой 84,55 и объемом 1.
Runned
Заявка 42324454 на Buy отправлена с ценой 84,55 объемом 1.
Runned
MQS запущена.
Runned
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324448.
Stopping
Котирование отменяет активную заявку 42324448.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324449.
Stopping
Котирование отменяет активную заявку 42324449.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324450.
Stopping
Котирование отменяет активную заявку 42324450.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324451.
Stopping
Котирование отменяет активную заявку 42324451.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324452.
Stopping
Котирование отменяет активную заявку 42324452.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324453.
Stopping
Котирование отменяет активную заявку 42324453.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование заканчивается на заявке 42324454.
Stopping
Котирование отменяет активную заявку 42324454.
Stopping
MQS остановлена.
Stopped
MQS останавливается.
Stopping
Котирование закончилось.
Stopping
MQS остановлена.
Stopped
Спасибо:

ustas

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


Кстати, да, подтверждаю и присоединяюсь к вопросу.
Самому пришлось обходить такое поведение семафорчиками.

Т.е. работает не совсем так как описано тут.

http://stocksharp.com/doc/help/html/8ea639f6-ce74-4a00-9f13-db59c8c23...


Ожидалось, что при вызове родительского OnProcess будет выполняться
вначале дочерний OnProcess.
А сейчас наоборот. При вызове дочернего OnProcess выполняется
родительский OnProcess причём, похоже, первым.

Спсибо и с уважением!

Спасибо:

Mikhail Sukhov

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


А как Вы узнали, что они именно плодяться? Вы их случаем не
пересоздаете сами из свой основной стратегии?

Спасибо:

ustas

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


И еще вопрос в догонку.

Михаил, отфильтровывается ли стакан (GetFilteredQuotes) от своих
собственных заявок в стратегии MarketQuotingStrategy ?
По поведению кажется что нет. Почему? Или мне только кажется и дело в
скорости (интервале) ?

Спасибо и с уважением!

Спасибо:
1 2  >

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

loading
clippy