Alexander
|
Дата: 17.12.2011
строить через смартком хфт - не лучшая затея. да, я отправляю без подтверждения. если заявка посылается по маркету - зачем подтверждение? порой через плазу2 задержки в секунды, какое тут подтверждение :) Quote:подтверждение выполнения в ордер это как раз и есть ответ от биржи.
|
|
|
|
ktulhu2000
|
Дата: 19.12.2011
смартком выбирал человек с нулевым опытом -) а какой шлюз больше подойдет? и какой - для тестирования?
если не ждать подтверждений, то, наверно ловить только order failed? и в этом случае что делать - закрываться и перестартовывать стратегию? тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?
и готовые защитные стратегии при хфт тоже нельзя использовать, получается?
|
Автор топика
|
|
|
Alexander
|
Дата: 19.12.2011
ktulhu2000  смартком выбирал человек с нулевым опытом -) а какой шлюз больше подойдет? и какой - для тестирования?
если не ждать подтверждений, то, наверно ловить только order failed? и в этом случае что делать - закрываться и перестартовывать стратегию? тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?
и готовые защитные стратегии при хфт тоже нельзя использовать, получается? для хфт - плаза2 можно ловить и исполнение сделок, и failed - тут всё зависит от стратегии что делать на order failed - это, опять же, зависит от стратегии. что вам надо делать если не удалось зарегать заявку? вряд ли перестартовывать стратегию. закрываться - тоже непонятно скорее всего либо игнорировать, либо слать опять заявку позицию можно считать самому - по мнимым сделкам, отправленным и реальную - что транслирует биржа защитные - можно использовать. они просто закрывают при наступлении нужной цены.
|
|
|
|
ktulhu2000
|
Дата: 19.12.2011
спасибо за ответы! если ориентироваться на плазу, что использовать для тестов - демо на смарткоме, realtime эмуляцию к плазе?
|
Автор топика
|
|
|
Alexander
|
Дата: 19.12.2011
ktulhu2000  спасибо за ответы! если ориентироваться на плазу, что использовать для тестов - демо на смарткоме, realtime эмуляцию к плазе? Что вам удобно, зависит от того, какие данные нужны для тестов
|
|
|
|
ktulhu2000
|
Дата: 19.12.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. инструмент фртс. Но получаю отказ в регистрации кросс-заявки. Из моих скудных знаний - так же не должно быть, если по маркету? Это особенность тестового ртс контура?
|
Автор топика
|
|
|
Alexander
|
Дата: 19.12.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. инструмент фртс. Но получаю отказ в регистрации кросс-заявки. Из моих скудных знаний - так же не должно быть, если по маркету? Это особенность тестового ртс контура? На бирже ртс нет сделок по рынку, она их не поддерживает. Только лимит :)
|
|
|
|
ktulhu2000
|
Дата: 20.12.2011
Alexander Mukhanchikov  На бирже ртс нет сделок по рынку, она их не поддерживает. Только лимит :)
my god! в терминале и при отправке из #S есть тип заявки market и оно срабатывает! т.е. надо делать "+" к LastTrade при покупке и "-" при продаже.
|
Автор топика
|
|
|
Alexander
|
Дата: 20.12.2011
ktulhu2000  т.е. надо делать "+" к LastTrade при покупке и "-" при продаже. именно :)
|
|
|
|
ktulhu2000
|
Дата: 09.02.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.
|
Автор топика
|
|
|
Alexander
|
Дата: 09.02.2012
Перечитал 3 раза, но вопросы не понял. Можно как-то поподробнее и почётче их расписать?
Если вопрос почему падает - пишите где падает и с каким сообщением.
|
|
|
|
ktulhu2000
|
Дата: 09.02.2012
Нет, он не падает в прямом смысле. Вопрос "как написать робота?".
Дело в том, что, глядя на API, я могу написать программу типа "if then", которая будет совсем Франкенштейн. Поэтому я взял красивую (с запуском MQS стратегии), но которая не выживает в диких условиях -)
Хотелось бы пример настоящей программы, где можно научиться и стратегию написать, и обрабатывать все возникающие ситауции.
В идеале вы присылаете ненужную вам рабочую программу в качестве примера для изучения, я смотрю как надо делать (отправлять заявки, реагировать на события) и не пишу глупые и абстрактные вопросы от чайника -)
|
Автор топика
|
|
|
Alexander
|
Дата: 09.02.2012
ktulhu2000  Нет, он не падает в прямом смысле. Вопрос "как написать робота?".
Дело в том, что, глядя на API, я могу написать программу типа "if then", которая будет совсем Франкенштейн. Поэтому я взял красивую (с запуском MQS стратегии), но которая не выживает в диких условиях -)
Хотелось бы пример настоящей программы, где можно научиться и стратегию написать, и обрабатывать все возникающие ситауции.
В идеале вы присылаете ненужную вам рабочую программу в качестве примера для изучения, я смотрю как надо делать (отправлять заявки, реагировать на события) и не пишу глупые и абстрактные вопросы от чайника -) Посмотрите на примеры на codeplex в ветке dev, там некоторые уже переписаны под событийную модель. К примеру - SampleHistoryTesting
|
|
|
|
ktulhu2000
|
Дата: 09.02.2012
я же его, собственно, и выложил ( там используется стратегия MQS - черный ящик который сам считает, сам выставляет. в итоге при ошибке выставления заявки работает неправильно, что с ним делать непонятно.
я поэтому просил реальные примеры.
|
Автор топика
|
|
|
Alexander
|
Дата: 09.02.2012
|
|
|
|
ktulhu2000
|
Дата: 09.02.2012
спасибо. а можно получить код встроенных стратегий? (MQS, StopLoss и тд)
|
Автор топика
|
|
|
Alexander
|
Дата: 09.02.2012
ktulhu2000  спасибо. а можно получить код встроенных стратегий? (MQS, StopLoss и тд)
А для чего вам исходники? Мы вообще их не распространяем, ибо смысла в этом мало. Если есть какие-то детальные вопросы - лучше задавать, мы постараемся ответить. Готовы куски кода приводить.
|
|
|
|
ktulhu2000
|
Дата: 09.02.2012
смысл в том, что в каком-нибудь MQS есть все для обучения - и со стаканами работает, и позиции считает, и на сообщения об ошибках реагирует, и заявки переставляет. В рабочем, правильно написанном виде, даже не представляю как это увидеть, даже если я напишу сюда еще 100 вопросов.
|
Автор топика
|
|
|
Alexander
|
Дата: 09.02.2012
ktulhu2000  смысл в том, что в каком-нибудь MQS есть все для обучения - и со стаканами работает, и позиции считает, и на сообщения об ошибках реагирует, и заявки переставляет. В рабочем, правильно написанном виде, даже не представляю как это увидеть, даже если я напишу сюда еще 100 вопросов. Я отправлю котирование на почту, обычное. Всё остальное от него наследуется. Но есть сомнения что вопросов станет меньше.
|
|
|