#24291 - Tue Mar 29 2011 11:58 AM
StopLoss работает не корректно. XXX.
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
В реальной торговле появились какие-то невероятные глюки.
Скрипт купил лот rim1 по цене 199550.
Далее в нем есть некоторое условие, и если оно выполняется, выставляется stoploss заявка.
Цена заявки для лонга: position.EntryPrice - stopLossPrice.
stopLossPrice - это умножение двух положительных чисел. Поэтому результат положительный.
Скрипт же исполнил stoploss по цене 199935 !!
Как такое может быть?
p.s. На исторических данных такого нету.
Отредактировано Sherman81 (Tue Mar 29 2011 11:59 AM)
|
Наверх
|
|
|
|
#24294 - Tue Mar 29 2011 12:20 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
Да. У меня есть одна мысль. Мой код stoploss:
IPosition position = source.Positions.LastPositionActive;
double stopLossPrice = stopLossBase * koeff;
if (position.IsShort) {
stopLossPrice = position.EntryPrice + stopLossPrice;
} else {
stopLossPrice = position.EntryPrice - stopLossPrice;
}
position.CloseAtStop(
barIndex,
stopLossPrice,
SignalUtils.STOP_LOSS_CLOSE
);
Может ли быть такое, что position.IsShort вернул true для позиции типа лонг? Как у вас вообще дела с многопотчоностью? Если выполняются два скрипта, надо ли думать о том, чтобы все что внутри было thread-safe?
Отредактировано Sherman81 (Tue Mar 29 2011 12:28 PM)
|
Наверх
|
|
|
|
#24296 - Tue Mar 29 2011 12:41 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
Нет. Выставление идет так:
StopLoss stopLoss;
for (int barIndex = 0; barIndex < barsCount; barIndex++) {
int nextBarIndex = barIndex + 1;
IPosition position = source.Positions.LastPositionActive;
...
stopLoss = new StopLoss(stopLossBaseList, koeff); // both are positive
stopLoss.createOn(position, nextBarIndex);
}
StopLoss
public class StopLoss {
private IList<double> stopLossBaseList;
double koeff = 0;
public StopLoss(IList<double> stopLossBaseList, double koeff) {
this.stopLossBaseList = stopLossBaseList;
this.koeff = koeff;
}
public void createOn(IPosition position, int barIndex) {
double stopLossPrice = stopLossBaseList[barIndex - 1] * koeff;
if (position.IsShort) {
stopLossPrice = position.EntryPrice + stopLossPrice;
} else {
stopLossPrice = position.EntryPrice - stopLossPrice;
}
position.CloseAtStop(
barIndex,
stopLossPrice,
SignalUtils.STOP_LOSS_CLOSE
);
}
}
Отредактировано Sherman81 (Tue Mar 29 2011 12:42 PM)
|
Наверх
|
|
|
|
#24298 - Tue Mar 29 2011 12:43 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
Выше привел полный код класса StopLoss.
|
Наверх
|
|
|
|
#24301 - Tue Mar 29 2011 12:53 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
Я выслал уже на contact@tslab.ru
В теме письма указал ссылку на эту ветку.
Для верности перешлю еще раз.
|
Наверх
|
|
|
|
#24307 - Tue Mar 29 2011 01:00 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
В повторном письме я указал строчки входа и выхода, в них и номера заявок наверное есть? Если нет, то где их посмотреть?
|
Наверх
|
|
|
|
#24311 - Tue Mar 29 2011 01:08 PM
Re: StopLoss работает не корректно. XXX.
[Re: Nektodron]
|
enthusiast
Registered: Mon Jan 10 2011
Записи: 251
|
Да в общем-то ничего особенного не означает. Меня другое смущает. Пусть по рынку, но почему тогда сигнал:
sherman2-rim-beta.SL$Close$
Если закрывается по рынку, то сигнал должен быть:
sherman2-rim-beta.C$Close$
Других сигналов closeAtMarket нету в скрипте.
|
Наверх
|
|
|
|
|
|