Вопрос по MarketQuotingStrategy и исполнению заявок по цене вне рынка


Вопрос по MarketQuotingStrategy и исполнению заявок по цене вне рынка
Atom Ответить
13.08.2012


Добрый день.
Вопросы от новичка:

1. Есть конструкция:
Код
var strategy = new MarketQuotingStrategy(order00, 100, 40);
ChildStrategies.Add(strategy);


Как после этой конструкции получить цену по которой реально исполнен order00, для того чтобы другие ордеры регистрировать опираясь от цены исполненного order00 ?

2. Есть конструкция, смысл которой тупо купить по рынку 1 фьюч и поставить встречные ордера order00SL (стоплосс) и order00TP (тейкпрофит). После срабатывания какого то из них, оставшейся снимается. Собственно:

Код
var order00 = this.CreateOrder(_orderDirections,Security.GetMarketPrice(_orderDirections, 50));
          
  //создаём strategyRule по исполнению этой заявки
     this.When(order00.Matched())
     .Do(o =>
         {
          //как только эта заявка исполняется ,выставляем тейк и стоп (на step пунктов)
          var order00TP = this.CreateOrder(order00.Direction.Invert(), order00.Price + step);
          var order00SL = this.CreateOrder(order00.Direction.Invert(), order00.Price - step);

                              this.When(order00TP.Matched()) // если исполнился профит от order00 снимаем стоп
                              .Do(u =>
                               {
                                   Debug.WriteLine("Исполнен профит order00TP");
                                   Trader.CancelOrder(order00SL);
                                   Debug.WriteLine("Отменен стоп order00SL");
                               })
                               .Once();
                                                          
                               this.When(order00SL.Matched()) // если исполнился стоп от order0 снимаем профит
                               .Do(u1 =>
                               {
                                   Debug.WriteLine("Исполнен стоп order00SL");
                                   Trader.CancelOrder(order00TP);
                                   Debug.WriteLine("Отменен профит order00TP");
                               })
                               .Once();
                            RegisterOrder(order00TP);
                            RegisterOrder(order00SL);

                        })
                .Once();
   RegisterOrder(order00);


После запуска кода, по рынку исполняется order00 и сразу исполняется order00SL (стоп-лосс), отменяется order00TP (тейкпрофит). Все происходит моментально. Причем ордер order00SL исполняется по цене далеко от текущей. Ставлю стоп и профит на 2000 пунктов (фьючерс РТС) ниже и выше, все равно исполняется моментально, вне текущей цены. Трейдер - QUIK Junior. Демо доступ. Инструмент – RIU2.
В чем может быть дело ? Или это издержки демо доступа ?

Теги:


Спасибо:




3 Ответов
Самунджян Артем

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


Acuarus Перейти
Добрый день.
Вопросы от новичка:

1. Есть конструкция:

Как после этой конструкции получить цену по которой реально исполнен order00, для того чтобы другие ордеры регистрировать опираясь от цены исполненного order00 ?

2. Есть конструкция, смысл которой тупо купить по рынку 1 фьюч и поставить встречные ордера order00SL (стоплосс) и order00TP (тейкпрофит). После срабатывания какого то из них, оставшейся снимается. Собственно:



Добрый , советую вам перейти на новую версию библиотеки .

1.Вот такой примерно алгоритм, основываясь на том , что позиция может быть набрана по разным ценам.
Код

                    var order = this.BuyAtMarket();//только для акций
                    var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
                    strategy.WhenStopped()
                        .Do(() =>
                            {
                                var holesum = strategy.MyTrades.Sum(trade => trade.Trade.Price*trade.Trade.Volume);
                                //средняя цена исполненной заявки
                               Debug.Print("Средняя цена исполнения {0}",holesum/strategy.MyTrades.Sum(t => t.Trade.Volume));
                            })
                        .Once()
                        .Apply(this);
                    ChildStrategies.Add(strategy);

2. Вы используете просто заявки , а не стратегии , которые отслеживают текущее состояние цены. В данном случае , вам нужно использовать либо стоп-заявки , либо дочерние стратегии(стоплосс и тейкпрофит)
А так ваш алгоритм работает , к примеру вы купили, затем выставляете сразу две продажи одну выше , другую ниже , в итоге такая которая ниже выполняется " как по рынку", а та , что выше снимается.
Спасибо:

Acuarus

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


Добрый день.
Попробовал работать со стоп заявками, до ума так и не получилось довести (уровень программирования оставляет желать намного лучшего), в связи с чем задам прямой вопрос:

Есть конструкция:

Код
var order00 = this.CreateOrder(_orderDirections, Security.BestAsk.Price);
var orderB1 = this.CreateOrder(_orderDirections, order00.Price + 100);
var orderB2 = this.CreateOrder(_orderDirections, order00.Price + 200);

           order00.WhenMatched()
           .Do(()=>
                   {
                    RegisterOrder(orderB1);
                    })
          .Once()
          .Apply(this);

            orderB1. WhenMatched()
                .Do(() =>
                {
                    RegisterOrder(orderB2);
                })
          .Once()
          .Apply(this);

RegisterOrder(order00);


Как в данном случае красиво установить тейк профит и стоп лосс для:
order00 - тейк на 100 пунктов выше order00.Price, стоп на 150 ниже order00.Price
orderB1 - тейк на 200 пунктов выше order00.Price, стоп на 300 ниже order00.Price
orderB2 - тейк на 400 пунктов выше order00.Price, стоп на 500 ниже order00.Price
Автор топика
Спасибо:

Самунджян Артем

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


Acuarus Перейти
Добрый день.
Попробовал работать со стоп заявками, до ума так и не получилось довести (уровень программирования оставляет желать намного лучшего), в связи с чем задам прямой вопрос:

Есть конструкция:

Код
var order00 = this.CreateOrder(_orderDirections, Security.BestAsk.Price);
var orderB1 = this.CreateOrder(_orderDirections, order00.Price + 100);
var orderB2 = this.CreateOrder(_orderDirections, order00.Price + 200);

           order00.WhenMatched()
           .Do(()=>
                   {
                    RegisterOrder(orderB1);
                    })
          .Once()
          .Apply(this);

            orderB1. WhenMatched()
                .Do(() =>
                {
                    RegisterOrder(orderB2);
                })
          .Once()
          .Apply(this);

RegisterOrder(order00);


Как в данном случае красиво установить тейк профит и стоп лосс для:
order00 - тейк на 100 пунктов выше order00.Price, стоп на 150 ниже order00.Price
orderB1 - тейк на 200 пунктов выше order00.Price, стоп на 300 ниже order00.Price
orderB2 - тейк на 400 пунктов выше order00.Price, стоп на 500 ниже order00.Price



В идеале для одной заявки защищать нужно все сделки , вот так . TakeProfitStoplossStrategy сразу работает с двумя стратегиями
Код

 var order00 = new Order();
                order00.WhenNewTrades()
                .Do(trades =>
                    {
                        foreach (var myTrade in trades)
                        {
                             var tp = new TakeProfitStrategy(myTrade, new Unit(order00.Price+100,UnitTypes.Limit));
                            var sl = new StopLossStrategy(myTrade, new Unit(order00.Price - 150, UnitTypes.Limit));
                            var tpsl = new TakeProfitStopLossStrategy(tp, sl);
                            ChildStrategies.Add(tpsl);
                        }
                    })
               .Apply(this);




Спасибо:


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

loading
clippy