[BLOCKER] [S#3.0beta] трейды не регистрируются под статегией
Atom Ответить
09.02.2011


Есть стратегия унаследованная от TimeFrameStrategy.

Для каждой новой свечки делается следующее:
Код

OpenWealth.Log.Out("ДО отмены приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());

// отменяем активные заявки
base.CancelActiveOrders();

OpenWealth.Log.Out("ПОСЛЕ отмены приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());

// регистрируем заявки (обычным способом, без котирования)
StrategyInstance.Alerts.ForEach(a => base.RegisterOrder(Translations.AlertToOrder(a)));

System.Threading.Thread.Sleep(10000);
OpenWealth.Log.Out("ПОСЛЕ регистрации новых приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());


Для каждой свечки (для одной итерации) создаются два ордера.
Вывод на второй свечке (на первой аналогично добавились только в общий список):
Код

09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ДО отмены приказов
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ отмены приказов
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 -1 Conditional
09.02.2011 19:41:35 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1 Conditional
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ регистрации новых приказов
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4


На третьей свечке добавляются наконец в список стратегии, но только в стоп ордера:
Код

09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ДО отмены приказов
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ отмены приказов
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4
09.02.2011 19:51:37 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 -1 Conditional
09.02.2011 19:51:37 [OpenWealth.HeadRealTradeStockSharp.OnOrderChanged] Ордер изменен. Состояние: Active статус: ReceiveByServer время снятия: бумага: RTS-3.11 b/s: Sell средняя цена: 0 тип: Conditional
09.02.2011 19:51:37 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1 Conditional
09.02.2011 19:51:37 [OpenWealth.HeadRealTradeStockSharp.OnOrderChanged] Ордер изменен. Состояние: Active статус: ReceiveByServer время снятия: бумага: RTS-3.11 b/s: Buy средняя цена: 0 тип: Conditional
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ регистрации новых приказов
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 2
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 2
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 6
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 6


Т.е. 2е ошибки:
1. ордера не всегда добавляются в список ордеров стратегии (чаще не добавляются)
2. в одном случае стоп ордер добавляется в Orders и StopOrders, в другом только в StopOrders

Что я делаю не так?

Теги:


Спасибо:




34 Ответов
1 2  >
Mikhail Sukhov

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


ITrader.Orders возвращает и обычные заявки, и стоп заявки. В отличие от Strategy.Orders, где только обычные заявки. Плюс СмартКом асинхронен. Тоесть заявки добавляются только тогда, когда они успешно регистрируются.

В свете этого проблема прояснилась?
Спасибо:

Greene-nsk

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


Немного прояснилась. Значит главная проблема в следующем:
больше чем в половине случаев заявки регистрируются в реале но не регистрируются в SmartTrade.

Я думаю, это может происходить из-за того, что StartTrade регистрирует заявку только после OrderSucceeded и затем UpdateOrder. Если событие UpdateOrder приходит раньше, чем OrderSucceeded (в SmartCOM это происходит в половине случаев) - заявка не появляется в Startegy.StopOrders.

И еще такой вопрос ради любопытства. Зачем такая разница? Что в Trader.Orders одно, а в Startegy.Orders другое.
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
Немного прояснилась. Значит главная проблема в следующем:
больше чем в половине случаев заявки регистрируются в реале но не регистрируются в SmartTrade.

Я думаю, это может происходить из-за того, что StartTrade регистрирует заявку только после OrderSucceeded и затем UpdateOrder. Если событие UpdateOrder приходит раньше, чем OrderSucceeded (в SmartCOM это происходит в половине случаев) - заявка не появляется в Startegy.StopOrders.


Это Вы проверили через SmartComWrapper? Вообще я уже сталкивался сам с подобным, поэтому такая ситуация должна разруливаться.

Greene-nsk Перейти

И еще такой вопрос ради любопытства. Зачем такая разница? Что в Trader.Orders одно, а в Startegy.Orders другое.


Исторически сложилось. Сейчас уже проблемно менять.
Спасибо:

Greene-nsk

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


сейчас проверю через врапер, но факт остается фактом. Приходит событие NewOrders и не приходят UpdateOrders - заявка регистрируется только в Trader.StopOrders, но не в Startegy.StopOrders. И это происходит часто.
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
сейчас проверю через врапер, но факт остается фактом. Приходит событие NewOrders и не приходят UpdateOrders - заявка регистрируется только в Trader.StopOrders, но не в Startegy.StopOrders. И это происходит часто.


ITrader.NewOrders? Тоесть заявка получает номер от Смарта? А ITrader.NewStopOrders?
Спасибо:

Greene-nsk

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


Выставлено 6 заявок. В ITrader.Orders и ITrader.StopOrders пришли все 6. В Strategy.StopOrders только 2. Хотя все зарегистрированы одинаково через стратегию.

Код

09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 2
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 6
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 6
Автор топика
Спасибо:

Greene-nsk

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


А. стоп. Вы про события? Я раньше думал, что Orders и StopOrders нигде не пересекаются, поэтому лил обе:
this.Trader.NewOrders += Smart_NewOrders;
this.Trader.NewStopOrders += Smart_NewOrders;

Приходит только одно из них. А должны приходить оба?
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
А. стоп. Вы про события? Я раньше думал, что Orders и StopOrders нигде не пересекаются, поэтому лил обе:
this.Trader.NewOrders += Smart_NewOrders;
this.Trader.NewStopOrders += Smart_NewOrders;

Приходит только одно из них. А должны приходить оба?


Вообще да. В первом приходит для всех заявок. Во втором, только для обычных... А как Вы создаете стоп заявку?
Спасибо:

Greene-nsk

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


Код

base.RegisterOrder(a.ToOrder());

static public Order ToOrder(this Alert a)
{
OrderDirections orderDirection;
string comment = "";
switch (a.AlertType)
{
case TradeType.Buy:
orderDirection = OrderDirections.Buy;
break;
case TradeType.Cover:
orderDirection = OrderDirections.Buy;
comment = a.Position.PositionID.ToString();
break;
case TradeType.Short:
orderDirection = OrderDirections.Sell;
break;
case TradeType.Sell:
orderDirection = OrderDirections.Sell;
comment = a.Position.PositionID.ToString();
break;
default:
Log.OutErrorFatal("Такое направление не поддерживается: " + a.AlertType);
return null;
}

OrderTypes orderType;
double price = 0.0;
StopCondition stopCond = null;

switch (a.OrderType)
{
case OrderType.Limit:
orderType = OrderTypes.Limit;
price = a.Price;
break;
case OrderType.Market:
orderType = OrderTypes.Market;
break;
case OrderType.Stop:
orderType = OrderTypes.Conditional;
price = a.Bars.SymbolInfo.WorseOnTicks(
a.Price,
(orderDirection == OrderDirections.Buy) ? PositionType.Long : PositionType.Short,
2);
stopCond = new SmartStopCondition
{
IsOneDay = false,
StopPrice = a.Price,
};
break;
default:
Log.OutErrorFatal("Такой тип не поддерживается: " + a.OrderType);
return null;
}

return new Order
{
Type = orderType,
Portfolio = Const.SmartInstance.Portfolio(Const.Params.PortfolioName),
Volume = a.Shares,
Price = price,
Security = Const.SmartInstance.Security(a.Symbol),
Direction = orderDirection,
StopCondition = stopCond,
Comment = comment,
};



Автор топика
Спасибо:

Mikhail Sukhov

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


Так, код явно не тривиален. А вот когда приходят только ITrader.NewOrders Вы уверены, что это стоп заявки? Плюс, отключит SmartTrader.AutoSave.
Спасибо:

Greene-nsk

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


Это стоп заявки, через веб интрефейс на них смотрю - у них все в порядке.

Проверил через врапер. Я подписан на события:
ITrader.NewOrders += Smart_NewOrders;
strategy.NewOrder += OnNewOrder;
strategy.NewStopOrder += OnNewOrder;
strategy.OrderChanged += OnOrderChanged;
strategy.StopOrderChanged += OnOrderChanged;

Код

10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ отмены приказов
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 0
10.02.2011 20:01:54 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 0
10.02.2011 20:01:55 [OpenWealth.StockSharp.SmartCOM.<Init>b__0] Wrapper new order: 71839626 544268683
10.02.2011 20:01:56 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BP5758-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Buy StOrder_Type_StopLimit False
10.02.2011 20:01:56 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BP5758-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Buy StOrder_Type_StopLimit False
10.02.2011 20:01:56 [OpenWealth.HeadRealTradeStockSharp.OnOrderChanged] Ордер изменен. Состояние: Active статус: ReceiveByServer время снятия: бумага: RTS-3.11 b/s: Buy средняя цена: 0 тип: Conditional
10.02.2011 20:01:56 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BP5758-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_StopLimit False
10.02.2011 20:01:56 [OpenWealth.StockSharp.SmartCOM.<Init>b__0] Wrapper new order: 71839625 544268689
10.02.2011 20:01:56 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BP5758-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_StopLimit False
10.02.2011 20:02:04 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ регистрации новых приказов
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 1
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 1
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 2
10.02.2011 20:02:05 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 2


После выполнения:
1. в itinvest веб интрефейсе обе заявки, которые и должны быть
2. в Trader.Orders и Trader.StopOrders 2 стоп заявки sell и buy какие и должны быть
3!!! Пришло только одно событие strategy.StopOrderChanged для стоп ордера buy. для sell не пришло.
4!!! Не пришло ни одного события ITrader.NewOrders

Видно, что для события sell врапер orderChanged метод пришел раньше, чем NewOrder. Но это только предположение. Может быть это совпадение.
Автор топика
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Так, код явно не тривиален. А вот когда приходят только ITrader.NewOrders Вы уверены, что это стоп заявки? Плюс, отключит SmartTrader.AutoSave.


Я не говорил, что приходят только ITrader.NewOrders. Как видно из последнего теста как раз наоборот, они и не приходят. Приходили только ITrader.NewStopOrders, хотя регистрация идет в оба списка.
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
Mikhail Sukhov Перейти
Так, код явно не тривиален. А вот когда приходят только ITrader.NewOrders Вы уверены, что это стоп заявки? Плюс, отключит SmartTrader.AutoSave.


Я не говорил, что приходят только ITrader.NewOrders. Как видно из последнего теста как раз наоборот, они и не приходят. Приходили только ITrader.NewStopOrders, хотя регистрация идет в оба списка.


Так, я видимо сам ошибку. Посмотрел в документацию, ITrader.NewOrders для стоп заявок не должен вызываться. Так что это правильно. Термин "в оба списка" мне не совсем понятен.
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти

Так, я видимо сам ошибку. Посмотрел в документацию, ITrader.NewOrders для стоп заявок не должен вызываться. Так что это правильно. Термин "в оба списка" мне не совсем понятен.


Имел ввиду эти: ITrader.Orders и ITrader.StopOrders.

Про основную ошибку, что трейды не добавляются в strategy.NewStopOrders посмотрите? Я могу еще как-нибудь помочь?
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
Mikhail Sukhov Перейти

Так, я видимо сам ошибку. Посмотрел в документацию, ITrader.NewOrders для стоп заявок не должен вызываться. Так что это правильно. Термин "в оба списка" мне не совсем понятен.


Имел ввиду эти: ITrader.Orders и ITrader.StopOrders.

Про основную ошибку, что трейды не добавляются в strategy.NewStopOrders посмотрите? Я могу еще как-нибудь помочь?


Да, посмотрю, конечно. Только нужно все четко выяснить. Проблема в стоп заявках и только? Обычные работают номрмально? ITrader.NewStopOrders вызывается? Strategy.NewStopOrders не вызывается? SmartTrader.AutoSave = false?
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
Mikhail Sukhov Перейти

Так, я видимо сам ошибку. Посмотрел в документацию, ITrader.NewOrders для стоп заявок не должен вызываться. Так что это правильно. Термин "в оба списка" мне не совсем понятен.


Имел ввиду эти: ITrader.Orders и ITrader.StopOrders.

Про основную ошибку, что трейды не добавляются в strategy.NewStopOrders посмотрите? Я могу еще как-нибудь помочь?


Да, посмотрю, конечно. Только нужно все четко выяснить. Проблема в стоп заявках и только? Обычные работают номрмально? ITrader.NewStopOrders вызывается? Strategy.NewStopOrders не вызывается? SmartTrader.AutoSave = false?


1. другие заявки не смотрел. использую только стоп пока.
2. ITrader.NewStopOrders вызывается
3. когда проблема случается, Strategy.NewStopOrders не вызывается
4. Trader.IsAutoSaveOrders = false;
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти

1. другие заявки не смотрел. использую только стоп пока.
2. ITrader.NewStopOrders вызывается
3. когда проблема случается, Strategy.NewStopOrders не вызывается
4. Trader.IsAutoSaveOrders = false;


Вы писали до этого что работаете с ITrader.Orders и ITrader.StopOrders, поэтому вполне мог подумать, что и с обычными глючит. Можете еще показать код, как Вы регистрируете стратегию?
Спасибо:

Greene-nsk

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


Код


public class StrategyAdapter : TimeFrameStrategy
{
...
}
// создаем менеджер стратегий
StrategyManager = new RealTimeStrategyManager(Const.SmartInstance.Trader);
...
foreach (WealthScript strategy in StrategiesInfo.Strategies)
{
StrategyAdapter sAdapter = new StrategyAdapter(strategy);
...
Log.Out("Регистрируем стратегию: " + sAdapter.StrategyInstance.strategyID);
StrategyManager.Register(sAdapter, portfolio, security);
...
sAdapter.Start();
}

Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
Код

StrategyAdapter sAdapter = new StrategyAdapter(strategy);
...
Log.Out("Регистрируем стратегию: " + sAdapter.StrategyInstance.strategyID);
StrategyManager.Register(sAdapter, portfolio, security);


Я так понимаю, StrategyAdapter - это наследник от Strategy? А список заявок вы смотрите в sAdapter или в переданном strategy?
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти
Код

StrategyAdapter sAdapter = new StrategyAdapter(strategy);
...
Log.Out("Регистрируем стратегию: " + sAdapter.StrategyInstance.strategyID);
StrategyManager.Register(sAdapter, portfolio, security);


Я так понимаю, StrategyAdapter - это наследник от Strategy? А список заявок вы смотрите в sAdapter или в переданном strategy?


Все смотрю и заявки исполняю из StrategyAdapter sAdapter (производный от TimeFrameStrategy). Из WealthScript strategy берется только инфа о приказах на исполнение.
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти
Mikhail Sukhov Перейти
Greene-nsk Перейти
Код

StrategyAdapter sAdapter = new StrategyAdapter(strategy);
...
Log.Out("Регистрируем стратегию: " + sAdapter.StrategyInstance.strategyID);
StrategyManager.Register(sAdapter, portfolio, security);


Я так понимаю, StrategyAdapter - это наследник от Strategy? А список заявок вы смотрите в sAdapter или в переданном strategy?


Все смотрю и заявки исполняю из StrategyAdapter sAdapter (производный от TimeFrameStrategy). Из WealthScript strategy берется только инфа о приказах на исполнение.


Багу(-и) подтверждаю. Фикс будет в 3.0.2.
Спасибо:

Mikhail Sukhov

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


Mikhail Sukhov Перейти

Багу(-и) подтверждаю. Фикс будет в 3.0.2.


Кстати, если есть соображения, то готов обсудить. Суть проблемы как раз та, которую Вы писали - UpdateOrder приходит раньше OrderSucceeded. Из-за этого создается новый объект Order, не тот, который был зарегистрирован в Strategy. Соответственно, событие ITrader вызывается, но сама заявку в стратегию не попадает.

Все было бы ничего, но в UpdateOrder нет параметра, который передается пользователем при регистрации (он есть только у OrderSucceeded).
Спасибо:

Greene-nsk

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


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

Багу(-и) подтверждаю. Фикс будет в 3.0.2.


Кстати, если есть соображения, то готов обсудить. Суть проблемы как раз та, которую Вы писали - UpdateOrder приходит раньше OrderSucceeded. Из-за этого создается новый объект Order, не тот, который был зарегистрирован в Strategy. Соответственно, событие ITrader вызывается, но сама заявку в стратегию не попадает.

Все было бы ничего, но в UpdateOrder нет параметра, который передается пользователем при регистрации (он есть только у OrderSucceeded).


Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.
Автор топика
Спасибо:

Mikhail Sukhov

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


Greene-nsk Перейти

Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.


Вот это в C# работать не будет. У вас ссылка в коде на один объект, а реально будет создан другой.
Спасибо:

Greene-nsk

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


Mikhail Sukhov Перейти
Greene-nsk Перейти

Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.


Вот это в C# работать не будет. У вас ссылка в коде на один объект, а реально будет создан другой.


Ну я же условно говоря.. В SmartServer_OrderSucceeded приходят cookie (т.е. вы знаете из какой этот ордер стратегии) и system_order_id (по нему вы знаете, приходил ли UpdateOrder, и если приходил, то какой). Т.е. вся нужная информация есть. В один из ордеров сливаем всю инфу, другой удаляем.
Автор топика
Спасибо:
1 2  >

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

loading
clippy