Геннадий Ванин (Gennady Vanin)
|
Дата: 11.01.2013
|
|
|
|
Дюшес А чего просто запустить руками и ввести пароль религия не позволяет? :) Я не знаю ни Вашей религии, ни , что она Вам запрещает при использовании C# или S#. Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал. В КВИК, если Вы запускаете его руками, то устанавливаете соединение QUIK с сервером, вводя руками логин+пароль или же Вы можете соединить терминал с сервреом из кода. Но у Вас код не имеет никакой информации, как подсоединться к уже запущенному терминалу КВИК (если он уже запущен и подсоединен к серверу) и не запускает его. У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать У Вас вообще в коде ничего нет, относящееся к терминалу КВИК! только шлюз КВИК в вакууме без какого-либо конкретно используемого терминала 2й и 3й проект вообще непонятно как относятся к RealTimeEmulation
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 11.01.2013
Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет?
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 11.01.2013
Геннадий Ванин (Gennady Vanin) У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать Конструктор равносилен вызову Код
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно.
|
|
|
|
|
Дюшес
|
Дата: 11.01.2013
Геннадий Ванин (Gennady Vanin) Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал.
Да я не переходил на личности, я просто пошутил. Если обидел, то прошу прощения.
|
|
Спасибо:
|
|
|
|
|
Дюшес
|
Дата: 11.01.2013
esper Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет? Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике.
|
|
Спасибо:
|
|
|
|
|
Геннадий Ванин (Gennady Vanin)
|
Дата: 11.01.2013
esper Конструктор равносилен вызову Код
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно. Да, действительно, не посмотрел, как реализован parameterless QuikTrader constructor Код
public QuikTrader()
: this(QuikTerminal.GetDefaultPath())
{
}
Очень полезно объяснять - так и сам частенько узнаёшь, что объясняk Всё-равно, надо было убедиться, что Дюшес не забывает запускать и логинить вручную КВИК, т.к. SampleRealTimeTesting основан на SmartCOM, где терминал запускать не надо
|
|
Спасибо:
|
|
|
|
|
Alexander
|
Дата: 13.01.2013
Дюшес esper Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет? Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике. Не совсем понятно что подразумевается под лимиткой и под Цитата:при наступлении условия лимитка . Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
|
|
Спасибо:
|
|
|
|
|
Дюшес
|
Дата: 16.01.2013
|
|
|
|
Alexander Mukhanchikov Не совсем понятно что подразумевается под лимиткой Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит. Код
private void ConnectClick(object sender, RoutedEventArgs e)
{
if (!_isConnected)
{
if (_trader == null)
{
_trader = new RealTimeEmulationTrader<AlfaTrader>(new AlfaTrader());
Portfolios.Trader = _trader;
_trader.Connected += () =>
{
_isConnected = true;
_trader.NewSecurities += securities =>
{
if(security == null)
security = securities.Where(s => s.Type == SecurityTypes.Future).FirstOrDefault(s => s.Code.StartsWith("RTSI-") || s.Code.StartsWith("RI"));
if (security != null)
{
_trader.RegisterTrades(security);
_trader.RegisterSecurity(security);
_trader.RegisterMarketDepth(security);
}
};
_trader.StartExport();
};
}
_trader.LogLevel = LogLevels.Debug;
logManager.Sources.Add(_trader);
_trader.Connect();
}
else
{
_trader.UnRegisterMarketDepth(security);
_trader.Disconnect();
}
}
Код
private void StartClick(object sender, RoutedEventArgs e)
{
if (_strategy == null)
{
_strategy = new MyStrategy()
{
Volume = 1,
Security = security,
Portfolio = Portfolios.SelectedPortfolio,
Trader = _trader,
};
_strategy.NewMyTrades += trades => this.GuiAsync(() =>
{
if (_strategy != null)
{
trades = trades.Where(t => _strategy.Orders.Any(o => o == t.Order));
_trades.Trades.AddRange(trades);
}
});
_strategy.Log += OnLog;
_trader.NewOrders += orders => _orders.Orders.AddRange(orders);
logManager.Sources.Add(_strategy);
}
if (_strategy.ProcessState == ProcessStates.Stopped)
{
_strategy.Start();
Start.Content = "Стоп";
}
else
{
_strategy.Stop();
Start.Content = "Старт";
}
}
Код
class MyStrategy : Strategy
{
protected override void OnStarted()
{
base.OnStarted();
SetOrder(OrderTypes.Market, OrderDirections.Buy, 0); // Исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Sell, (decimal)Security.GetCurrentPrice() - 100)); // Исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Sell, Security.GetCurrentPrice().To<decimal>() + 30); // Не исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Buy, Security.GetCurrentPrice().To<decimal>() - 30); // Не исполняется
}
public void SetOrder(OrderTypes type, OrderDirections dir, decimal price)
{
var order = this.CreateOrder(dir, price);
order.Type = type;
RegisterOrder(order);
}
|
|
Спасибо:
|
|
|
|
|
pyhta4og
|
Дата: 16.01.2013
|
|
|
|
Дюшес Alexander Mukhanchikov Не совсем понятно что подразумевается под лимиткой Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит. Код
private void ConnectClick(object sender, RoutedEventArgs e)
{
if (!_isConnected)
{
if (_trader == null)
{
_trader = new RealTimeEmulationTrader<AlfaTrader>(new AlfaTrader());
Portfolios.Trader = _trader;
_trader.Connected += () =>
{
_isConnected = true;
_trader.NewSecurities += securities =>
{
if(security == null)
security = securities.Where(s => s.Type == SecurityTypes.Future).FirstOrDefault(s => s.Code.StartsWith("RTSI-") || s.Code.StartsWith("RI"));
if (security != null)
{
_trader.RegisterTrades(security);
_trader.RegisterSecurity(security);
_trader.RegisterMarketDepth(security);
}
};
_trader.StartExport();
};
}
_trader.LogLevel = LogLevels.Debug;
logManager.Sources.Add(_trader);
_trader.Connect();
}
else
{
_trader.UnRegisterMarketDepth(security);
_trader.Disconnect();
}
}
Код
private void StartClick(object sender, RoutedEventArgs e)
{
if (_strategy == null)
{
_strategy = new MyStrategy()
{
Volume = 1,
Security = security,
Portfolio = Portfolios.SelectedPortfolio,
Trader = _trader,
};
_strategy.NewMyTrades += trades => this.GuiAsync(() =>
{
if (_strategy != null)
{
trades = trades.Where(t => _strategy.Orders.Any(o => o == t.Order));
_trades.Trades.AddRange(trades);
}
});
_strategy.Log += OnLog;
_trader.NewOrders += orders => _orders.Orders.AddRange(orders);
logManager.Sources.Add(_strategy);
}
if (_strategy.ProcessState == ProcessStates.Stopped)
{
_strategy.Start();
Start.Content = "Стоп";
}
else
{
_strategy.Stop();
Start.Content = "Старт";
}
}
Код
class MyStrategy : Strategy
{
protected override void OnStarted()
{
base.OnStarted();
SetOrder(OrderTypes.Market, OrderDirections.Buy, 0); // Исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Sell, (decimal)Security.GetCurrentPrice() - 100)); // Исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Sell, Security.GetCurrentPrice().To<decimal>() + 30); // Не исполняется
SetOrder(OrderTypes.Limit, OrderDirections.Buy, Security.GetCurrentPrice().To<decimal>() - 30); // Не исполняется
}
public void SetOrder(OrderTypes type, OrderDirections dir, decimal price)
{
var order = this.CreateOrder(dir, price);
order.Type = type;
RegisterOrder(order);
}
А есть возможность собрать дебаг-лог эмулятора? и указать ID (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?
|
|
Спасибо:
|
|
|
|
|
Дюшес
|
Дата: 21.01.2013
|
|
|
|
pyhta4og А есть возможность собрать дебаг-лог эмулятора? и указать ID (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?
Код
2013/01/21 14:16:57.531| |MS_RTSI-3.13@FORTS|Регистрация новой Market (0x15BD13E) заявки на Sell с ценой 0 и объемом 1.
2013/01/21 14:16:57.640| |MS_RTSI-3.13@FORTS|Регистрация новой Limit (0x2FB4FD4) заявки на Buy с ценой 159800 и объемом 1.
2013/01/21 14:16:57.671| |MS_RTSI-3.13@FORTS|Регистрация новой Limit (0x2A9A8D9) заявки на Sell с ценой 159840 и объемом 1.
2013/01/21 14:16:58.515|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 1 TransId: 51400157 security: RTSI-3.13
2013/01/21 14:16:58.578| |MS_RTSI-3.13@FORTS|Новая Sell сделка 1 по цене 159810 на 1 заявки 51400157.
2013/01/21 14:16:58.625| |MS_RTSI-3.13@FORTS|Новая позиция: 12822-001@FORTS-RTSI-3.13@FORTS=-1.
2013/01/21 14:16:58.640|Warning|MS_RTSI-3.13@FORTS|Ордер id: 1 TransId 51400157 исполнен в объеме 1. security: RTSI-3.13
2013/01/21 14:16:58.640| |MS_RTSI-3.13@FORTS|Заявка 51400157 больше не активна.
2013/01/21 14:16:58.656|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 2 TransId: 51400158 security: RTSI-3.13
2013/01/21 14:16:58.656|Warning|MS_RTSI-3.13@FORTS|Заявка принята биржей. Id: 3 TransId: 51400159 security: RTSI-3.13
2013/01/21 14:17:56.578|Warning|MS_RTSI-3.13@FORTS|ЗАЯВКА 51400158 ДОЛЖНА БЫЛА ИСПОЛНИТЬСЯ!!!
Дебаг лог:
|
|
Спасибо:
|
|
|
|