Alexander
|
Date: 12/17/2011
строить через смартком хфт - не лучшая затея. да, я отправляю без подтверждения. если заявка посылается по маркету - зачем подтверждение? порой через плазу2 задержки в секунды, какое тут подтверждение :) Quote:подтверждение выполнения в ордер это как раз и есть ответ от биржи.
|
|
Thanks:
|
|
|
|
|
ktulhu2000
|
Date: 12/19/2011
смартком выбирал человек с нулевым опытом -) а какой шлюз больше подойдет? и какой - для тестирования?
если не ждать подтверждений, то, наверно ловить только order failed? и в этом случае что делать - закрываться и перестартовывать стратегию? тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?
и готовые защитные стратегии при хфт тоже нельзя использовать, получается?
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 12/19/2011
ktulhu2000 смартком выбирал человек с нулевым опытом -) а какой шлюз больше подойдет? и какой - для тестирования?
если не ждать подтверждений, то, наверно ловить только order failed? и в этом случае что делать - закрываться и перестартовывать стратегию? тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?
и готовые защитные стратегии при хфт тоже нельзя использовать, получается? для хфт - плаза2 можно ловить и исполнение сделок, и failed - тут всё зависит от стратегии что делать на order failed - это, опять же, зависит от стратегии. что вам надо делать если не удалось зарегать заявку? вряд ли перестартовывать стратегию. закрываться - тоже непонятно скорее всего либо игнорировать, либо слать опять заявку позицию можно считать самому - по мнимым сделкам, отправленным и реальную - что транслирует биржа защитные - можно использовать. они просто закрывают при наступлении нужной цены.
|
|
Thanks:
|
|
|
|
|
ktulhu2000
|
Date: 12/19/2011
спасибо за ответы! если ориентироваться на плазу, что использовать для тестов - демо на смарткоме, realtime эмуляцию к плазе?
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 12/19/2011
ktulhu2000 спасибо за ответы! если ориентироваться на плазу, что использовать для тестов - демо на смарткоме, realtime эмуляцию к плазе? Что вам удобно, зависит от того, какие данные нужны для тестов
|
|
Thanks:
|
|
|
|
|
ktulhu2000
|
Date: 12/19/2011
опять вопросы -) Code
pos = this.BuyAtMarket();
this.RegisterOrder(pos);
отправляет как LIMIT (смотрю в терминал SmartTrade, демосчет) заменил на Code
var order = new Order
{
Portfolio = Portfolio,
Security = Security,
Type = OrderTypes.Market,
Volume = _volume,
Direction = OrderDirections.Buy,
};
base.RegisterOrder(order);
стало MARKET. инструмент фртс. Но получаю отказ в регистрации кросс-заявки. Из моих скудных знаний - так же не должно быть, если по маркету? Это особенность тестового ртс контура?
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 12/19/2011
ktulhu2000 опять вопросы -) Code
pos = this.BuyAtMarket();
this.RegisterOrder(pos);
отправляет как LIMIT (смотрю в терминал SmartTrade, демосчет) заменил на Code
var order = new Order
{
Portfolio = Portfolio,
Security = Security,
Type = OrderTypes.Market,
Volume = _volume,
Direction = OrderDirections.Buy,
};
base.RegisterOrder(order);
стало MARKET. инструмент фртс. Но получаю отказ в регистрации кросс-заявки. Из моих скудных знаний - так же не должно быть, если по маркету? Это особенность тестового ртс контура? На бирже ртс нет сделок по рынку, она их не поддерживает. Только лимит :)
|
|
Thanks:
|
|
|
|
|
ktulhu2000
|
Date: 12/20/2011
Alexander Mukhanchikov На бирже ртс нет сделок по рынку, она их не поддерживает. Только лимит :)
my god! в терминале и при отправке из #S есть тип заявки market и оно срабатывает! т.е. надо делать "+" к LastTrade при покупке и "-" при продаже.
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 12/20/2011
ktulhu2000 т.е. надо делать "+" к LastTrade при покупке и "-" при продаже. именно :)
|
|
Thanks:
|
|
|
|
|
ktulhu2000
|
Date: 2/9/2012
|
|
|
|
Помогите сделать живучего робота. Взял SimpleSmaStrategy, переделанный под событийную модель. Робот делает два шага и падает ничком. У меня нет учебников, где написано как их собирать. Поэтому нужны конкретные ответы, а не политкорректные )) что можно разными вариантами сделать. нельзя - без долговременной практики. Биржа (смартком тест) не регистрирует заявку и все - незакрытые позиции стратегией не учитываются, position manager считает неправильно, выходим за пределы Volume и привет. Задача конечная - стратегия парного трейдинга. Я хотел отработать вот эти ситуации нештатные. Это можно сделать на примере черного ящика MarketQuotingStrategy или плюнуть на него? Если не использовать, то где взять примеры несферических стратегий? ( на всякий случай ниже раскадровка, версия 4.0.17 Code
class SmaStrategy : Strategy
{
private readonly CandleToken _candleToken;
private bool _isShortLessThenLong;
public SmaStrategy(CandleToken candleToken, ExponentialMovingAverage longSma, ExponentialMovingAverage shortSma, TimeSpan timeFrame)
{
_candleToken = candleToken;
LongSma = longSma;
ShortSma = shortSma;
}
public ExponentialMovingAverage LongSma { get; private set; }
public ExponentialMovingAverage ShortSma { get; private set; }
protected override void OnStarting()
{
this
.When(_candleToken.CandlesFinished())
.Do(ProcessCandles);
// запоминаем текущее положение относительно друг друга
_isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;
base.OnStarting();
}
private void ProcessCandles(IEnumerable<Candle> candles)
{
// если наша стратегия в процессе остановки
if (ProcessState == ProcessStates.Stopping)
{
// отменяем активные заявки
CancelActiveOrders();
return;
}
// если робот запустил экспорт не с начала торгов, может быть несколько свечей
foreach (var candle in candles)
{
// добавляем новую свечку
LongSma.Process((DecimalIndicatorValue)candle.ClosePrice);
ShortSma.Process((DecimalIndicatorValue)candle.ClosePrice);
}
// вычисляем новое положение относительно друг друга
var isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;
// если произошло пересечение
if (_isShortLessThenLong != isShortLessThenLong)
{
// если короткая меньше чем длинная, то продажа, иначе, покупка.
var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
// создаем заявку
var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);
// регистрируем заявку (обычным способом - лимитированной заявкой)
// RegisterOrder(order);
// регистрируем заявку (через котирование)
// var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
ChildStrategies.Add(strategy);
// запоминаем текущее положение относительно друг друга
_isShortLessThenLong = isShortLessThenLong;
}
}
}
Code
14:19:22.150 | | REAL_ExSma | Новая Buy сделка 54517197 по цене 163810 на 1 заявки 50757477.
14:22:07.413 | | MQS | Стратегия запущена.
14:22:07.416 | | MQS | Котирование на Sell объема 1.
14:22:07.416 | | MQS | Цена текущей NULL и лучшей 163755.
14:22:07.416 | | MQS | Лучший бид 163745 и лучший аск 163755.
14:22:07.416 | | MQS | Регистрация новой заявки на Sell с ценой 163755 и объемом 1.
14:22:07.418 | | MQS | Заявка 50757480 на Sell отправлена с ценой 163755 объемом 1.
14:22:07.486 | Warning | MQS | Заявка 50757480 в процессе регистрации.
14:22:07.603 | | MQS | Заявка 50757480 принята биржей.
14:22:07.631 | | MQS | Цена текущей 163755 и лучшей 163740.
14:22:07.631 | | MQS | Лучший бид 163720 и лучший аск 163740.
14:22:07.633 | | MQS | Котирование заявки 50757480 на Sell с ценой 163755 объемом 1.
14:22:07.643 | | MQS | Перекотирование зарегистрировано для заявки 50757481 на Sell с ценой 163740 объемом 1.
14:22:07.733 | | MQS | Цена текущей 163740 и лучшей 163755.
14:22:07.733 | | MQS | Лучший бид 163720 и лучший аск 163755.
14:22:07.736 | | MQS | Котирование заявки 50757481 на Sell с ценой 163740 объемом 1.
14:22:07.738 | | MQS | Перекотирование зарегистрировано для заявки 50757482 на Sell с ценой 163755 объемом 1.
14:22:07.811 | | MQS | Заявка 50757482 принята биржей.
14:22:07.963 | | MQS | Цена текущей 163755 и лучшей 163740.
14:22:07.963 | | MQS | Лучший бид 163730 и лучший аск 163740.
14:22:07.963 | | MQS | Котирование заявки 50757482 на Sell с ценой 163755 объемом 1.
14:22:07.968 | | MQS | Перекотирование зарегистрировано для заявки 50757483 на Sell с ценой 163740 объемом 1.
14:22:13.300 | | MQS | Цена текущей 163740 и лучшей 163805.
14:22:13.301 | | MQS | Лучший бид 163720 и лучший аск 163805.
14:22:13.301 | | MQS | Котирование заявки 50757483 на Sell с ценой 163740 объемом 1.
14:22:13.318 | | MQS | Перекотирование зарегистрировано для заявки 50757484 на Sell с ценой 163805 объемом 1.
14:22:13.321 | Error | MQS | Заявка 50757483 не была принята по причине System.InvalidOperationException: Перестановка заявки 50757483 не возможно в силу того что удовлетворена исходная заявка..
14:22:13.321 | Error | MQS | Заявка 50757484 не была принята по причине System.InvalidOperationException: Перестановка заявки 50757484 не возможно в силу того что удовлетворена исходная заявка..
14:22:13.321 | Error | MQS | Заявка 50757483 не принята биржей по причине 'Перестановка заявки 50757483 не возможно в силу того что удовлетворена исходная заявка.'.
14:22:13.323 | Warning | MQS | Заявка 50757483 устарела.
14:22:13.323 | Error | MQS | Заявка 50757484 не принята биржей по причине 'Перестановка заявки 50757484 не возможно в силу того что удовлетворена исходная заявка.'.
14:22:13.323 | | MQS | Цена текущей NULL и лучшей 163805.
14:22:13.323 | | MQS | Лучший бид 163720 и лучший аск 163805.
14:22:13.323 | | MQS | Регистрация новой заявки на Sell с ценой 163805 и объемом 1.
14:22:13.331 | | MQS | Заявка 50757485 на Sell отправлена с ценой 163805 объемом 1.
14:22:13.333 | | REAL_ExSma | Новая позиция -1.
14:22:13.334 | | MQS | Новая позиция -1.
14:22:13.335 | | MQS | Позиция изменилась на -1. Оставшийся объем 0.
14:22:13.336 | | MQS | Заканчиваем котирование.
14:22:13.336 | | MQS | Отмена заявки 50757480.
14:22:13.341 | | MQS | Стратегия останавливается.
14:22:13.342 | | MQS | Стратегия остановлена.
14:22:13.352 | | REAL_ExSma | Новая Sell сделка 54517392 по цене 163740 на 1 заявки 50757482.
|
|
Thanks:
|
|
|
|