Добрый день. 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 = "Подключили";
}
}
}
Comentários (58)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Это же базовые вопросы на языку программирования. Как вы дальше роботов будете писать?
"+=" - подписаться на событие, после = пишите обработчик события. Лучше почитать того же Шилдта.
Спасибо Александр.
Помогите, на примере можно показать пажалуйста
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 уже описан же был, а просто почему-то не подключался.