Геннадий Ванин (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 ДОЛЖНА БЫЛА ИСПОЛНИТЬСЯ!!!
Дебаг лог:
|
|
Спасибо:
|
|
|
|