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