У вас не стоит Flash Player
Настройки
#40605 - Fri Apr 20 2012 12:13 PM Вопрос по CloseAtMarket
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
Здравствуйте.
Если я закрываю позицию с помощью CloseAtMarket, может ли она не закрыться? В цикле по свечам я просматриваю список позиций, нахожу первую у которой isActive() == true и пытаюсь ее закрыть с помощью CloseAtMarket на следующей свече. На следующей итерации цикла я снова нахожу ту же самую позицию, хотя я вроде бы ее уже закрывал, причем поле ExitSignalName у нее пустое, хотя при закрытии я указывал некоторое не пустое значение.

Наверх
#40738 - Wed Apr 25 2012 09:21 AM Re: Вопрос по CloseAtMarket [Re: livrrr]
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
Господа разработчики, ответьте, пожалуйста, на вопрос.

Наверх
#40746 - Wed Apr 25 2012 10:30 AM Re: Вопрос по CloseAtMarket [Re: livrrr]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
ПО вашему описанию, не понятно, что вы делаете. Приведите пример кода.

Наверх
#40754 - Wed Apr 25 2012 12:17 PM Re: Вопрос по CloseAtMarket [Re: Nektodron]
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
Код примерно такой:
Code:
IList<Bar> b = sec.Bars;
for(int i = 0; i < b.Count - 1; i++)
{
    #region close pos
    if(...)
    {
        IPosition lastBuy = null;
        IList<IPosition> pl = sec.Positions.ToList();
        foreach(IPosition pos in pl)
        {
            if(pos.IsActive && pos.IsLong)
            {
                lastBuy = pos;
                ctx.Log(lastBuy.EntrySignalName + " " + (i) + " CLOSE", 0x000000);
                break;
            }
        }
        if(lastBuy != null)
        {
            lastBuy.CloseAtMarket(i + 1, "Close" + lastBuy.EntrySignalName);
            ctx.Log(lastBuy.ExitSignalName + " " + (i) + " CLOSE__", 0x000000);
        }
    }
    #endregion
}

Здесь sec - входной параметр метода Execute.
Происходит, примерно, следующее: при неком значении i я нахожу какой-то lastBuy и, вроде как, закрываю позицию, но на последующих итерациях цикла я снова нахожу этот же lastBuy с пустым ExitSignalName, правда в какой-то момент позиция все же закрывается.

Наверх
#40755 - Wed Apr 25 2012 12:31 PM Re: Вопрос по CloseAtMarket [Re: livrrr]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
lastBuy.CloseAtMarket(i + 1, "Close" + lastBuy.EntrySignalName);

не Entry, а ExitSignalName - то есть пишешь сюда что-нибудь типа "Sx"

Наверх
#40756 - Wed Apr 25 2012 12:51 PM Re: Вопрос по CloseAtMarket [Re: vito333]
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
Это просто имя, строка, что хочу, то и пишу, у меня и написана строка "Close" + lastBuy.EntrySignalName, к тому же ExitSignalName у меня еще нет, я его значение и указываю.


Отредактировано livrrr (Wed Apr 25 2012 03:21 PM)

Наверх
#40760 - Wed Apr 25 2012 01:46 PM Re: Вопрос по CloseAtMarket [Re: livrrr]
vito333 Offline
Pooh-Bah

Registered: Wed Oct 26 2011
Записи: 2108
Loc: botland
хм, верно

Наверх
#40761 - Wed Apr 25 2012 01:58 PM Re: Вопрос по CloseAtMarket [Re: vito333]
Nektodron Offline

Carpal Tunnel

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

Что касается кода, то как минимум ошибка в границах цикла, вместо "i < b.Count - 1" должно быть "i <= b.Count - 1" или "i < b.Count"

Так же не понятно, зачем вообще весь этот огород с перебором позиций (который очень медленно работает), когда есть IPositionsList.LastLongPositionActive.

Наверх
#40768 - Wed Apr 25 2012 03:20 PM Re: Вопрос по CloseAtMarket [Re: Nektodron]
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
EntrySignalName у меня уникальный.

Скажите, что будет если я открою позицию на i-ой свече, а закрыть попытаюсь на i-1-ой? Я смогу это сделать? Есть подозрение, что ошибка у меня именно в этом.

Предложите, пожалуйста, другой вариант выбора первой активной позиции, а не последней, ведь IPositionsList.LastLongPositionActive дает последнюю активную, а у меня может быть несколько открытых позиций, а нужна именно первая.

Наверх
#40769 - Wed Apr 25 2012 03:29 PM Re: Вопрос по CloseAtMarket [Re: livrrr]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
1. открытие и закрытие всегда должно идти на "i+1"
2. если нужна именно первая, а не последняя, то только перебором.

Наверх
#40771 - Wed Apr 25 2012 04:06 PM Re: Вопрос по CloseAtMarket [Re: Nektodron]
livrrr Offline
newbie

Registered: Fri Feb 24 2012
Записи: 36
Спасибо за ответ.

Наверх


Moderator:  ViL, sar