Вопросы новичка в S# (Закрыта)
Atom
01.12.2010


ttt

Фотография
Добрый день.
Очень понравилась идея использования Вашей библиотеки для реализации роботов.
Подскажите, пожалуйста:
1) Как идентифицировать заявку?
//например, выставляю заявку buy RIZ0 4 контракта по цене 160500. Каким образом далее смогу ее отслеживать?
Вариант с использованием таблицы сделок не подходит - необходимо реализовать контроль исполнения заявок пользуясь исключительно информацией из таблицы заявок.
С языком C# только начал разбираться, возможно поэтому не нашел в представленных в дистрибутиве S# проектах примеров контроля состояния заявки по ее уникальному признаку.
2) Верно ли я понимаю суть работы с Квиком: для реализации автономного робота необходимо организовать два потока на C#:
- первый: выполняет функции получения данных из Квика через DDE сервер (используя библиотеку S#);
- второй: непосредственно реализует алгоритм выставления и снятия заявок.
Можно ли обойтись одним потоком?

Теги:


Спасибо: Николай_Флёров




506 Ответов
< 1 2 3 4 5  > >>
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];
Спасибо: a.dobryn

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


gs Перейти

Или подскажите идею реализации добавления нового враппера при помощи создания нового экземпляра без создания нового класса.


https://stocksharp.ru/do...a9-ab0f-9946b7acf6fe.htm
Спасибо:

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

a.dobryn

Фотография
Дата: 26.01.2011


Serg Перейти
В Trade есть данные о сделке и об ордере.

https://stocksharp.ru/doc/Default.aspx
тут нет

а, все, поняла =) спасибо =)
Спасибо:

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

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 считает заявку отклоненной...
Посоветуйте, что можно сделать?
Спасибо:
< 1 2 3 4 5  > >>

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy