a.dobryn
|
Дата: 25.01.2011
в классе Trade есть член ExtensionInfo типа IDictionary<TKey, TValue>. А как узнать, какие ключи там есть? Конкретно мне нужно узнать, по какому лимиту была выставлена сделка
|
|
|
|
Mikhail Sukhov
|
Дата: 25.01.2011
D_Alex  в классе Trade есть член ExtensionInfo типа IDictionary<TKey, TValue>. А как узнать, какие ключи там есть? Конкретно мне нужно узнать, по какому лимиту была выставлена сделка Значение в ExtensionInfo так просто не попадают. Необходимо заранее настраивать ДДЕ метаданные через QuikTrader.TradesTable. Здесь это рассказывается как сделать. И обращаться в последствии нужно так: Кодvar someValue = someTrade.ExtensionInfo[DdeTradeColumns.SomeColumn];
|
|
|
|
Mikhail Sukhov
|
Дата: 25.01.2011
Valdis  я что то не пойму , почему событие Trader.PositionsChanged вызывается и при выставлении заявок и при исполнении их и даже просто, когда ни чего с позициями/заявками не происходит ?
События вызываются всегда, когда Квик через ДДЕ посылает обновление таблицы с позициями. А происходит это не только тогда, когда происходит сделка. В этой таблице есть и поля, которые изменяются постоянно.
|
|
|
|
gs
|
Дата: 25.01.2011
У меня вопрос к знатокам C# и Trans2Quik.
У меня автомат работает с квиком через файловый ввод заявок и работают три разных Квика. Я решил попробовать использовать Trans2Quik. Правильно ли я понимаю, что при этом мне нужно писать разные классы-врапперы Trans2Quik для каждой TRans2Quik.dll ? Ну, например, что то вроде такого:
public interface ITrans2Quik { // члены интерфейса }
// TRANS2QUIK_1.DLL public class Trans2Quik_1 : ITrans2Quik { private readonly string _pathToQuik; [DllImport("TRANS2QUIK_1.DLL", EntryPoint = "_TRANS2QUIK_CONNECT@16", CallingConvention = CallingConvention.StdCall)] public static extern long connect(string lpcstrConnectionParamsString, ref long pnExtendedErrorCode, byte[] lpstrErrorMessage, UInt32 dwErrorMessageSize); // и т.д. }
// TRANS2QUIK_2.DLL public class Trans2Quik_2 : ITrans2Quik { private readonly string _pathToQuik;
[DllImport("TRANS2QUIK_2.DLL", EntryPoint = "_TRANS2QUIK_CONNECT@16", CallingConvention = CallingConvention.StdCall)] public static extern long connect(string lpcstrConnectionParamsString, ref long pnExtendedErrorCode, byte[] lpstrErrorMessage, UInt32 dwErrorMessageSize); // и т.д. }
Таким образом, в данной реализации для добавления нового Квика, работающего со своей TRans2Quik.dll мне нужно создавать и новый класс Trans2Quik_N. Дело в том, что 1-ый параметр DllImport это const string.
Вопрос: Нельзя ли как то на С# динамически создавать тип Trans2Quik, но с разными значениями поля где храниться значение "TRANS2QUIK.DLL" ?
Или подскажите идею реализации добавления нового враппера при помощи создания нового экземпляра без создания нового класса.
|
|
|
|
Mikhail Sukhov
|
Дата: 26.01.2011
|
|
|
|
a.dobryn
|
Дата: 26.01.2011
Mikhail Sukhov  D_Alex  в классе Trade есть член ExtensionInfo типа IDictionary<TKey, TValue>. А как узнать, какие ключи там есть? Конкретно мне нужно узнать, по какому лимиту была выставлена сделка Значение в ExtensionInfo так просто не попадают. Необходимо заранее настраивать ДДЕ метаданные через QuikTrader.TradesTable. Здесь это рассказывается как сделать. И обращаться в последствии нужно так: Кодvar someValue = someTrade.ExtensionInfo[DdeTradeColumns.SomeColumn]; понятно, спасибо =) еще вопрос: мне нужно заменять заявку после того, как она частично исполнена. У меня есть сейчас событие NewMyTrades, но там есть данные типа Trade, а для замены заявки нужно получить тип Order. Можно ли как-то найти по сделке заявку?
|
|
|
|
Serg
|
Дата: 26.01.2011
В Trade есть данные о сделке и об ордере.
|
|
|
|
a.dobryn
|
Дата: 26.01.2011
|
|
|
|
a.dobryn
|
Дата: 27.01.2011
как использовать trader.GuarantyCancelOrder(registeredOrder)? написано, что trader должен быть типа TraderHelper, откуда его взять?
|
|
|
|
a.dobryn
|
Дата: 10.02.2011
еще вопрос - как определить, что заявка была именно исполнена, а не снята? State будет Done, а что еще посмотреть? При снятии заявки Balance в Order обнуляется или остается?
upd: все, глупый вопрос, есть метод IsMatched() upd2: а у меня нет такого метода для order
|
|
|
|
Greene-nsk
|
Дата: 10.02.2011
D_Alex  как использовать trader.GuarantyCancelOrder(registeredOrder)? написано, что trader должен быть типа TraderHelper, откуда его взять? Тоже не нашел то, что описано в документации. Может изменилось что. В S#3.0 применительно к ордеру есть order.GuarantyCancelOrder();
|
|
|
|
Greene-nsk
|
Дата: 10.02.2011
D_Alex  еще вопрос - как определить, что заявка была именно исполнена, а не снята? State будет Done, а что еще посмотреть? При снятии заявки Balance в Order обнуляется или остается?
upd: все, глупый вопрос, есть метод IsMatched() upd2: а у меня нет такого метода для order Он в TraderHelper, как и GuarantyCancelOrder(). Для этого надо включить using Ecng.Trading.Algo;
|
|
|
|
ttt
|
Дата: 16.02.2011
Добрый день.
1) В строке:
this.Trader.Trades += trades;
получаю ошибку: "Элемент "trades" не существует в текущем контексте".
В чем может быть дело?
2) Настроен вывод в Квике таблиц Инструменты, Ордера, Все сделки. При обращении же к Security.Name получаю все имя RIH1 (как и требуется). При обращении к числовым полям объекта Securiry нет обновления информации: Security.MaxPrice = 0 Security.LastTrade = null Пример Sample запускал - все работает как должно.
что делаю неверно?
|
Автор топика
|
|
|
KAX
|
Дата: 16.02.2011
candlemanager работает на основе данных таблицы "Все сделки". Но эта таблица содержит данные только за текущий торговый день.
Как быть если необходимы данные за более поздний период времени? Может быть добавить в candleManager добавить возможность подгрузки данных из текстовых файлов? Например в при старте программы
|
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
KAX  candlemanager работает на основе данных таблицы "Все сделки". Но эта таблица содержит данные только за текущий торговый день.
Как быть если необходимы данные за более поздний период времени? Может быть добавить в candleManager добавить возможность подгрузки данных из текстовых файлов? Например в при старте программы В разделе Экспорт произвольных таблиц показано, как грузить свечки из Квика.
|
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
ttt  что делаю неверно? Начинаете изучать S# без предварительного изучения C#. Так ничего не выйдет.
|
|
|
|
ttt
|
Дата: 16.02.2011
первый вопрос снимается.
по второму: Настроен вывод в Квике таблиц Инструменты, Ордера, Все сделки. При обращении же к Security.Name получаю имя RIH1 (как и требуется). При обращении к числовым полям объекта Security нет обновления информации: Security.MaxPrice = 0 Security.LastTrade = null Пример Sample запускал - все работает как должно. Проверено, что экспорт из Квика таблиц Инструментов и Всех сделок настроен верно. В чем причина, что данные из таблицы Инструменты обновляются, а из таблицы Все Сделки - нет?
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
ttt  Проверено, что экспорт из Квика таблиц Инструментов и Всех сделок настроен верно. В чем причина, что данные из таблицы Инструменты обновляются, а из таблицы Все Сделки - нет?
Смотрите на ProcessDataError. Убедитесь что NewTrades не вызывается.
|
|
|
|
KAX
|
Дата: 16.02.2011
Mikhail Sukhov  KAX  candlemanager работает на основе данных таблицы "Все сделки". Но эта таблица содержит данные только за текущий торговый день.
Как быть если необходимы данные за более поздний период времени? Может быть добавить в candleManager добавить возможность подгрузки данных из текстовых файлов? Например в при старте программы В разделе Экспорт произвольных таблиц показано, как грузить свечки из Квика. Не совсем понял, что Вы имеете в виду, либо Вы меня не поняли. Таймфрем - 5 минут, за торговый день всего 96 свечек (ммвб) Хотим в 10:36 получить последние 5 свечек, GetTimeFrameCandles(sec, TimeSpan.FromMinutes(5), 5) получим только одну сегодняшнюю свечу. А как получить остальные четыре за вчера?
|
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
KAX  Хотим в 10:36 получить последние 5 свечек, GetTimeFrameCandles(sec, TimeSpan.FromMinutes(5), 5) получим только одну сегодняшнюю свечу. А как получить остальные четыре за вчера?
В разделе Экспорт произвольных таблиц показано, как грузить свечки из Квика за вчерашний день.
|
|
|
|
KAX
|
Дата: 16.02.2011
Mikhail Sukhov  KAX  Хотим в 10:36 получить последние 5 свечек, GetTimeFrameCandles(sec, TimeSpan.FromMinutes(5), 5) получим только одну сегодняшнюю свечу. А как получить остальные четыре за вчера?
В разделе Экспорт произвольных таблиц показано, как грузить свечки из Квика за вчерашний день. О нашел, раньше просто смотрел в файле .chm в архиве с библиотекой. На сайте актуальней информация оказалась. Спасибо =)
|
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
KAX  Mikhail Sukhov  KAX  Хотим в 10:36 получить последние 5 свечек, GetTimeFrameCandles(sec, TimeSpan.FromMinutes(5), 5) получим только одну сегодняшнюю свечу. А как получить остальные четыре за вчера?
В разделе Экспорт произвольных таблиц показано, как грузить свечки из Квика за вчерашний день. О нашел, раньше просто смотрел в файле .chm в архиве с библиотекой. На сайте актуальней информация оказалась. Спасибо =) Версии новые выходят.
|
|
|
|
ttt
|
Дата: 16.02.2011
NewTrades не вызывается. this.Trader.Terminal.StartDde(this.Trader.SecuritiesTable, this.Trader.OrdersTable, this.Trader.TradesTable); //... далее следуют проверки, что экспорт всех трех таблиц запущен Security sec_1 = this.Trader.Securities.FirstOrDefault(sec => sec.Code == "RIH1"); AddToLog(this.textBox1, sec_1.Name.ToString()); //вывод на экран названия инструмента while (true) { if(sec_1!=null) { AddToLog(this.textBox1, sec_1.Name.ToString()); AddToLog(this.textBox2, sec_1.LastTrade.ToString()); AddToLog(this.textBox3, sec_1.MaxPrice.ToString()); } Thread.Sleep(1000); } Все сделано как написано в документации и на форуме. Возможно ли такое, что для запуска обновления полей Security.LastTrade и Security.Security.MaxPrice надо явно указать, что для Sec_1 начать обновление?
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 16.02.2011
Sample работает? Verifier что нибудь выводит? ProcessDataError?
|
|
|
|
skuvv
|
Дата: 18.02.2011
Вопрос по ситуации с [FORTS] В операции отказано: Превышен лимит операций от указанного клиента.: Асинхронный режим, отменяется ордер и отправляется новый. Приходит сообщение о флуде(в новом ордере) и потом не приходит сообщение об отмене ордера - заявка остается активной, но TraderHelper.IsCanceled считает заявку отклоненной... Посоветуйте, что можно сделать?
|
|
|