Стоп-лосс
Atom Ответить
21.07.2011


raf

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

Теги:


Спасибо:




29 Ответов
1 2  >
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
 {
   IsOneDay = true,
  StopPrice = stopPrice,
 }
}


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

raf

Фотография
Дата: 26.07.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
{
IsOneDay = (bool)this.IsOneDay.IsChecked,
StopPrice = this.StopPrice.Text.To<decimal>(),
},
};

Если значение 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
Ответить


raf Перейти
Но при указании 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=(IEnumerable`1 #=qJyxEDgBgAXtHSyyY73kdmA==)
в System.Action`1.Invoke(T obj)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Algo.BaseTrader.#=qaVX2FaXB8STRu3NJp2XNbz0Cxmp4RdtDimHr24gJPZg=.#=qg06BaMxlyeDvTDEuBbiTdQ==(IEnumerable`1 #=q_hdH0YugUkBDNFJYZs9JhA==)
InnerException:
Автор топика
Спасибо:

Mikhail Sukhov

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


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

Кот Матроскин

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


Здравствуйте!
Возникла очень похожая проблемы. А именно: тестирую в EmulationTrader стратегию, решил поменять маркет-ордер на стоп-ордер (с исполнением по рынку), код такой:
Код
                _stopOrderOpenDeal = new Order 
                {
                    Portfolio = this.Portfolio,
                    Volume = 1m,
                    Security = this.Security,
                    Direction = _direction,
                    Type = OrderTypes.Conditional,
                    Price = 0,
                    ExpiryDate = DateTime.MaxValue,
                    StopCondition = new SmartStopCondition 
                    {
                        StopPrice = _stopPrice, 
                    }, 
                };
                RegisterOrder(_stopOrderOpenDeal);

Цена Price = 0, как в документации по Смарту. В итоге получил следующий Exception:

Цитата:
00:00:00.000 | | EmulationTrader | Экспорт запущен.
00:00:00.000 | | ... | Стратегия запущена.
10:00:00.000 | Error | ... | System.BadImageFormatException: Невозможно загрузить файл или сборку "StockSharp.Smart, Version=4.0.23.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат.
Имя файла: "StockSharp.Smart, Version=4.0.23.0, Culture=neutral, PublicKeyToken=null"
в SampleHistoryTesting.SmaStrategy.OnProcess()
в StockSharp.Algo.Strategies.TimeFrameStrategy.#=qZHVfyKwI4vf7ONEp35cU8OHmGCK4F9lK_KFrfCPAFBg=()
в StockSharp.Algo.Strategies.StrategyRule`1.#=quXXKfimi4hGCUUA2EBieBe40d1P3S0O01k7RpjQWc4Q=.#=qc5Q$2yznI4v7NUwkziu7eg==(StrategyRule`1 #=q8pU360yixOnyal56ySThxQ==, #=qYvW23FoN_bSucNDVd1djgg== #=qRnz$uUKk_OQJpdyJfGa8Vg==)
в StockSharp.Algo.Strategies.StrategyRule`1.#=qxw3fSR$7BgRSk3lFnXHQPtLqr51eX9mDSwNA9yV$vaQ=.#=qslmG47QH3JqkLo3WYKyhrg==(#=qr72eow4hO9ArvO1OIY4FJQ== #=qZrZQCfhgUrmTFNWR9RAZfg==)
в StockSharp.Algo.Strategies.StrategyRule`1.#=qBNAojy8xnqgcson6lOpxCT5wSiewuGJorSoAQXI$8wU=.#=qC$$koezZsR34GX$1egQpLfxbTuzJqRxr0SkdYQagKnY=()
в StockSharp.Algo.Strategies.Strategy.#=qxo2T0sDreIkxakECYZYbbA==(IStrategyRule #=qV94l1yQlEBjJ4u0D0$xIQA==, Func`1 #=q2Ngt1CMo$4x1_NRoZYzWlw==)

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

10:00:00.000 | | ... | Стратегия останавливается.
10:00:00.000 | Error | EmulationTrader | System.BadImageFormatException: Невозможно загрузить файл или сборку "StockSharp.Smart, Version=4.0.23.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат.
Имя файла: "StockSharp.Smart, Version=4.0.23.0, Culture=neutral, PublicKeyToken=null"
в SampleHistoryTesting.SmaStrategy.OnProcess()
в StockSharp.Algo.Strategies.TimeFrameStrategy.#=qZ7PT1v9STzIIBySDYht1xJhX_1t7NIqAu0OWio95UGY=()
в StockSharp.Algo.Strategies.Strategy.#=q8MiGfL3WivuJhedkH9mlpxw3NIibLyQ$271VPSAha9g=(ProcessStates #=q8$qI6ivL1iYvibB0_IvSBw==)
в StockSharp.Algo.Strategies.Strategy.#=qxo2T0sDreIkxakECYZYbbA==(IStrategyRule #=qV94l1yQlEBjJ4u0D0$xIQA==, Func`1 #=q2Ngt1CMo$4x1_NRoZYzWlw==)
в System.Action.Invoke()
в StockSharp.Algo.Testing.EmulationTrader.#=qCGdM8sQLMNb9D_j8ZApFfQ==()

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].


У меня три вопроса:
1. Это лечится? И если да, то как?
2. Если не лечится, то как иначе можно выставить стоп-ордер с исполнением по рынку.
3. Можно ли в Таймфрейм-стратегии выставлять правила типа this.When().Do();?
Спасибо:

Mikhail Sukhov

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


Кот Матроскин Перейти


Несовпадение битности.
Спасибо: Кот Матроскин

Кот Матроскин

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


Хм... А если чтоб понятно было)))?
Спасибо:

Кот Матроскин

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


Поменял стоп-ордер с исполнением по рынку на стоп-лимит, вылезает то же самое исключение BadImageFormatException. Похоже, что вообще со стоп-ордерами какой-то непорядок...
Спасибо:

esper

Фотография
Программист
Дата: 28.04.2012
Ответить


Вероятно, что основное приложение у вас x64, а смартовский коннектор x86, поэтому вылетает это исключение. И тестер ранее не поддерживал стоп-заявки, скорее всего и сейчас не поддерживает.
Спасибо:

Кот Матроскин

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


А как-нибудь лечится?
Спасибо:

esper

Фотография
Программист
Дата: 28.04.2012
Ответить


Изменением Platform Target на x86 в свойствах проекта
Спасибо: Кот Матроскин

Кот Матроскин

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


Спасибо за подсказки! Ох и помаялся, пока нашел, где в Visual C# 2010 Express можно поменять AnyCPU на x86))))
BadImageFormatException больше не появляется. Но вылезла новая проблема: ArgumentException
Цитата:
14:30:00.000 | | EmulationTrader | OnProcess: 28.04.2012 17:00:24.148 PnL = 0
14:30:00.000 | | EmulationTrader | RegisterOrder: TransactionId=61213539, Id=0, Price=0, Balance=1, Security=SBER@EQBR, State=None
14:30:00.990 | | EmulationTrader | New order: TransactionId=61213539, Id=1, Price=0, Balance=1, Security=SBER@EQBR, State=Active
14:30:00.990 | Error | EmulationTrader | System.ArgumentException: Стоп-заявки не могут иметь реализованный объем.
Имя параметра: order
в StockSharp.Algo.TraderHelper.GetMatchedVolume(Order order)
в StockSharp.Algo.TraderHelper.GetPosition(Order order)
в StockSharp.Algo.Testing.EmulationTrader.#=q_7aAU8b_zEypCQ8s7GI9rucncBvXzAN_LW7DIugCEGA=.#=q1Ehw5NVz5qQudEX$OPx_WI5IMzAHUYsMUkc9dR9UJ9E=(Position #=qT5lumkkYLnDIqrM8CbtkoQ==)
в StockSharp.Algo.BaseTrader.GetPosition(Portfolio portfolio, Security security, Func`3 createPosition, Action`1 changePosition)
в StockSharp.Algo.BaseTrader.GetPosition(Portfolio portfolio, Security security, Action`1 changePosition)
в StockSharp.Algo.Testing.EmulationTrader.#=qKccLf2wuZwfZbL1C7cjImw==(Order #=qrTNaO4Nib9BUygvpQrDnUg==)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Algo.Testing.MarketEmulator.#=qUhv25xUz4s7MvC8VgEsQvQ==(LinkedListNode`1 #=qmTTURhdw0uY5Y3xHDagFnQ==)

И тут же в догонку вылезло следующее исключение: NotImplementedException
Цитата:
14:30:01.000 | Error | EmulationTrader | System.NotImplementedException: Метод или операция не реализована.
в StockSharp.BusinessEntities.StopCondition.TryActivate(MarketDepth depth)
в StockSharp.Algo.Testing.MarketEmulator.#=qCAhc4yiwP_SZxXRczpuhqET6igMTZMTj5wR7r28M7zE=(Order #=qc2Wk9Bom9Xj1I5fl8ZjWEQ==)
в StockSharp.Algo.Testing.MarketEmulator.#=qUhv25xUz4s7MvC8VgEsQvQ==(LinkedListNode`1 #=qmTTURhdw0uY5Y3xHDagFnQ==)

Стал разбираться, и наткнулся на форуме, что класс EmulationTrader не поддерживает работу со стоп-заявками. Эти два исключения из-за этого?
И предыдущие два вопроса еще актуальны:
2. Если не лечится, то как иначе можно выставить стоп-ордер с исполнением по рынку.
3. Можно ли в Таймфрейм-стратегии выставлять правила типа this.When().Do();?
Спасибо:

alpha

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


Alexander Mukhanchikov,

Почему появляются сообщения подобные "#=q_7aAU8b_zEypCQ8s7GI9rucncBvXzAN_LW7DIugCEGA=.#=q1Ehw5NVz5qQudEX$OPx_WI5IMzAHUYsMUkc9dR9UJ9E=" (интересует не причина, а само название)? вы сами дали такие названия? Как узнать что под собой подразумевают подобные "кодировки"?
Спасибо:

Alexander

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


alpha Перейти
Alexander Mukhanchikov,

Почему появляются сообщения подобные "#=q_7aAU8b_zEypCQ8s7GI9rucncBvXzAN_LW7DIugCEGA=.#=q1Ehw5NVz5qQudEX$OPx_WI5IMzAHUYsMUkc9dR9UJ9E=" (интересует не причина, а само название)? вы сами дали такие названия? Как узнать что под собой подразумевают подобные "кодировки"?


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

alpha

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


Alexander Mukhanchikov Перейти
alpha Перейти
Alexander Mukhanchikov,

Почему появляются сообщения подобные "#=q_7aAU8b_zEypCQ8s7GI9rucncBvXzAN_LW7DIugCEGA=.#=q1Ehw5NVz5qQudEX$OPx_WI5IMzAHUYsMUkc9dR9UJ9E=" (интересует не причина, а само название)? вы сами дали такие названия? Как узнать что под собой подразумевают подобные "кодировки"?


Да, нам такие названия понятнее. Удобнее находить ошибку.
А зачем знать что под собой подразумевают данные названия? Вы с ними сталкиваться вообще не должны


Человек выше уже столкнулся. Мой интерес - исключительно любопытство. А чем вы их генерите? Или сами придумываете?

Честно говоря не понимаю как такие названия могут помогать. Это все равно, что на Brainfuck писать)
Спасибо:

Alexander

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


Это обфускация на самом деле.

Человек выше столкнулся т.к. получил exception
Спасибо:

alpha

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


Alexander Mukhanchikov Перейти
Это обфускация на самом деле.

Человек выше столкнулся т.к. получил exception


Если это была бы платная библиотека, то понятно. Но зачем защита в бесплатной?
Спасибо:

alpha

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


Alexander Mukhanchikov

Я правильно понимаю, что посмотреть исходники обфусцированных библиотек не получится или их можно достать?
Спасибо:

Alexander

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


alpha Перейти
Alexander Mukhanchikov

Я правильно понимаю, что посмотреть исходники обфусцированных библиотек не получится или их можно достать?


Есть 2 варианта:
1) покупка исходников;
2) большая оказанная помощь для библиотеки, за это подключение к закрытому TFS и, соответственно, доступ к исходникам.

И по первому, и по второму пункту - обращайтесь в скайп, amukhanchikov.
Спасибо:
1 2  >

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

loading
clippy