Тимофей Мартынов
Тимофей Мартынов личный блог
20 января 2016, 14:41

Продолжаю изучать C#

Примерно 22 часа чистого времени уже потратил. С чего я начал в этот раз, я уже подробно тут описал. Чуть раньше (12 января) я задавался вопросом как ваще вызывать функцию подключенной библиотеки. Итак, что я делал с того момента? Я вернулся к книжке Изучаем C#, которую забросил читать на 255 странице 3 года назад. Сейчас начал читать её с начала, попутно выполняя все задания в C#. Сейчас дошел до 145 страницы пока. Читая книгу, и выполнив задание, я стал сам себе рассказывать (записывая экран с комментариями на ютуб), что я только что сделал. Это помогает мне осмыслить суть процессов.

Параллельно смотрю мануальчик по библиотеке SmartCom, чтобы понять, что мне надо вообще понять. Вроде пока моё примитивное знание говорит мне, что можно подрубить библиотеку через:
Продолжаю изучать C# 
Пока к сожалению что-то идёт не так:
Продолжаю изучать C#

Ну ничего, я пока ещё не претендую, чтобы хоть что-то работало, потому что почти методом тыка действую. В своей книжке я видимо не дошёл до такого понятия как «Событие», но что вот я вижу в мануале по смарткому:
Продолжаю изучать C#
Идёт описание «события» с кучей параметров. Пока из учебника я понимаю, что это функция, которая принимает в себя параметры, указанные в скобочках. С другой стороны, мне непонятно, ведь функция UpdateQuote должна наоборот передавать нам параметры? 

Ну типа моя логика говорит что синтаксис должен наверное быть примерно следующим:

Double martQuote = last.UpdateQuote(SIH6); — типа получить последнюю котировочку по SIH6.

Как на самом деле работать с синтаксисом такого события, я пока не знаю и даже не догадываюсь. Надо ещё почитать)) Глядишь страниц 150 по книге ещё пройду, уже всё заработает.

P.S. Супер-программисты, не ржите надо мной, это ж ради удовольствия и общего развития)
69 Комментариев
  • Turboslon
    20 января 2016, 14:45
    Ржать не будем, до смешных ошибок ещё надо дорасти.
    Лучше прокомментируй, что стало с топиками Решпекта сегодня? :)
  • Aberkromb Garell
    20 января 2016, 14:47
    я наверное дурак, но мне такие события не ясны…
  • S-L is SCKS
    20 января 2016, 14:49
    а на хрена тебе учить С# када у тебя работает толпа программеров?
    • Суперхимик
      20 января 2016, 19:49
      shortillo, хочет поди code review регулярно проводить)
  • Андрей Артышко
    20 января 2016, 14:54
    Никто не смеется. Обучение любым навыкам всегда идет на пользу! Читаю с интересом! :-)
  • Aberkromb Garell
    20 января 2016, 14:55
    вообще, там должно быть событие на которое подписываешься и которое отвечает за обновление котировок.

    Double martQuote = last.UpdateQuote(SIH6);  - этот предполагает что когда дело дойдет до него, то в martQuote  просто закинет последнюю котировку, но в таком случае тебе придется вызывать это миллион раз, и не будет обновляться в автоматическом режиме.
  • GetProfit
    20 января 2016, 15:00
    Тоже изучаю С#, все получится главное не забрасывать…
  • SergeyEgorov
    20 января 2016, 15:26
    Ключевой момент в том, что прежде чем нажимать Connect, надо подписаться на события. На события установления соединения, на события получения данных и так далее...

    Надо в книжке про C# прочитать главу про event-ы.
  • grevlanik
    20 января 2016, 15:51
    Почему С#, а не Java?
  • nbvehrfr
    20 января 2016, 16:00
    geekbrains.ru/ предлагаю начать с этого
    я не аффелирован никоим образом
  • vitaliy
    20 января 2016, 16:02
    >мне непонятно, ведь функция UpdateQuote должна наоборот передавать

    не функция, а метод )
    функция относящаяся к классу
    наверняка есть перегрузки, может и принимать и передавать параметры, которые могут быть и не обязательные
    короче поставь курсор на имя и нажми f12 там все увидишь
  • ves2010
    20 января 2016, 16:05
    ну да конечно… биржа пройденый этап… книгу написал… счас тима изучит си и будет ваять книгу про программирование… психологические аспекты кода… дисциплина и код… копипаста как вариант усреднения кода... 
      • ves2010
        20 января 2016, 18:09
        Тимофей Мартынов, 
        я вот старкрафт2 за зергов прошел… счас думаю потратить 400 геймечасов на фолаут4… жаль борделендсов больше нет
  • Том Сойер
    20 января 2016, 16:11
    Это точно сайт о трейдинге? :)
  • MTrader
    20 января 2016, 16:19
    помню пытался начать с Изучаем с#, грыз через не могу, все без толку. Троелсен мне зашел в разы легче
    зато благодаря Изучаем с# я бросил на время с# и прокодил питон и R, за это весьма благодарен авторам
    • Сергей Гаврилов
      20 января 2016, 17:05
      MTrader, если с нуля, то Шилд наверно лучше будет… Хотя сам тоже Троелсена пользовал, но не с нуля...

      • MTrader
        20 января 2016, 17:52
        Тимофей Мартынов, тебе шашечки или ехать? Это не рекомендация была, но личный опыт. Я не распробовал изучаем сишарп. Ты сам помню писал про тонкую грань оптимальной нагрузки для изучения чего либо, в данном случае лучше задай вопрос не перешел ли ты эту грань в область непосильного понимания, я думаю перешел и мотивация играет против тебя, тут надежда только на инсайт, что снижает вероятность освоения но увеличивает скорость при сексесе
  • Fillio
    20 января 2016, 16:19
    Что-то я не понимаю, ты изучаешь сишарп что бы прогать под стокшарп потом или что?
    • Alexand77
      20 января 2016, 16:36
      Максим Дмитриевский, я думаю, для того чтобы прогать непосредственно под API SmartCom, избегая лишнюю прокладку в виде StockSharp.
      • Сергей Гаврилов
        20 января 2016, 16:54
        Alexand77, кроме коннектров, которые в s# по сути и есть прокладка, в s# огромное количество функционала, который облегчит Вам жизнь… На то, что я, например, делаю за 15 мин, Вам придется потратить месяц… И не факт, что Ваш код будет лучше... 
        • Alexand77
          20 января 2016, 17:29
          Сергей Гаврилов, я не спорю абсолютно с этим, кроме того, я в S# писал и более менее разобрался. 
          Но меня на тот момент времени не устроил уровень бесплатной поддержки — предлагали пройти обучение на почти любой вопрос. Кроме того, как то завязываться не хотелось на непонятных мне людей, вот у них же там была бесплатная лицензия — в какой то момент она может стать платной (если уже не стала, я просто не слежу). 
          Поэтому в какой то момент я решил по хардкорному, без прокладок :) Да, потратил и больше месяца и не факт, что мой код лучше, зато он мой, я его полностью знаю.
          А с S# последней каплей стало, когда после очередного обновления перестали приходить свечи (это давно было, года два назад). Я написал в поддержку, мне сказали да, есть такое дело со SmartCom, мы его в очередь поставили, так как SmartCom не является нашим приоритетом, то мы когда-нибудь поправим, следите за обновлениями. Я следил месяца три — не поправили и перестал следить.
        • Alexand77
          20 января 2016, 18:10
          Тимофей Мартынов, так может в этом случае не стоит опускаться до API, а переместится на уровень повыше, типа того же S#, TSLab или вот там внизу какую-то неизвестную мне библиотеку предлагают? 
          На уровне API даже для того, чтобы автоматизировать закрытие всех позиций в конце дня — кучу всего придется «ненужного» написать, о чем ты сейчас даже не подозреваешь. 
      • Alexand77
        20 января 2016, 17:31
        Тимофей Мартынов, с такими лукавым настроем просто прогать не получится :)
  • Андрей К
    20 января 2016, 16:21
    Тимофей, переменные ip, порт, логин, пароль заполнены?
    в вашем коде они пустые, если только не заполняются в другом месте.
  • stitrace
    20 января 2016, 16:26
    Тимофей, рекомендую видеоуроки вот этого индуса:
    www.youtube.com/watch?v=YR6fxe1wa8g
    Там С++, правда, но применительно к .NET разница минимальная, всё тоже самое, практически.
  • Alexand77
    20 января 2016, 16:30
    вот начиная с bool martConnect можно убрать отсюда, это не тут нужно.
    Вместо этого подпишитесь на событие об удачном соединении:
    SmartCom.Connected += new _IStClient_ConnectedEventHandler(SmartCom_Connected);

    Потом собственно обработчик этого события :

    private void SmartServer_Connected()
    {
       //а вот тут, то что должно происходить по событию успешного //соединения и сделайте, например вывод окошка.
    }

      • Alexand77
        20 января 2016, 17:49
        Тимофей Мартынов, ну все, считай прошел :)  Алексей ниже тот же самый код практически привел, еще и с событием о дисконнекте.
  • Андрей К
    20 января 2016, 16:31
    Почитал доку. UpdateQuote не передает. Это срабатывает событие при изменении котировки на рынке. Груба говоря, как котировка изменится, сработает эта функция.
  • Алексей
    20 января 2016, 16:32
    смартком работает по событиям, то есть запросил что то, и ждёшь соответсвующего события в ответ. главное не забыть подписаться на нужный обработчик. для твоего примера подключения нужно сделать так:
      • Андрей К
        20 января 2016, 17:25
        Тимофей Мартынов, в теории это вот так выглядит. Надо читать сверху вниз.
      • Алексей
        20 января 2016, 19:57
        Тимофей Мартынов, так я вам и про теорию могу :-)
        1. Смартком «событийная фигня» если хочешь что то получить то должен:
        1. создать обработчик события.
        2. отправить запрос.
        например:
        что бы узнать что подключись к серверу — добавляем обработчик SmartCom_Connected(); затем отправляем запрос типа «горшочек вари» :-) SmartCom.Connect(...). всё ловим ответ
        для коннекта конечно сложней так как нужно ещё и диконект ловить, да и если мы уже подключены то ответа никакого не будет. но в теории работает так. если что спрашивайте я нём собаку съел :-) и не одну
  • wyg
    20 января 2016, 17:01
    Тимофей, здесь как раз про SmartCom — уроки по разработке на библиотеке под SmartCom:
    www.youtube.com/playlist?list=PLZYekWHmh5oG6iuCQsfA2Rp6ieORpMToo
    Библиотека опенсорсная и хорошо покрыта тестами — по сути тесты это небольшие примеры как работают части этой библиотеки, в том числе взаимодействие со SmartCom.
    Здесь C# — короткие уроки: www.youtube.com/playlist?list=PLZYekWHmh5oGyvXSaqaXPL9nOCLjGl1SA
    • Alexand77
      20 января 2016, 17:09
      wyg, так это уже библиотека над SmartCom, она не поможет изучить работу с API, а только запутает. 
      Это наверняка хорошая библиотека, работающая со SC, но по сути в видео описывается, как работать с ее абстракциями, она скрывает API от пользователя. Хотя я до сих пор не понимаю, что хочет Тимофей, или писать самому с нуля под API или просто сговнякать какой то секретный алгоритм — в этом случае и TSLab подойдет.
      • Счастливый Конец
        20 января 2016, 18:30
        Alexand77, он хочет как-то запустить тестовую программу TestConnect. Но что-то там сам пишет и оно не работает.
        • Alexand77
          20 января 2016, 18:37
          Счастливый Конец, ну TestConnect должен запускаться просто без «как-то».
          А на понимание логики, как устроен TestConnect у меня ушло довольно много времени, там свои прибабахи есть, которые лучше было бы и не знать, не много бы потерял. 
          Мне бы кто тогда, без воды все рассказал на примерах с пустого листа за пару дней, я бы сэкономил кучу времени. 
          А чужой код всегда чужой код, если хозяин не поясняет то разбираться можно долго.
      • wyg
        20 января 2016, 20:22
        Alexand77, «она скрывает API от пользователя.»
        Библиотека хорошо покрыта тестами, где видно как именно работают части этой библиотеки, в том числе взаимодействие со SmartCom. Это хороший пример того как можно сделать. Всегда лучше если есть куда посмотреть.
        • Alexand77
          20 января 2016, 20:35
          wyg, я же не против. Тут главное в чем цель, разобраться как работает API SmartCom или за одно еще разобраться как работает чья-то, пусть и хорошая, но проприетарная, библиотека и как она взаимодействует со SmartCom.
          • wyg
            21 января 2016, 12:58
            Alexand77, код там весь открыт в отличии от S#
            • Alexand77
              21 января 2016, 14:00
              wyg, это просто отлично, жаль я про вас раньше не слышал.
  • Счастливый Конец
    20 января 2016, 18:33
     Тимофей, я взял TestConnect как затравку, сделал так чтобы оно работало, а дальше выкинул весь ненужный мусор из нее (в частности бары). Не стал создавать новое приложение, просто переделал под себя. Робот под SmartCom, 5 месяцев полет нормальный.
    • Alexand77
      20 января 2016, 18:39
      Счастливый Конец, сначала я так же поступил, про это напейсал первую статью в своем блоге. Но за это время поднатаскался в C#, в целом вспомнил программирование чему учили в универе, и напейсал с нуля что то вроде библиотеки, не такой навороченной как S# конечно, но зато каждую буковку в ней знаю и не закрыта она для меня.
      • wyg
        21 января 2016, 13:05
        Alexand77, «не закрыта она для меня» так может сделаете ее не закрытой и для остальных — т.е. опенсорсной? многим была бы большая помощь ) разместить можно на github.com
        • Alexand77
          21 января 2016, 14:06
          wyg, смысла не вижу особого, она не причесанная к тому же, да и лень просто.
          Помощь я вижу в паре тройке базовых уроков, в том, как стартануть с нуля на смарткоме. Было бы чуть больше времени, я может бы и сваял бы что-то такое. 
          Просто вот в разборе чужого кода — это все конечно круто, но и для этого нужно иметь определенные скилы, согласитесь. 
          • wyg
            21 января 2016, 15:13
            Alexand77, конечно некоторый скил нужен. Залить код на github дело 5 минут, и я бы на вашу библиотеку посмотрел с интересом возможно и еще кому-то поможет, там глядишь и контрибьюторы найдутся… А то что код «не причесан» — так нет предела совершенству ) Кому будет интересно — сделают форк, причешут в меру своих способностей… Опять же на bitbucket.org есть и приватные репозитории бесплатные, если уж на столько код секретный )
  • afb
    20 января 2016, 20:23

    В Альфе  перешли на 4-ю версию. А там что-то типа С#. Вот подумываю:
    — вспомнить программирование или поменять брокера;
    Торгую только фьючерсами. Да и денег на счету в Альфе осталось немного.

     

  • FF_ATR
    20 января 2016, 21:08
    Тимофей, ты собрался роботов на C# писать? Но для этого нужна рабочая стратегия…
  • Изя 3%
    20 января 2016, 21:10
    обработчик события это код (твой метод, функция) который ты даешь этой в данном случае библиотеке,  который она (библиотека) вызовет когда котировка придет. те не ты вызываешь, а твой код вызовут когда в библиотеке произойдет это событие… ну это же  очень просто )
  • LAW
    20 января 2016, 21:27
    Я, как бывший учитель информатики, скажу так: Главное — это описать алгоритм, остальное для тебя сделают индусы, или китайцы, или даже наши. Не трать время на бесполезные знания, лучше прочитай несколько книг по алгоритмизации и т.п.
    • FF_ATR
      20 января 2016, 21:36
      LAW, +1
    • Счастливый Конец
      21 января 2016, 00:26
      LAW, не согласен. Умеение описать решение задачи в виде алгоритма это одно, а запрограммировать алгоритм — это другое. Иногда из программирования алгоритма видны его косяки, о которых индусы не скажут (им пофиг). Короче — правильной дорогой идет Тимофей, надо еще уметь сказать свой алгоритм машине. Можно и с переводчиком по штатам кататься, но приятнее самому разговаривать.
    • Alexand77
      21 января 2016, 14:09
      LAW, Што вы, кругом враги, грааль попалят!!!111 Только хардкор, лучше на ASM.
  • Максим Иванов
    20 января 2016, 23:54
    Тимофей Мартынов, Погоди, но разве не вы делали этот сайт? Я уже год с небольшим думаю, что вы программист и сами разработали этот сайт. Я что, ошибался? 
  • puncher
    21 января 2016, 00:29
    Если string, то 'SIH6'
  • broker25
    21 января 2016, 09:38
    Зачем писать все с нуля?
    Есть же (была по крайней мере) тестовая простая прога на сайте с событием коннект().

    Здесь важно то, что функции-события вызываешь не ты,
    они сами вызываются. Чтобы узнать текущий bid или ask придется ждать, пока придет событие и вызовет соотв. функцию.
    Заводишь какие-нибудь public переменные и в них  кидаешь то, что приходит в функции типа UpdateQuote.

    Считаю — все экранные формы нафиг. Они ничего не дают. Только загромождают код
  • Андрэ
    21 января 2016, 14:11
    Тимофей, ты — молодец! 
    уверен, что твой подвиг сподвигнет и таких как я пойти таким же путём)))) 
    удачи!)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн