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

1. Судя по всему, в конструкции:
Code:
for (int i = 0; (i < barsCount); i++) {
  IPosition le = source.Positions.GetLastActiveForSignal("LE");
  if (le == null) {
    //...
  } else {
    //...
  }
}

GetLastActiveForSignal не зависит от номера бара, и на реальном счёте, в случае открытой позиции, всегда возвращает открытую позу, т.е. условие else выполняется при каждой итерации цикла, от 0 и до упора, в отличие от истории, где Positions "живёт" в течение цикла и условие будет срабатывать только на барах с открытыми позициями.

2. Похоже, IPosition.CloseAtProfit сначала проверяет второй аргумент (цену), а только потом первый аргумент (номер бара), если вообще его учитывает. Подозрение возникло потому, что этот метод ошибочно закрывал у меня позицию по рынку при каждом выполнении скрипта, причём до того, как цикл дойдёт до последнего бара (на истории всё рисовалось как надо).

обе проблемы пока что решил заменой
Code:
for (int i = 0; (i < barsCount); i++) {

на
Code:
for (int i = source.Positions.IsRealtime? barsCount - 1: 0; (i < barsCount); i++) {



Отредактировано gmother (Tue Mar 02 2010 11:11 AM)