← 戻る

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

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

このトピックは参考になりましたか?

トピックを共有

コメント (7)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

NattyD
NattyD

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

nuan
nuan 著者

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

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 著者
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 著者

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

NattyD
NattyD

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