Котирование
Atom
16.01.2015


Как я понимаю есть 2 варианта запустить котирования
1) из документации http://stocksharp.com/do...c-bc8b-4afde645e483.htm
Код
var strategy = new MarketQuotingStrategy(order, new Unit());
base.ChildStrategies.Add(strategy);

Работает нормально, по крайней мере позиции набирает.


2) из одного из обновления http://stocksharp.com/fo...285/Stock--4-0-Release/
Код

this.OpenPositionByQuoting(10);

Работает не нормально, либо не правильно использую
В стратегии просто набираю позицию

В тестовом КВИКе выдает ошибку

Лог приложу
Еще раз повторю, что 1й работает а 2й не работает
Вопрос: это я не правильно использую или это баг?
log.txt 72 KB (304)

Теги:


Спасибо:


<< < 2 3 4 5  >
Иван З.

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


Проверил.
MarketQuotingStrategy также не откатывает на лучшую цену.
при параметре
Код
PriceOffset = Security.PriceStep, 
выставляет заявку на BestPrice а должен перед ней.

BestByPriceQuotingStrategy вообще не выставляет заявку.

остальные не смотрел, завтра посмотрю.
Спасибо:

Mikhail Sukhov

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


Иван З. Перейти

остальные не смотрел, завтра посмотрю.


Сырцы теперь есть. Предлагаю сразу обсуждать строчки кода, а не что-то абстрактное.
Спасибо:

Иван З.

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


По стратегиям из последней версии
BestByPriceQuotingStrategy и MarketQuotingStrategy
Так как MarketQuotingStrategy унаследована от BestByPriceQuotingStrategy, метод NeedQuoting у них общий. Проблема с тем, что заявка не откатывается у них общая

Можно вылечить так

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

1) BestPriceOffset - Отступ от лучшей цены, на который может уйти котируемая заявка.
Слово может очень сбивает с толку, в стратегии строго забито, что она в любом случае отступит от лучшей цены на значение BestPriceOffset

В моем представлении, если взять для примера BestByPriceQuotingStrategy, то стратегия должна выставлять заявку на лучшую цену(на то это и BestByPriceQuotingStrategy). Но если заявка уйдет от BestPrice на значение меньшее чем BestPriceOffset то переставляться не будет.

2) PriceOffset - Отступ цены для выставляемой заявки. Определяет размер отступа от лучшей котировки (для покупки прибавляется к цене, для продажи - вычитается).
Этот отступ есть у MarketQuotingStrategy если он положительный а сделка Buy, стратегия выставит заявку на BestPrice - BestPriceOffset + PriceOffset. То есть выше описанный BestPriceOffset тоже вычитается.

В общем мне кажется BestPriceOffset сейчас работает не так как надо, а GetAcceptablePriceRange() все таки нужный метод, по крайней мере для BestByPriceQuotingStrategy. Править?

В BestByVolumeQuotingStrategy я исправил один метод NeedQuoting. В коде постарался пояснения написать по подробнее. Протестировал, стратегия работает, выложил в ВК.
Спасибо:

RomSunZ

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


Что вы паритесь? GetAcceptablePriceRange:
Код

            if (this.Order != null) _bestprice = this.Order.Price;
            else return base.GetAcceptablePriceRange();
            if (_bestprice == 0)
                return new Range<decimal>(0m, 0m);
            var limit = QuotingDirection == Sides.Buy ? (decimal)(_bestprice + BestPriceOffset) : (decimal)(_bestprice - BestPriceOffset);
            //var md = GetFilteredQuotes(QuotingDirection);
            var md11 = Connector.GetFilteredMarketDepth(this.Security);
            var md = QuotingDirection == Sides.Buy ? md11.Bids : md11.Asks;

            if (md != null)
            {
                int i = 0;
                foreach (var q in md)
                {
                    if (QuotingDirection == Sides.Buy && q.Price <= _bestprice
                        || QuotingDirection == Sides.Sell && q.Price >= _bestprice)
                    {
                        i -= (int)BestPriceOffset.Value;

                        if (i < 0) i = 0;
                        limit = QuotingDirection == Sides.Buy ?
                            Math.Max(limit, md.ElementAt(i).Price)
                            : Math.Min(limit, md.ElementAt(i).Price);
                        break;
                    }
                    i++;
                }
            }
            var range = QuotingDirection == Sides.Buy
                            ? new Range<decimal>(_bestprice.Value, limit)
                            : new Range<decimal>(limit, _bestprice.Value);


            return range;


Цикл можете убрать. Для меня было интересно, чтобы отступ был рассчитан исходя из уровней стакана, а не тупой дельты от лучшей цены.

P.S. Возможно придется также изменить NeedQuoting:

Код

            var _bestprice = BestPrice;
            if (_bestprice == null || _bestprice == 0) return null;

            if (!acceptablePriceRange.Contains((decimal)_bestprice) || currentVolume != newVolume)
                return _bestprice;
            else
                return null;

Спасибо:

Иван З.

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


Все это уже было и даже работало[biggrin]
Цитата:
отступ был рассчитан исходя из уровней стакана, а не тупой дельты от лучшей цены.

что вы имеете ввиду?
Спасибо:

RomSunZ

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


А в версии 65 была изменена логика QuotingStrategy?
У меня код:
Код

public class myQuotingStrategy : QuotingStrategy
{
protected override Range<decimal> GetAcceptablePriceRange()
{
}
}

при построении проекта начал выдавать ошибку "не найден метод, пригодный для переопределения"...
Спасибо:

RomSunZ

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


В версии 4.2.66 проблема осталась. Доступ к переопределению GetAcceptablePriceRange будет, или нужно переделывать логику своего робота?
Спасибо:

Mikhail Sukhov

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


RomSunZ Перейти
В версии 4.2.66 проблема осталась. Доступ к переопределению GetAcceptablePriceRange будет, или нужно переделывать логику своего робота?


Второе.
Спасибо:

Mikhail Sukhov

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


По BestByPrice. Залил исправленное. Просьба проверить.

По BestByVolume. Ничего не понял. Лучше не пытаться исправлять код. Лучше написать что с ним не так. Потому что сечас код написан неправильно с точки зрения S#.
Спасибо:

RomSunZ

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


Коннектор Quik Lua, АПИ 4.2.68.
В стратегии QuotingStrategy если котируемая заявка была снята в ручную или системой (например на вечернем клиринге), то стратегия никак не отрабатывает этот момент.
В логе по этой заявке только такие строки:
Цитата:

16:12:35.712| |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) принята биржей.
...
16:12:57.155|Debug |LQS_SBER@TQBR_10182|Правило 'Отмена заявки 58272625/811066918 (0xEF627A) OR Полное исполнение 58272625/811066918 (0x311387F) OR Все сделки заявки 58272625/811066918 (0x1C20C5F) OR Ошибка регистрации заявки 58272625/811066918 (0x31E27EC)'. Активация.
16:12:57.155| |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) больше не активна.
...
16:13:06.165| |LQS_SBER@TQBR_10182|Отмена заявки 58272625 (0xF5B24E).
16:13:06.165| |LQS_SBER@TQBR_10182|Отмена заявки 58272625 (0xF5B24E).
16:13:06.165|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.176|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.176|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.176|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.186|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.186|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.186|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.191|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.191|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.191|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.194|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.194|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.194|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.198|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.198|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.198|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.211|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.211|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.211|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:13:16.217|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:13:16.217|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:13:16.217|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
...
16:16:49.933|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:16:49.933|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:16:49.933|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:16:52.980|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:16:52.980|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:16:52.980|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:16:53.968|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:16:53.968|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:16:53.968|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:16:58.015|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:16:58.015|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:16:58.015|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:17:00.090|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:17:00.090|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:17:00.090|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:17:02.904|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:17:02.904|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:17:02.904|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:17:04.136|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:17:04.136|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.
16:17:04.136|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0xC06E73) OR Изменение стакана инструмента LKOH@TQBR (0x1CC831B)'. Активация.
16:17:05.122|Debug |LQS_SBER@TQBR_10182|Правило 'Изменение стакана инструмента SBER@TQBR (0x3F19E1D) OR Изменение стакана инструмента LKOH@TQBR (0x25EE953)'. Активация.
16:17:05.122|Debug |LQS_SBER@TQBR_10182|Заявка 58272625 (0xF5B24E) в процессе снятия.

Логичнее было-бы сделать остановку стратегии.
Спасибо:
<< < 2 3 4 5  >

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

loading
clippy