← Back

Вопросы новичка

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

Comments (7)

Login or Create account, Log in or register to leave a comment

NattyD
NattyD

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

nuan
nuan Author

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

NattyD
NattyD

SampleSMA, например

1)можно так:

var pos = _strategy.PositionManager.Position;

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


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

2)```csharp

var order = new Order() ;

_trader.RegisterOrder(order);

Sergey Masyura StockSharp
nuan
nuan Author
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
RomSunZ

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


                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
nuan Author

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

NattyD
NattyD

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