Alexander
|
Date: 7/21/2011
Анализируем последнюю цену.
Если она <= (>=) x - создаём новый stop-order с нужными нам условиями, делаем ему RegisterOrder.
|
|
|
|
Thanks:
|
|
|
|
|
|
raf
|
Date: 7/21/2011
Alexander:
Анализируем последнюю цену.
Если она <= (>=) x - создаём новый stop-order с нужными нам условиями, делаем ему RegisterOrder.
Какие параметры надо задать new Order(), чтобы стоп по достижении условий выставил заявку по рынку?
Например, так не получается задать стоп:
var stoporder = new Order
{
Portfolio = this.Portfolio,
Type = OrderTypes.Conditional,
Volume = lots,
Price = 0, ///////// smartcom ругается
Direction = OrderDirections.Sell,
StopCondition = new SmartStopCondition
{
IsOneDay = true,
StopPrice = stopPrice,
}
}
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 7/21/2011
raf:
Alexander:
Анализируем последнюю цену.
Если она <= (>=) x - создаём новый stop-order с нужными нам условиями, делаем ему RegisterOrder.
Какие параметры надо задать new Order(), чтобы стоп по достижении условий выставил заявку по рынку?
Например, так не получается задать стоп:
var stoporder = new Order
{
Portfolio = this.Portfolio,
Type = OrderTypes.Conditional,
Volume = lots,
Price = 0, ///////// smartcom ругается
Direction = OrderDirections.Sell,
StopCondition = new SmartStopCondition
}
Если это фортс, то на фортсе рыночных заявок нет.
Пользуйтесь или котированием, либо заявками с ценой равной ценой лимита по инструменту.
|
|
|
|
Thanks:
|
|
|
|
|
|
raf
|
Date: 7/26/2011
Брокер позволяет делать такие заявки

в Stock#.chm в главе SmartCom написано
var stopOrder = new Order
{
Portfolio = (Portfolio)this.Portfolio.SelectedValue,
Type = OrderTypes.Conditional,
Volume = this.Volume.Text.To<int>(),
Price = this.Price.Text.To<decimal>(),
Security = this.Security,
Direction = this.IsBuy.IsChecked == true ? OrderDirections.Buy : OrderDirections.Sell,
StopCondition = new SmartStopCondition
,
};
Если значение Order.Price равно 0, то будет создана стоп-заявка, при исполнении которой будет зарегистрирована рыночная заявка (OrderTypes.Market). Если значение не равно 0, то будет зарегистрирована лимитированная заявка (OrderTypes.Limit).
На практике получается, что при Order.Price = 0, тип ордера остается OrderTypes.Limit. Из-за чего Смартком ругается о невозможности лимитированной заявки с ценой 0
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 7/26/2011
raf:
На практике получается, что при Order.Price = 0, тип ордера остается OrderTypes.Limit.
Как такое может быть, если в коде явно устанавливается Conditional?
|
|
|
|
Thanks:
|
|
|
|
|
|
raf
|
Date: 7/27/2011
Mikhail Sukhov:
raf:
На практике получается, что при Order.Price = 0, тип ордера остается OrderTypes.Limit.
Как такое может быть, если в коде явно устанавливается Conditional?
Я так выразился согласно написанному в Stock#.chm глава SmartCom -> Стоп-заявки (я уже цитировал выше):
Если значение Order.Price равно 0, то будет создана стоп-заявка, при исполнении которой будет зарегистрирована рыночная заявка (OrderTypes.Market).
Но при указании Order.Price = 0 в момент RegisterOrder вылетает исключение
{"Цена лимитной заявки не может быть равной 0.\r\nИмя параметра: order"}
Следовательно как мне кажется в реализации RegisterOrder должным образом не происходит проверка Order.Price == 0. Либо стоп с исполнением по маркету задается другим способом, нежели как представлено в примере.
К сожалению проверить это с помощью SmartCOMWrappera пока руки не дошли.
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 7/27/2011
Но при указании Order.Price = 0 в момент RegisterOrder вылетает исключение
{"Цена лимитной заявки не может быть равной 0.\r\nИмя параметра: order"}
В примере (который вы же и привели), все настройки указаны правильно. А вот вы почему то этим рекомендациям следовать отказываетесь.[laugh]
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 7/27/2011
Насколько я понял происходит примерно следующее.
Создаётся стоп заявка:
var stopOrder = new Order
{
Portfolio = Portfolio,
Type = OrderTypes.Conditional,
Volume = 1,
Price = 0,
Security = Security,
Direction = OrderDirections.Buy,
StopCondition = new SmartStopCondition
{
IsOneDay = true,
StopPrice = 198,
},
};
и ожидается, что при достижении цены 198 у нас пошлётся заявка по рынку, но этого не происходит.
|
|
|
|
Thanks:
|
|
|
|
|
|
raf
|
Date: 7/27/2011
|
|
|
|
|
немного другая ситуация. При выполнении кода
var stoporder = new Order
{
Portfolio = Portfolio,
Type = OrderTypes.Conditional,
Volume = 1,
Price = 0,
Security = Security,
Direction = OrderDirections.Buy,
StopCondition = new SmartStopCondition
{
IsOneDay = true,
StopPrice = 198,
}
};
trader.RegisterOrder(stoporder);
программа вылетает с эксепшн
{"Цена лимитной заявки не может быть равной 0.\r\nИмя параметра: order"}
System.ArgumentException не обработано пользовательским кодом
Message=Цена лимитной заявки не может быть равной 0.
Имя параметра: order
Source=StockSharp.Algo
ParamName=order
StackTrace:
в StockSharp.Algo.TraderHelper.#=qsRY1Gkj5LVHKLGCPQgJrl$JyXax_iA3U0MweSn82MaA=(Order #=qDVBVu9ZsVP7dj1O6fXTk4w==)
в StockSharp.Algo.TraderHelper.#=qOBksWyvS$yyrnUdbHdidNQ==(Order #=qPn5yemFjtL$WxVh_f8TzXQ==)
в StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
в StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
в asts1.StrategyTrailingStop.StrategyCloseTrailingStop.OnSecurityChanged() в D:\StrategyTrailing.cs:строка 278
в System.Action.Invoke()
в Ecng.Common.DelegateHelper.SafeInvoke(Action handler)
в StockSharp.Algo.Strategies.Strategy.#=qBYva7X6kv_LxPlcCnaByk_lkNTfOJr3i30JoILrggRY=(IEnumerable1 #=qJyxEDgBgAXtHSyyY73kdmA==) в System.Action1.Invoke(T obj)
в Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) в StockSharp.Algo.BaseTrader.#=qaVX2FaXB8STRu3NJp2XNbz0Cxmp4RdtDimHr24gJPZg=.#=qg06BaMxlyeDvTDEuBbiTdQ==(IEnumerable1 #=q_hdH0YugUkBDNFJYZs9JhA==)
InnerException:
|
|
|
|
Thanks:
|
|
|
|
|
|
Mikhail Sukhov
|
Date: 7/27/2011
Раз вы явно устанавливаете Order.Type, то бага в S#. Ок, посмотрю в чем дело.
|
|
|
|
Thanks:
|
|
|
|
|