← Назад

Изучаем S# под SmartCOM 2.0

Уважаемые форумчане подскажите пожалста. Пытаюсь изучить язык. Помогите пожалста если не трудно как сделать обычную кнопку под SmartCOM 2.0 чтобы покупала или продовала мне конкретный инструмент. Спасиб.

Комментарии (31)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Alexander
Alexander

MyxaGT: Уважаемые форумчане подскажите пожалста. Пытаюсь изучить язык. Помогите пожалста если не трудно как сделать обычную кнопку под SmartCOM 2.0 чтобы покупала или продовала мне конкретный инструмент. Спасиб.

В архиве со Stock# идут множество примеров, где всё хорошо расписано. Уверен, после детального просмотра 2х примеров SampleSmart и SampleSmartSMA вопросов станет на порядок меньше.

Вам нужен метод RegisterOrder у класса SmartTrader

MyxaGT
MyxaGT Автор

Пробую разбираюсь. Первую работу свою если получиться выложу. Спасибо за направление ! )))

MyxaGT
MyxaGT Автор

private void button1_Click(object sender, RoutedEventArgs e) {

        this.Trader = new SmartTrader(this.Login.Text, this.Password.Text, this.Address.SelectedAddress);


    }

Пытаюсь ввести IP сервера смарта this.Address.SelectedAddress --- подчёркивает и пишет ошибку, подскажите как прально как прально прописать 🤨

MyxaGT
MyxaGT Автор

Вообщем вроде подключение Настроил . Вот что получилось

namespace Stock_Myxa_2._0 { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public partial class MainWindow : Window {

    public SmartTrader Trader;


    **System.Net.IPAddress ip = System.Net.IPAddress.Parse("82.204.220.34");**     

public MainWindow()

{ InitializeComponent(); }

    private void button1_Click(object sender, RoutedEventArgs e)
    {

        **this.Trader = new SmartTrader(this.Login.Text, this.Password.Text, ip)
           { IsAutoSaveOrders = false };**
    }
}

}Если чтот не прально прошу меня попровлять ! )))

Greene-nsk
Greene-nsk

Порт забыли. Можно написать:


using System.Net;
...

IPEndPoint IP = new IPEndPoint(IPAddress.Parse("82.204.220.34"), 8090);
Trader = new SmartTrader(Account.Login, Account.Password, IP);
...

MyxaGT
MyxaGT Автор

Спасиб исправил Терь другая проблемка не могу включить прослушку на событие подключения

namespace Stock_Myxa_2._0 { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public partial class MainWindow : Window {

    public SmartTrader Trader;



    public MainWindow()
    {
        InitializeComponent();
    }

    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.Connected += () // Как здесь включить прослушку на события подключения ???
				{
				
				};



}

}

Greene-nsk
Greene-nsk

В примерах же все есть. Возьмите любой SampleSmart...

MyxaGT
MyxaGT Автор

Так в том то и дело как то не понятно с лямдо выражениями толи дело в с# подписался включил появилось отобразилось а тут во как // подписываемся на событие успешного соединения this.Trader.Connected += () => { // возводим флаг, что соединение установлено _isConnected = true;

					// разблокируем кнопку Экспорт
					this.GuiAsync(() => ChangeConnectStatus(true));
				};   А мне допустим достаточно вывести в Лабел подключения успешно выполнено и как тут ето осуществить  ???
Alexander
Alexander

MyxaGT: Так в том то и дело как то не понятно с лямдо выражениями толи дело в с# подписался включил появилось отобразилось а тут во как // подписываемся на событие успешного соединения this.Trader.Connected += () => { // возводим флаг, что соединение установлено _isConnected = true;

  				// разблокируем кнопку Экспорт
  				this.GuiAsync(() => ChangeConnectStatus(true));
  			};   А мне допустим достаточно вывести в Лабел подключения успешно выполнено и как тут ето осуществить  ???

Лямбда выражения и есть возможность C#. Тут S# никак не влияет - я сегодня ведь в ЛИСе ответил.


					this.Trader.Connected += () =>
						this.GuiAsync(() => Label.Text = "Подключение выполнено");

Почитайте на msdn про лямбда выражения. А то вопросы возникают не по библиотеке, а по стандартным вещам C#.

Greene-nsk
Greene-nsk

MyxaGT: Так в том то и дело как то не понятно с лямдо выражениями толи дело в с# подписался включил появилось отобразилось а тут во как // подписываемся на событие успешного соединения this.Trader.Connected += () => { // возводим флаг, что соединение установлено _isConnected = true;

  				// разблокируем кнопку Экспорт
  				this.GuiAsync(() => ChangeConnectStatus(true));
  			};   А мне допустим достаточно вывести в Лабел подключения успешно выполнено и как тут ето осуществить  ???

На самом деле тут даже лучше не использовать лябда. Это в примере просто так сделано, как проще. А стандартно это будет так:


this.Trader.Connected += TraderConnected;

private void TraderConnected()
{
    this.GuiAsync(() => Label.Text = "Подключение выполнено");
}

Так даже более правильно, потому что от лямбды не отпишешься. А от функции можно.

Greene-nsk
Greene-nsk

Alexander: Тут S# никак не влияет - я сегодня ведь в ЛИСе ответил.

Alexander, Вы даете консультации в ЛИСе? ) Есть какой-то отдельный канал для S#?

Alexander
Alexander

Greene-nsk:

Alexander: Тут S# никак не влияет - я сегодня ведь в ЛИСе ответил.

Alexander, Вы даете консультации в ЛИСе? ) Есть какой-то отдельный канал для S#?

Да я просто зашёл в ЛИСу, смотрю - вопрос по Stock# в общем чате. и ответил. Раньше просто, когда был аналитиком АйтиИнвеста, активно советовал всем писать роботов именно на Stock#, т.к. сам это делаю :) Несколько человек точно перешли на библиотеку после моих советов :)

Alexander
Alexander

Greene-nsk:

MyxaGT: Так в том то и дело как то не понятно с лямдо выражениями толи дело в с# подписался включил появилось отобразилось а тут во как // подписываемся на событие успешного соединения this.Trader.Connected += () => { // возводим флаг, что соединение установлено _isConnected = true;

					// разблокируем кнопку Экспорт
					this.GuiAsync(() => ChangeConnectStatus(true));
				};   А мне допустим достаточно вывести в Лабел подключения успешно выполнено и как тут ето осуществить  ???

На самом деле тут даже лучше не использовать лябда. Это в примере просто так сделано, как проще. А стандартно это будет так:

this.Trader.Connected += TraderConnected;

private void TraderConnected() { this.GuiAsync(() => Label.Text = "Подключение выполнено"); }

> 
> Так даже более правильно, потому что от лямбды не отпишешься. А от функции можно.


Поддерживаю.
Тут главное - использование this.GuiAsync, которое позволяет обращаться в другом потоке.
Всё это хорошо описано в документации (раздел Gui).
MyxaGT
MyxaGT Автор

Спасиб большое Очень помогаете !))) Работаю Дальше над Робокопом ! ))) 🙂

MyxaGT
MyxaGT Автор

private void button8_Click(object sender, EventArgs e) // включаем прослушку на заявку и на сделку { SmartCom.ListenPortfolio(textBox3.Text); // SmartCom.ListenTicks(textBox6.Text); } Не могу определить Купил или продал void SmartCom_AddTrade(string Globalportfoli, string GlobalKod_Evro, string GlobalLD, double price, double amount, System.DateTime datetime, string tradeno)// Находим ID Сделки { { double amount1 = amount; label29.Text = tradeno;

           Global_amount = amount1;

           if (Global_amount == 1)
           {
               label35.Text = "Купили";
           }

           if (Global_amount == -1)
           {
               label36.Text = "Продали";
           }

       }

    }
MyxaGT
MyxaGT Автор

Разобрался забыл назначить обработчика SmartCom.AddTrade += new _IStClient_AddTradeEventHandler(SmartCom_AddTrade);

MyxaGT
MyxaGT Автор

Черти чего показывает млин

Greene-nsk
Greene-nsk

а зачем напрямую со SmartCOM? Решили S# не пользоваться?

MyxaGT
MyxaGT Автор

Просто почемуто не могу я в ети библиотеки вехать.

MyxaGT
MyxaGT Автор

Странно почемуто он мне показывает прошлую сделку а мне надо чтоб он показывал только ту что вот вот произойдёт ... Тоесть включаем прослушку и после того как произойдёт сделка он только тогда показывает а он сразу при включении прослушки уже показывает типо мол купили или там продали в зависимости от того что сделали в прошлый раз private void SmartCom_AddTrade(string Globalportfoli, string GlobalKod_Evro, string GlobalLD, double price, double amount, System.DateTime datetime, string tradeno)// Находим ID Сделки { { // double amount1 = amount; label29.Text = tradeno;

          // Global_amount = amount1;

           if (Global_amount == 1)
           {
               label35.Text = "Купили";
           }

           if (Global_amount == -1)
           {
               label36.Text = "Продали";
           }

       }

    }
MyxaGT
MyxaGT Автор

Заметил интерестную вещь в чём отличие double от Double => Price - double - Цена Лимит, для заявок типа Лимит и Стоп-Лимит) и Amount - Double - Объем, ЦБ в приказе

Alexander
Alexander

MyxaGT: Заметил интерестную вещь в чём отличие double от Double => Price - double - Цена Лимит, для заявок типа Лимит и Стоп-Лимит) и Amount - Double - Объем, ЦБ в приказе

System.Double - CLR тип double - alias для System.Double

они одно и тоже

P.S. По таким вопросам стоит хотя бы в msdn заглядывать. Это основы C# :)

MyxaGT
MyxaGT Автор

Так я про тоже почему они в мануале так написали то double от Double . Лано ето всё не по теме . Вообщем робота я написал сегодня был тестовый режим работы заработал аж 66 рублей. Что хачу отметить как я не старался его сделать на S# один фиг написал на C#. Прям как в анекдоте ... Что если снести завод АвтоВАЗа и на его месте построить завод БМВ что будут выпускать? ОТВЕТ что что ЖИГУЛИ. Так и у меня как ни крутил,а блин опять написал на С#.

Mikhail Sukhov
Mikhail Sukhov

MyxaGT: Так я про тоже почему они в мануале так написали то double от Double . Лано ето всё не по теме . Вообщем робота я написал сегодня был тестовый режим работы заработал аж 66 рублей. Что хачу отметить как я не старался его сделать на S# один фиг написал на C#. Прям как в анекдоте ... Что если снести завод АвтоВАЗа и на его месте построить завод БМВ что будут выпускать? ОТВЕТ что что ЖИГУЛИ. Так и у меня как ни крутил,а блин опять написал на С#.

и лишились замечательной возможности - тестирования на истории.

Alexander
Alexander

MyxaGT: Так я про тоже почему они в мануале так написали то double от Double . Лано ето всё не по теме . Вообщем робота я написал сегодня был тестовый режим работы заработал аж 66 рублей. Что хачу отметить как я не старался его сделать на S# один фиг написал на C#. Прям как в анекдоте ... Что если снести завод АвтоВАЗа и на его месте построить завод БМВ что будут выпускать? ОТВЕТ что что ЖИГУЛИ. Так и у меня как ни крутил,а блин опять написал на С#.

Вы чего-то совсем путаете. S# - библиотека. C# - язык программирования.

Нельзя писать на S#.

MyxaGT
MyxaGT Автор

Всё прально хачу использовать библиотеку S# а пишу всёравно по мануалу смарткома как бы я не хотел её применить но мой мозг определяет мол можно это сделать вот такто и не парить мозг . Может ели бы был толковый пример онобы легче было бы разобраться. Ну да ладно у мя вот какой вопрос. Запустил Своего робокопа с утра вроде работоет нормуль тока вот вылетает часто. Пишет Disconnected Timout detected check your internet connectivity or event handler code

MyxaGT
MyxaGT Автор

Нашел ! Вроде Вот ! ))) Важное преимущество SmartCOM, данные поступают событиями, вам достаточно подписаться на их получение. Технология COM является не многопоточной, поэтому рекомендуется обработчики событий делать как можно более лёгкими. При отключении от сервера с причиной «Timout detected. check your internet connectivity or event handler code», следует оптимизировать код обработчиков или изменить таймаут на их обработку. Также необходимо учитывать, что события приходят построчно. Для изменения таймаута на обработку событий измените параметр в реестре windows [ HKEY_LOCAL_MACHINE\SOFTWARE\IT Invest\SmartCOM ] " logLevel"=dword:000003e8

Mikhail Sukhov
Mikhail Sukhov

MyxaGT: Нашел ! Вроде Вот ! ))) Важное преимущество SmartCOM, данные поступают событиями, вам достаточно подписаться на их получение. Технология COM является не многопоточной, поэтому рекомендуется обработчики событий делать как можно более лёгкими. При отключении от сервера с причиной «Timout detected. check your internet connectivity or event handler code», следует оптимизировать код обработчиков или изменить таймаут на их обработку. Также необходимо учитывать, что события приходят построчно. Для изменения таймаута на обработку событий измените параметр в реестре windows [ HKEY_LOCAL_MACHINE\SOFTWARE\IT Invest\SmartCOM ] " logLevel"=dword:000003e8

Писали бы на S# - таких бы проблем не было.😀

MyxaGT
MyxaGT Автор

Работает мой робокоп но сделок мало доход мал ! Решил написать Робокопа нового по логике ПАНДЫ . Подключил котиры идут нормуль общёт тоже нормальный но стоит только запустить в боевой режим Этож пипец !!! Всё глючит постоянно отрубаеться от сервера, время на обработку события уже установил 5 сек и нихрена ну допустим Покупка колов с перекрытием по дельте проходит нормально но кода начинается крыться путами ето вообще хана !!! Неужели все ети проблемы решатся с использованием библиотеки на S# ??? Не понимаю тот же язык то же общение с серваком теже события за счёт чего он будет работать стабильней ? Я к тому чтоб мой мозг поверил в ето. Единственное что приходит в голову так ето переходить на Плазу. Но нет уверенности что и там таких косяков не будет. Отвалишь 20-ку за подключение и такой же сервис. Обидно будет как то. Очень хочеться применять библиотеку но примеры ну уж очень запутаны . Мож у кого есть какиенибудь простенькие примерчики . обычная форма обычная кнопка .

Mikhail Sukhov
Mikhail Sukhov

MyxaGT: Неужели все ети проблемы решатся с использованием библиотеки на S# ???

Вообще то да. В SmartTrader встроенная правильная обработка событий. Без нее СмартКом глючит и рвет по частям.

MyxaGT
MyxaGT Автор

Нет ну ето не возможно ! ))) Дубыль ДВА !!! Иду изучать мат часть S# !!! )))