У вас не стоит Flash Player
Настройки
#24293 - Tue Mar 29 2011 12:03 PM Не сработало условие.
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Еще один глюк.

Скрипт на вчерашнем последнем баре выставил заявку на покупку(на следующий бар).

Сегодня заявка была исполнена. То есть дата входа в позицию должна быть сегодняшняя.

Далее у меня стоит условие проверки даты:

if (currentBar.Date.Day != position.EntryBar.Date.Day) {
// close at market
}

Условие не сработало. Скрипт закрыл позицию сегодня же!

Наверх
#24302 - Tue Mar 29 2011 12:54 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
А вы проверяете, что currentBar позже чем position.EntryBar?

Наверх
#24309 - Tue Mar 29 2011 01:03 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Ок. Добавлю там assert.

Наверх
#24310 - Tue Mar 29 2011 01:04 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Там не нужен ассерт. При реальном исполнении список позиций в скрипт уже приходит заполненный, а торговый цикл начинается с первого бара. Т.е. в торговом цикле нужно проверять, что бар позже, чем сама позиция. Код, генерируемый в визуальном редакторе это делает.

Наверх
#24312 - Tue Mar 29 2011 01:12 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Если бы дело было в неправильной логике, это был бы reproducible bug. А на тестовых данных оно почему-то открывает заявку там же, но не закрывает, как в реальной ситуации случилось.

Наверх
#24313 - Tue Mar 29 2011 01:15 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
В лаборатории список позиций перед расчетом всегда пустой и заполняется по мере расчета. В этом главное отличие при исполнении. Скрипт должен учитывать, что список позиций уже может быть заполнен.

Наверх
#24315 - Tue Mar 29 2011 01:21 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Чего-то я не понимаю насчет позиций.

У меня внутри цикла по барам есть блок:

Code:
IPosition position = source.Positions.LastPositionActive;

if (
  position == null /* && other conditions*/
) {
  // try to buy or sell
} else {
   if (null == position || !position.IsActive)
     continue;
   
   if (/* condition */) {
	position.CloseAtMarket(nextBar, SignalUtils.CLOSE);
   } else {
        stopLoss.createOn(position, nextBar);
   }
}


Что тут не так с точки зрения управления позицией?


Отредактировано Sherman81 (Tue Mar 29 2011 01:24 PM)

Наверх
#24316 - Tue Mar 29 2011 01:35 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
null == position || !position.IsActive
заменить на
null == position || position.EntryBarNum >= barNum


position.IsActive - лишняя проверка, для LastPositionActive

Наверх
#24319 - Tue Mar 29 2011 01:43 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Ок. Спасибо. Переписал условие.

Надо ли теперь удалять и заново создавать связки в "Управление торговлей скриптами" или достаточно сделать stop/start чтобы новый код подхватился?

Наверх
#24321 - Tue Mar 29 2011 01:49 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
если в лаборатории подхватился, то достаточно стоп/старт.

Наверх
#25003 - Wed Apr 06 2011 02:16 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
>null == position || position.EntryBarNum >= barNum

А может быть должно быть:
null == position || position.EntryBarNum > barNum

Дело в том, что stop-loss не выставляется на следующей после покупки свече, а только через свечу. Смотри скриншот.

Мне нужно, чтобы stop-loss не срабатывал на той же свече, что и покупка, но мог срабатывать на следующей.

Update:
То есть еще раз вся логика:

Code:
IPosition position = source.Positions.LastPositionActive;

if (
  position == null /* && other conditions*/
) {
  // try to buy or sell
} else {
   if (null == position || position.EntryBarNum >= currentBar)
     continue;
   
   if (/* condition */) {
	position.CloseAtMarket(nextBar, SignalUtils.CLOSE);
   } else {
        stopLoss.createOn(position, nextBar);
   }
}


То, есть здесь надо либо position.EntryBarNum > currentBar и stop на следующий бар.

Либо position.EntryBarNum >= currentBar но тогда stop на текущий бар.

Как правильно сделать, чтобы добиться следующего:

Мне нужно, чтобы stop-loss _не_ срабатывал на той же свече, что и покупка, но мог срабатывать на _следующей_.




Attachments
fuckup.JPG (202 downloads)



Отредактировано Sherman81 (Wed Apr 06 2011 02:24 PM)

Наверх
#25070 - Thu Apr 07 2011 12:05 PM Re: Не сработало условие. [Re: Sherman81]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
UP!

Наверх
#25086 - Thu Apr 07 2011 03:50 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
у вас режим пересчета "сделка" или "интервал"?

Наверх
#25088 - Thu Apr 07 2011 03:51 PM Re: Не сработало условие. [Re: Nektodron]
Sherman81 Offline
enthusiast

Registered: Mon Jan 10 2011
Записи: 251
Интервал.

Наверх
#25096 - Thu Apr 07 2011 03:59 PM Re: Не сработало условие. [Re: Sherman81]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Должно быть "position.EntryBarNum > currentBar"
т.е. если "position.EntryBarNum == currentBar" то на последней (только что закрытой) свече был вход и на следующей (еще не существующей) выставляем стоп

Наверх


Moderator:  ViL, sar