Вопрос про лимитные заявки
Atom Ответить
16.01.2012


fau

Фотография
подскажите пожалуйста как создать лимитную заявку чтобы она работала
пробовал так:
1)
var order = this.BuyAtLimit(myPrice);
order.ExpiryDate = candle.Time + _timeSpan;
RegisterOrder(order);
2)
var order = new Order
{
Portfolio = Portfolio,
Price = myPrice,
Security = Security,
Volume = 1,
Direction = OrderDirections.Buy,
ExpiryDate = candle.Time + _timeSpan
};
RegisterOrder(order);
3)
var order = new Order
{
Portfolio = Portfolio,
Price = myPrice,
Security = Security,
Volume = 1,
Direction = OrderDirections.Buy,
ExpiryDate = candle.Time + _timeSpan
};
var strategy1 = new LimitQuotingStrategy(order);
ChildStrategies.Add(strategy1);

в первых 2-х примерах пробовал и через котирование
во всех 3-х случаях была покупка по цене открытия
цена myPrice входит в Low/High диапазон свечи, т.е. заявка по идее должна исполниться
ExpiryDate задаю верно



Спасибо:




9 Ответов
Alexander

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


ExpiryDate - в датах, а не времени
Если цена открытия лучше myPrice - мы и покупаем по цене открытия.

Если надо по myPrice - надо покупать в точке когда цена равна myPrice. А не в начале свечки


P.S. Отвечаю, т.к. была помощь по проекту с переписыванием примеров. На подобные вопросы отвечаем в техподдержке.
Спасибо: fau

fau

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


Alexander Mukhanchikov Перейти

Если надо по myPrice - надо покупать в точке когда цена равна myPrice. А не в начале свечки

какая-то странная лимитная заявка выходит, исполняется по текущей рыночной цене Blink
надеюсь все-таки что у меня с ExpiryDate ошибка
Alexander Mukhanchikov Перейти

P.S. Отвечаю, т.к. была помощь по проекту с переписыванием примеров. На подобные вопросы отвечаем в техподдержке.

если робот что-то заработает, и останутся вопросы, плавно перемещусь в техподдержку :)
Автор топика
Спасибо:

fau

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


Alexander Mukhanchikov Перейти
Если цена открытия лучше myPrice - мы и покупаем по цене открытия.

в том-то и дело что хуже

Alexander Mukhanchikov Перейти
Если надо по myPrice - надо покупать в точке когда цена равна myPrice. А не в начале свечки

ок, сделал чтобы не в начале
примерно получилось так:
this
.When(base.Security.BestBidPriceMore(new Unit(myPrice, UnitTypes.Limit)))
.Do(GoSell)
.Periodical(GetState);
получается я сначала жду цену, потом выставляю заявку, а мне всего-то надо как в терминале выставить заявку по конкретной цене

Alexander Mukhanchikov Перейти
P.S. Отвечаю, т.к. была помощь по проекту с переписыванием примеров. На подобные вопросы отвечаем в техподдержке.

ну возможно кто-то еще ответит, лимитные заявки-то я думаю многие используют
Автор топика
Спасибо:

Mikhail Sukhov

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


Чтобы примерно понять, что происходит. Есть ли какие то абсолютные значение? Цены, объемы, время... Или собрать минимальный код для воспроизведения ошибки.
Спасибо: fau

fau

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


Mikhail Sukhov Перейти
Чтобы примерно понять, что происходит. Есть ли какие то абсолютные значение? Цены, объемы, время... Или собрать минимальный код для воспроизведения ошибки.

http://rghost.ru/35959763 тут код с 4-мя вариантами
сделано на основе Samples\Testing\SampleHistoryTesting, можно туда же закинуть и вопроизвести
я тестил на сберофьюче за один день:
var security = new Security
{
Id = "SPFB.SBRF@RTS",
Code = "SPFB.SBRF",
Name = "SBRF",
MinStepSize = 1,
MinStepPrice = 1,
Exchange = Exchange.Test,
};
заявка:
Покупка 17.01.2011 10:05:01 10890,00000 10836,00000 Не активна Исполнена
сделка:
17.01.2011 10:05:01 10836,00000 1 Покупка
Автор топика
Спасибо:

Mikhail Sukhov

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


fau Перейти
заявка:
Покупка 17.01.2011 10:05:01 10890,00000 10836,00000 Не активна Исполнена
сделка:
17.01.2011 10:05:01 10836,00000 1 Покупка


А где ошибка? Выставили по 10890 покупку. Но купили по 10836. Нормально явление, если стакан в этот момент были с лучшим офером на 10836.
Спасибо: fau

fau

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


Mikhail Sukhov Перейти

А где ошибка? Выставили по 10890 покупку. Но купили по 10836. Нормально явление, если стакан в этот момент были с лучшим офером на 10836.

Blink
а смысл тогда вообще цену указывать, если покупка будет всегда по рыночной?
и в чем разница между BuyAtLimit(myPrice) и BuyAtMarket() ?

ладно, пускай это будет нормально, есть ли какое-то стандартное решение для того чтобы купить по 10890 если позволяет цена?
вариант 4 в файле подойдет?
Автор топика
Спасибо:

Alexander

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


fau Перейти
Mikhail Sukhov Перейти

А где ошибка? Выставили по 10890 покупку. Но купили по 10836. Нормально явление, если стакан в этот момент были с лучшим офером на 10836.

Blink
а смысл тогда вообще цену указывать, если покупка будет всегда по рыночной?
и в чем разница между BuyAtLimit(myPrice) и BuyAtMarket() ?

ладно, пускай это будет нормально, есть ли какое-то стандартное решение для того чтобы купить по 10890 если позволяет цена?
вариант 4 в файле подойдет?


Смысл в следующем.
Вы когда торгуете на рынке, пусть лучшая цена в стакане на продажу 105.
Вы посылаете: купить по 110.

Вы купите именно по 105, т.к. это будет лучшая цена.

Если в стакане лучшая цена на продажу равна 115, то ваша заявка выставится лимиткой в стакан по цене 110.


Тестирование происходит ровно таким же образом, всё в точности как и на настоящем рынке.
Спасибо: fau

fau

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


разобрался :)
спасибо за ответы!
Автор топика
Спасибо:


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

loading
clippy