Вопросы новичка
Atom Ответить
30.09.2012


1) Как получить количество открытых позиций по бумаге?
2) Пытаюсь продать по рынку или купить, не выходит:
Код
(double)_lkoh.ShrinkPrice(_lkoh.GetMarketPrice(OrderDirections.Buy));

3) Как выставить ордер тейк профит и стоп лосс? (если можно пример)

Теги:


Спасибо:




7 Ответов
NattyD

Фотография
Дата: 30.09.2012
Ответить


Посмотрите примеры, там всё это есть.
Спасибо:

nuan

Фотография
Дата: 30.09.2012
Ответить


Вот как раз ответов не нашел, если не трудно, в каких конкретно примерах?
Автор топика
Спасибо:

NattyD

Фотография
Дата: 30.09.2012
Ответить


SampleSMA, например

1)можно так:
Код
var pos = _strategy.PositionManager.Position;

через трейдер:
Код

var pos = _trader.GetPosition(_portfolio, _security).CurrentValue


2)
Код

var order = new Order()
{
    Security = _sec,
    Direction = OrderDirections.Buy,
    Price = _sec.GetMarketPrice(OrderDirections.Buy),
    Volume = 1,
    Portfolio = _portfolio,
};

_trader.RegisterOrder(order);
Спасибо: Sergey Masyura StockSharp

nuan

Фотография
Дата: 01.10.2012
Ответить


Код
if(trader.GetPosition(_portfolio, _lkoh).CurrentValue==0)
                            if (direction_vol >= 1)
                            {
                                priceb = (double)_lkoh.BestPair.Bid.Price;
                                var order = new Order
                                {
                                    Security = _lkoh,
                                    Portfolio = _portfolio,
                                    Price =_lkoh.BestBid.Price,                                 
                                    Volume = 1,
                                    Direction = OrderDirections.Buy,
                                };


Бесконечно открывает сделки, но первое условие явно должно ограничить, т.е. один раз открылся и все.
Автор топика
Спасибо:

RomSunZ

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


Потому, что в промежуток времени между созданием заявки и ее исполнением приходят тики, а позиция в этот промежуток еще не поменялась. Я сделал такой вариант:

Код

                cantrade = false;
                // создаем рыночную заявку (так как на FORTS нет такого понятия как рыночная заявка, то будет использована встречная цена в стакане)
                _order = this.CreateOrder(_dir, (decimal)Security.GetCurrentPrice(_dir), Volume);
                this.AddInfoLog("Ордер {0}: цена {1} направление {2} кол-во {3}".Put(_order.Id, _order.Price, _order.Direction, _order.Volume));

                _order
                .WhenCanceled()
                .Do(() =>
                {
                    this.AddInfoLog("Заявка успешно отменена");
                    cantrade = true;
                })
                .Once()
                .Apply(this)
                .Name = "WhenCanceled";

                _order
                    .WhenRegistered()
                    .Do((rule, o) =>
                    {
                        this.AddInfoLog("Заявка успешно зарегестрирована");
                    })
                    .Once()
                    .Apply(this)
                    .Name = "WhenRegistered";

                _order
                    .WhenRegisterFailed()
                    .Do(() =>
                    {
                        this.AddInfoLog("Заявка не принята биржей");
                        cantrade = true;
                    })
                    .Once()
                    .Apply(this)
                    .Name = "WhenRegisterFailed";

                _order
                    .WhenMatched()
                    .Do((rule, o) =>
                    {
                        cantrade = true;

                        this.AddInfoLog("Заявка полностью исполнена");

                        this.AddInfoLog("Удаляем все правила связанные с заявкой.");

                        // удаление всех правил связанных с order
                        Rules.RemoveRulesByToken(rule.Token, rule);
                    })
                    .Once()
                    .Apply(this)
                    .Name = "WhenMatched";

                // отправляем на регистрацию
                RegisterOrder(_order);


но все равно периодически срабатывает два раза подряд, пока не понял почему.
Спасибо:

nuan

Фотография
Дата: 17.10.2012
Ответить


Дык я пробовал делать просто флаг вначале, не связанный с биржей. Тож самое.
Автор топика
Спасибо:

NattyD

Фотография
Дата: 19.10.2012
Ответить


Возможно, у вас код, который обрабатывает событие не успевает обработать прошлое и запускается еще раз, поэтому 2 заявки летит.
Спасибо:


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

loading
clippy