Ошибка при установке StopLoss в процентах
Atom Ответить
18.11.2013


Приветствую,

При переходе с 4.1.8 на 4.1.19 обнаружил, что StopLossStrategy стала генерировать следующее исключение:
Код

2013/11/18 09:30:19.290|Error  |SLS_RIZ3@FORTS_XXXXXXX|System.ArgumentException: Невозможно привести процентное значение в абсолютное.
Parameter name: unit
   at StockSharp.BusinessEntities.Unit.op_Explicit(Unit unit)
   at StockSharp.Algo.Strategies.StopLossStrategy.get_ActivationPrice()
   at StockSharp.Algo.Strategies.ProtectiveStrategy.NeedQuoting(Decimal currentPrice, Decimal currentVolume, Range`1 acceptablePriceRange, Decimal newVolume)
   at StockSharp.Algo.Strategies.QuotingStrategy.ProcessQuoting()
   at StockSharp.Algo.Strategies.QuotingStrategy.SyncProcessQuoting()
   at StockSharp.Algo.Strategies.QuotingStrategy.OnStarted()
   at StockSharp.Algo.Strategies.ProtectiveStrategy.OnStarted()
   at StockSharp.Algo.Strategies.Strategy.#=qtKQ9VNIVpLP1g1BUAZxdTGU5EYfMco3AM7uGI5mgJio=(ProcessStates #=qEConwVuDh98j4XAFNYit9w==)


В старых версиях StockSharp для расчета ActivationPrice использовалось следующее выражение:

Код
    var activationPrice = (decimal)(isBuy ? (decimal)_prevPrice - ProtectiveLevel : (decimal)_prevPrice + ProtectiveLevel);


При вычислении выражения типы операндов неявно приводились к Unit и затем результат приводился к decimal. Все работало.

В новой версии судя по всему ProtectiveLevel явно приводится к decimal. В результате получаем исключение. Декомпилированный кусочек кода:

Код

Decimal num1 = this.ProtectiveLevel.Type == UnitTypes.Limit ? MathHelper.Abs(this.BasePrice - (Decimal) this.ProtectiveLevel) : (Decimal)this.ProtectiveLevel;


Есть ли ошибка в версии 4.2.1 - еще не проверял.

Теги:


Спасибо:




1 Ответов
Marco

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


P.S.: В 4.2.1 этот код не изменился, т.е. ошибка должна быть. Проверить не могу, из-за проблем с генерацией тестовых стаканов.
Автор топика
Спасибо:


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

loading
clippy