Добрый день. 1 - Как подписать событие ? 2 - Как выставить обработчика ?
И всё это делать под WindowsForms.
В програмировании начальный уровень мне в нём легче.
Вот что есть на данный момент
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Ecng.Trading.Algo; using Ecng.Trading.Smart; using Ecng.Trading.BusinessEntities; using System.Net; using Ecng.Common; namespace Stock_060411_podkluchenie { public partial class Form1 : Form { public SmartTrader Trader; public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
{
IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090);
Trader = new SmartTrader(textBox1.Text, textBox2.Text, IP);
Trader.Connect();
}
private void TraderConnected()
{
label3.Text = "Подключили";
}
}
}
Kommentare (58)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Это же базовые вопросы на языку программирования. Как вы дальше роботов будете писать?
"+=" - подписаться на событие, после = пишите обработчик события. Лучше почитать того же Шилдта.
Спасибо Александр.
Помогите, на примере можно показать пажалуйста
public Form1() { InitializeComponent(); Trader.Connected += () => { this.TraderConnected(); }; не работает }
/////////////////
public Form1() { InitializeComponent(); Trader.Connected += TraderConnected(); не работает тоже }
private void button1_Click(object sender, EventArgs e) {
private void TraderConnected() { label3.Text = "Подключение выполнено"; // но тут пишет что обращение с другого потока помогите }
Так, но почитайте про GuiTrader и GuiSync в документации
Читаю - спасибо за помощь
Это для интересующихся http://sergeyteplyakov.blogspot.com/2009/03/windows-forms-controlinvoke.html
Подскажите в чём не прав
private void button1_Click(object sender, RoutedEventArgs e) { // this.Trader.Connected += TraderConnected => this.GuiAsync(() => { MessageBox.Show(this, "Подключение выполнено");}); //is.Trader.Connected += TraderConnected => this.GuiAsync(() => MessageBox.Show( "Подключение выполнено")); ;//.IsEnabled = true;;// = true;
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
Отключение вроде работает а вот это ни как
// подписываемся на событие отключения this.Trader.Disconnected += () => { this.GuiAsync(() => MessageBox.Show(this, "Одрубились Внатуре")); //Выводим сообщение если событие Connect() произошло }; Не выводит сообщение о том что отключили
И ещё скажите пожалуста а в чём разница методов OnDisconnect и Disconnect
Ё маё сколько просмотров и ни единого ответа ! ))))
private void TraderConnected() // странно здесь ловиться событие { this.GuiAsync(() => { MessageBox.Show(this, "Подрубились "); rez.Content = "ОК";// вывод результата
private void TraderDisconnected() // а здесь не ловиться почему ??? { this.GuiAsync(() => { MessageBox.Show(this, "ОТКЛЮЧЕН"); rez.Content = "Отключено"; // вывод результата }); }
Как подписываетесь на событие, как происходит отключение?
private void button1_Click(object sender, RoutedEventArgs e) // Кнопка подключится к серваку { IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090); // апи и порт Trader = new SmartTrader(Login.Text, Password.Text, IP); // указываем логин, пароль, и адрес Айпи
Отключение происходит но вот оповещать меня об етом не оповещает.
..... .... ....
private void button3_Click(object sender, RoutedEventArgs e)// Кнопка проверки подключения { if (Trader.IsConnected == true) { MessageBox.Show(this, "Подключено");
private void button2_Click(object sender, RoutedEventArgs e)// кнопка отключения {
В выхи демо сервер АйТи практически не работает.
Подскажите пожалуста как мне найти фьючерс _Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == "LKOH-3.11_FT"); вроде ж и торги есть а котировки получить не могу
И при вызове Trader.Disconnect(); происходит вот что ----- Сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)
не LKOH-3.11_FT а LKOH-6.11_FT
_Fuchlkoh = securities.FirstOrDefault(sec => sec.Code == ins2 && sec.Type == SecurityTypes.Future); в чём загвостка ???
А в SampleSmart он отображается?
сПАСИБ Помогло )))
_Fuchlkoh = securities.FirstOrDefault(sec => sec.Type == SecurityTypes.Future && sec.Code == ins2); Сделал вот так сортирую выделяю фьючи потом из фьючей нахожу по коду нахожу фьюч лука LKM1 и всё гуд
вот так даже правельней _Fuchlkoh = securities.FirstOrDefault(sec => sec.Type == SecurityTypes.Future && sec.Class == "RTS_FUT" && sec.Code == ins2);
Возникла проблемка не могу определить order.Id может на чтото не подписался подскажите пожалста Trader.RegisterOrder(order); Tekuhy.Content = "Заявка зарегистрирована. " + order.Id;
Этот процесс асинхронный.
this.GuiAsync(() => { Trader.RegisterOrder(order); label19.Content = "Заявка зарегистрирована. " + order.Id; });
Так не работает
this.Dispatcher.BeginInvoke((Action)(() => { this.Trader.RegisterOrder(order); label19.Content = "Заявка зарегистрирована. " + order.Id; })); И Этак не работает Подскажите как прально
При чём тут GuiAsync? Речь про отправку транзакций.
А как подскажите ?
В асинхронном режиме торговая программа сама генерирует Order.TransactionId. Из-за этого сразу после выполнения метода ITrader.RegisterOrder(Order) еще какое-то время может не быть инициализирован Order.Id. Чтобы узнать в программе, когда биржа присвоила заявке Order.Id, необходимо подписатся на событие ITrader.NewOrders (или для стоп-заявок ITrader.NewStopOrders). Для определения неуспешной регистрации используется событие ITrader.OrdersFailed (или для стоп-заявок ITrader.StopOrdersFailed).
this.Trader.NewOrders += TraderNewOrders; //---- Подписались ...... .... ... private void TraderNewOrders() { this.GuiAsync(() => { label19.Content = "Заявка зарегистрирована. " + order.Id; }); } В чём подвох ЭЭХ
this.Trader.AsyncMode = true; Подскажите чет не пойму а куда его крутить
Это для Квика. У Смарта всегда асинхронный режим.
Фуф Спасиб .
Просто надо было поменять order.Id на order.TransactionId; И всё работает Tekuhy.Content = "Заявка зарегистрирована. " + order.TransactionId;
Я вас читаю с самого начала и понять не могу - а что вы собственно сделать хотите?🙂
Номер заявки - это Order.Id и нужно дождаться событие NewOrders. Order.TransactionId - это номер транзакции. Разница между ними большая. Вам для чего нужен вывод на экран номера заявки? Что дальше планируется с этим выводом делать?
Номер нужен для дальнейшей коррекции заявки то-ли удалить то-ли модифицировать либо вообще удалить, а вывод на экран нужен всего-лишь для наглядности то-есть увидили пришла знач нормуль разрабатываем дальше. Вот собственно и всё . Вроде так ! )))
private void button6_Click(object sender, RoutedEventArgs e)// кнопка покупки акции {
private void button10_Click(object sender, RoutedEventArgs e) { Trader.CancelOrder(order1); } А почему не видит order1 ? Как сделать ? Чтоб удалял выставленый ордер ?
Для интересующихся... сделал выставление и удаление заявы всё вроде работает
this.Trader.NewOrders += orders => { foreach (var order in orders) Trader.CancelOrder(order); }; // подписались на получение регистрации заявок ... ... ... ... ... Вот собственно кнопка выставляет заяву и удаляет
private void button9_Click(object sender, RoutedEventArgs e)// кнопка продажи ФЬЮчерса { var order = new Order // выставляем заяву { Portfolio = _portfolioFORTS, Price = CenaAskRobo + 40, //////// Security = _Fuchlkoh, Volume = 1, Direction = OrderDirections.Sell, }; Trader.RegisterOrder(order); label22.Content = "Заявка зарегистрирована. " + order.TransactionId; Tekuhy.Content = order; this.GuiAsync(() => { if (order.State == OrderStates.Active) // проверка состояния { Trader.CancelOrder(order);// удаляем заяву } else { label19.Content = "Нету заявы "; }
Сделал кому интересно
public Order srt, newOrder;
,,,,, ,,,,,
this.Trader.NewOrders += orders => ; // подписались на получение регистрации заявок ... ... ... ... private void button9_Click(object sender, RoutedEventArgs e)// кнопка продажи ФЬЮчерса { var order = new Order { Portfolio = _portfolioFORTS, Price = CenaAskRobo + 40, //////// Security = _Fuchlkoh, Volume = 1, Direction = OrderDirections.Sell, }; Trader.RegisterOrder(order); label22.Content = "Заявка зарегистрирована. " + order.TransactionId; Tekuhy.Content = order; newOrder = order; }
А теперь кнопка удаления заявки
private void button10_Click(object sender, RoutedEventArgs e) { label19.Content = newOrder; // Trader.CancelOrder(newOrder);
Подскажите пожалуста а как определить какая именно заявка исполнилась ? Допустим у меня стоит и на продажу заявка и на покупку допустим исполнилась заявка на продажу как мне определить что именно заявка на покупку исполнилась ? // подписываемся на событие появления моих новых сделок
OrderDirection
Спасибо ! )))
Подскажите пожалста а как подключиться к демо счёту , чтоб оттестировать своего робокопа ?
Лучше используй тестирование на рыночных данных, см. документацию, раздел тестирование.
Ок спасиб смотрю !
Подскажите, как полечить ошибку?
На сколько я понял GuiAsync находится в Ecng.Xaml.dll, поэтому и ссылку в проекте на него вставил и using Ecng.Xaml добавил, но всё равно ругается!
Вот здесь ответ: http://sergeyteplyakov.blogspot.com/2009/03/windows-forms-controlinvoke.html
Именно так я и решил вопрос, заменив GuiAsync на InvokeIfNeeded. Просто не хотелось добавлять код для InvokeIfNeeded, т.к. GuiAsync уже описан же был, а просто почему-то не подключался.