Геннадий Ванин (Gennady Vanin)
|
Date: 1/11/2013
|
|
|
|
Дюшес А чего просто запустить руками и ввести пароль религия не позволяет? :) Я не знаю ни Вашей религии, ни , что она Вам запрещает при использовании C# или S#. Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал. В КВИК, если Вы запускаете его руками, то устанавливаете соединение QUIK с сервером, вводя руками логин+пароль или же Вы можете соединить терминал с сервреом из кода. Но у Вас код не имеет никакой информации, как подсоединться к уже запущенному терминалу КВИК (если он уже запущен и подсоединен к серверу) и не запускает его. У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать У Вас вообще в коде ничего нет, относящееся к терминалу КВИК! только шлюз КВИК в вакууме без какого-либо конкретно используемого терминала 2й и 3й проект вообще непонятно как относятся к RealTimeEmulation
|
|
Thanks:
|
|
|
|
|
esper
|
Date: 1/11/2013
Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет?
|
|
Thanks:
|
|
|
|
|
esper
|
Date: 1/11/2013
Геннадий Ванин (Gennady Vanin) У Вас создаётся шлюз КВИК, который не имееет никакой информации, ни как подсоединится к запущенному терминалу КВИК, никак не определяет и не считывает такую инфу (например, из GUI), ни пытается это сделать, в принципе эту информацию не может никак использовать Конструктор равносилен вызову Code
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно.
|
|
|
|
|
Дюшес
|
Date: 1/11/2013
Геннадий Ванин (Gennady Vanin) Никаких намёков или поводов переходить на личности и личные убеждения или верования я никогда никому не давал.
Да я не переходил на личности, я просто пошутил. Если обидел, то прошу прощения.
|
|
Thanks:
|
|
|
|
|
Дюшес
|
Date: 1/11/2013
esper Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет? Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике.
|
|
Thanks:
|
|
|
|
|
Геннадий Ванин (Gennady Vanin)
|
Date: 1/11/2013
esper Конструктор равносилен вызову Code
QuikTrader(QuikTerminal.GetDefaultPath())
и, если запущен только один терминал, то никаких проблем быть не должно. Да, действительно, не посмотрел, как реализован parameterless QuikTrader constructor Code
public QuikTrader()
: this(QuikTerminal.GetDefaultPath())
{
}
Очень полезно объяснять - так и сам частенько узнаёшь, что объясняk Всё-равно, надо было убедиться, что Дюшес не забывает запускать и логинить вручную КВИК, т.к. SampleRealTimeTesting основан на SmartCOM, где терминал запускать не надо
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 1/13/2013
Дюшес esper Дюшес Попробовал на альфе и квике. Заявки выставляются, но не исполняются при наступлении условия лимитированные ордера. Лимитные заявки, отправленные по рынку, исполняются. Debug лог нужен? Сразу не заметил, какую именно заявку вы выставляете? Стоп-заявку, лимитку или маркет? Стоп-заявку не пробовал. Пробовал лимитку - не получилось, маркет - срабатывает, лимитку по маркету (в смысле buy например цена + 100, sell = цена - 100) - тоже срабатывает. Результаты примерно одинаковые на альфе и квике. Не совсем понятно что подразумевается под лимиткой и под Quote:при наступлении условия лимитка . Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
|
|
Thanks:
|
|
|
|
|
Дюшес
|
Date: 1/16/2013
|
|
|
|
Alexander Mukhanchikov Не совсем понятно что подразумевается под лимиткой Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит. Code
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();
}
}
Code
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 = "Старт";
}
}
Code
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);
}
|
|
Thanks:
|
|
|
|
|
pyhta4og
|
Date: 1/16/2013
|
|
|
|
Дюшес Alexander Mukhanchikov Не совсем понятно что подразумевается под лимиткой Можете привести минимальный код где будет видно создание трейдера и выставление заявок, которые не работают.
Выставляю лимитную заявку и жду пока цена пройдет выше/ниже нее (ждал пунктов 50). При этом сделка не происходит. Code
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();
}
}
Code
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 = "Старт";
}
}
Code
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 (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?
|
|
Thanks:
|
|
|
|
|
Дюшес
|
Date: 1/21/2013
|
|
|
|
pyhta4og А есть возможность собрать дебаг-лог эмулятора? и указать ID (или хотя бы время с точностью до секунд) заявки которая должна была исполнится но не исполнилась?
Code
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 ДОЛЖНА БЫЛА ИСПОЛНИТЬСЯ!!!
Дебаг лог:
|
|
Thanks:
|
|
|
|