Стоп-лосс
Atom
21.07.2011
raf


Подскажите пожалуйста, как правильно будет описать стоп-лосс, чтобы при достижении цены стопа, выставлялась бы заявка с исполнением по рынку.


Теги:


Спасибо:


1 2 3  >
Alexander

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


Анализируем последнюю цену. Если она <= (>=) x - создаём новый stop-order с нужными нам условиями, делаем ему RegisterOrder.

Спасибо:

raf

Фотография
Дата: 21.07.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,
 }
}
Спасибо:

Alexander

Фотография
Дата: 21.07.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 }


Если это фортс, то на фортсе рыночных заявок нет.
Пользуйтесь или котированием, либо заявками с ценой равной ценой лимита по инструменту.
Спасибо:

raf

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


Брокер позволяет делать такие заявки

в Stock#.chm в главе SmartCom написано

var stopOrder = new Order { Portfolio = (Portfolio)this.Portfolio.SelectedValue, Type = OrderTypes.Conditional, Volume = this.Volume.Text.To(), Price = this.Price.Text.To(), 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

Спасибо:

Mikhail Sukhov

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


raf: На практике получается, что при Order.Price = 0, тип ордера остается OrderTypes.Limit.

Как такое может быть, если в коде явно устанавливается Conditional?

Спасибо:

raf

Фотография
Дата: 27.07.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 пока руки не дошли.

Спасибо:

Mikhail Sukhov

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


Но при указании Order.Price = 0 в момент RegisterOrder вылетает исключение

{"Цена лимитной заявки не может быть равной 0.\r\nИмя параметра: order"}

В примере (который вы же и привели), все настройки указаны правильно. А вот вы почему то этим рекомендациям следовать отказываетесь.[laugh]

Спасибо:

Alexander

Фотография
Дата: 27.07.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 у нас пошлётся заявка по рынку, но этого не происходит.

Спасибо:

raf

Фотография
Дата: 27.07.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:

Спасибо:

Mikhail Sukhov

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


Раз вы явно устанавливаете Order.Type, то бага в S#. Ок, посмотрю в чем дело.

Спасибо:
1 2 3  >

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

loading
clippy