Постов с тегом "C#": 140

C#


Я сделаю свой торговый терминал, с блекджеком и алго на базе StockSharp

    • 27 ноября 2018, 18:05
    • |
    • Ivan
  • Еще
Здравствуйте, я алготрейдер и очень давно использую продукты StockSharp в реальной торговле. В последнее время я перевёл всех своих роботов на обновленный S#.Shell. И в данной статье я покажу как с помощью S#.API самостоятельно создать полноценное приложения уровня S#.Shell
Я сделаю свой торговый терминал, с блекджеком и алго на базе StockSharp
Я не буду использовать сложные конструкции и паттерны проектирования, понятные только профессиональным программистам. Наоборот, цель статьи показать, что порог вхождения в создание своих приложений торговли с помощью S#.API очень низкий.
Если вы работаете в компании, и делаете свой уникальный софт (например, вы работает в проп или брокерской компании), вам так же будет интересно. В этой статье вы сможете узнать практику создания подобных систем (особенно, если вы только приступили к своим обязанностям).

Что понадобиться

1) Visual Studio 2017 (Community, бесплатная версия), в ней мы будем программировать.
2) Бесплатное подключение к тестовым торгам на бирже, я буду использовать QUIK.


( Читать дальше )

Нужен программист для написания торгового ПО.

В довольно амбициозный и интересный стартап ищем программистов (C# и node.js) с пониманием работы торговых платформ (проторговщик, дата майнер, бектестер и т.п.). Работа удаленная.
На испытательный срок предлагаем ежемесячный оклад, готовы также рассматривать варианты частичной занятости. Если сработаемся, то в дальнейшем приглашаем в команду.
Просьба заинтересовавшимся писать вопросы в личку или на algammon543@gmail.com

QUIKSharp – это Quik + бесплатный открытый исходный код на С#

Уважаемые трейдеры на просторах интернета я нашёл очень интересный проект. После неадекватных действий руководителя StockSharp был вынужден искать альтернативу их разработкам. Смог найти бесплатный проект с открытым исходным кодом, что лично для меня очень важно, т.к. роботы написанные на StockSharp скоро перестанут работать…
Ниже видео как скачать проект, установить, настроить и посмотреть его работу. Для тех кто знает программирование и в своё время мучался со StockSharp это видео будет в помощь. Первые шаги они самые трудные дальше будет легче.
Призываю Вас подсоединиться к проекту. Оно действительно того стоит
youtu.be/DKkCvKeSFoc

Ссылка на проект QUIKSharp


Программирование торговых роботов это доступно каждому

 

Где брать прибыль и стоит ли входить в рынок?
Расскажу идею и её запрограммирую.
Язык программирования С# Торговая платформа NinjaTrader 8 с её помощью можно торговать на Forex и бирже СМЕ.
Приходите будет интересно.
www.youtube.com/c/YouVoin/live
Программирование торговых роботов это доступно каждому

 

 


"Поехали" - посоветуйте хорошую книгу по C#

    • 24 ноября 2017, 09:42
    • |
    • gagarin
  • Еще
Всем привет.
Я в C# полный ноль. Подскажите книгу с которой стоит начать изучать C#. Интересно стало.

#пора_граммировать [7] ... авторизация на сайте МосБиржи #headers

— заходим на адрес https://passport.moex.com и регистрируемся. 
   запоминаем логин и пароль.
   подтверждаем почту.

— вместо login:password вбиваем свои данные
using System;
using System.Net;
using System.Text;

namespace AuthMoexSmpl
{
    class Program
    {
        static void Main(string[] args)
        { 
            string authLink = "https://passport.moex.com/authenticate";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(authLink);
            request.ContentType = "text/plain; charset=utf-8";
            request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("login:password")); //свои данные
            request.PreAuthenticate = true;
            request.CookieContainer = new CookieContainer();                 
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;            
            for(int i=0; i < response.Headers.Count; ++i)  
	                Console.WriteLine("\nHeader Name:{0}, Value :{1}",response.Headers.Keys[i],response.Headers[i]);
        }
    }
}
D:\devel\net\AuthMoexSmpl>dotnet run

Header Name:Cache-Control, Value :no-store, must-revalidate, no-cache, ma

Header Name:Connection, Value :close

Header Name:Date, Value :Fri, 10 Nov 2017 19:53:12 GMT

Header Name:Pragma, Value :no-cache

Header Name:ETag, Value :"xxxxxx"

Header Name:Server, Value :nginx

Header Name:Set-Cookie, Value :MicexPassportCert=xxxxxxx; domain=.moex.com; path=/, _passport_se
m xxxxx; path=/; HttpOnly

Header Name:Status, Value :200 OK

Header Name:X-Runtime, Value :713

Header Name:X-Moex-Passport-Certificate, Value :xxxxxx

Header Name:X-Powered-By, Value :Phusion Passenger 4.0.57

Header Name:Access-Control-Allow-Credentials, Value :true

Header Name:Access-Control-Expose-Headers, Value :X-MicexPassport-Marker

#учусьучить





#пора_граммировать [6] ... авторизация на сайте МосБиржи #cookie

— заходим на адрес https://passport.moex.com и регистрируемся.
   запоминаем логин и пароль.
   подтверждаем почту.

— вместо login:password вбиваем свои данные
using System;
using System.Net;
using System.Text;

namespace AuthMoexSmpl
{
    class Program
    {
        static void Main(string[] args)
        { 
            string authLink = "https://passport.moex.com/authenticate";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(authLink);
            request.ContentType = "text/plain; charset=utf-8";
            request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes("login:password")); // вносим свои данные
            request.PreAuthenticate = true;
            request.CookieContainer = new CookieContainer();                 
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;            
            foreach (Cookie cook in response.Cookies) {
                Console.WriteLine("Cookie:");
                Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
                Console.WriteLine("Domain: {0}", cook.Domain);
                Console.WriteLine("Path: {0}", cook.Path);
                Console.WriteLine("Port: {0}", cook.Port);
                Console.WriteLine("Secure: {0}", cook.Secure);
                Console.WriteLine("When issued: {0}", cook.TimeStamp);
                Console.WriteLine("Expires: {0} (expired? {1})", cook.Expires, cook.Expired);
                Console.WriteLine("Don't save: {0}", cook.Discard);    
                Console.WriteLine("Comment: {0}", cook.Comment);
                Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
                Console.WriteLine("Version: RFC {0}" , cook.Version == 1 ? "2109" : "2965");                
                Console.WriteLine ("String: {0}", cook.ToString());
            }                   
        }
    }
}
D:\devel\net\AuthMoexSmpl>dotnet run
Cookie:
_passport_session = xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Domain: passport.moex.com
Path: /
Port:
Secure: False
When issued: 11.11.2017 01:55:42
Expires: 01.01.0001 00:00:00 (expired? False)
Don't save: False
Comment:
Uri for comments:
Version: RFC 2965
...

#учусьучить

#пора_граммировать [5] ... цена последней сделки по Si с биржи.

Для получения последней сделки нужно изменить порядок запроса на обратный добавив
reversed=1
и оставить только строчку номер 15 в запросе
limit=1
получим запрос вида
https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?reversed=1&limit=1
Вариант автоматизации упрощенно:
using System;
using System.Net;
using System.IO;
using System.Text;

namespace GetLastPrice
{
    class Program
    {
        static void Main(string[] args)
        { 
            string newLine;
            string[] lastLine;
            string link = "https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?reversed=1&limit=1";
            int count = 0;           
            for (;;) {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
                request.ContentType = "text/plain; charset=utf-8";
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;        
                using (Stream responseStream = response.GetResponseStream())
                {                    
                    StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);                   
                    while ((newLine = sr.ReadLine()) != null) {                        
                        if (count == 14) {
                            if (newLine =="") break;
                            else {                        
                                lastLine =  newLine.Split(",");
                                Console.WriteLine("Volume is " + lastLine[6] +" at Price " + lastLine[5]);
                            }                                                   
                        }
                        count++;                                            
                    }                                                               
                }
                count = 0;
                response.Close();
            }            
        }
    }
}


( Читать дальше )

#пора_граммировать [4] тики с сайта МосБиржи, ну и минутки тоже :)

Если закинуть вот такую строчку в браузер, то получим тики по SiZ7 текущей сессии
https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json
— если добавить 
?start=0&limit=100
то начиная с первой сточки (номер ноль) получим только первые 100 сделок:
https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?start=0&limit=100
следующие 100 сделок:
?start=100&limit=100
Минутки получить можно так:
http://iss.moex.com/iss/engines/futures/markets/forts/boards/RFUD/securities/SiZ7/candles.json?from=2017-11-08&till=2017-11-08&interval=1&start=0
Если заменить .json --> .csv, то скачивается файл:

http://iss.moex.com/iss/engines/futures/markets/forts/boards/RFUD/securities/SiZ7/candles.json?from=2017-11-08&till=2017-11-08&interval=1&start=0
Программный пример:
using System;
using System.Net;
using System.IO;

namespace GetDataSmpl
{
    class Program
    {
        static void Main(string[] args)
        {   
            string link = "https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?start=0&limit=10";
            string dataLine; 
            int count = 0;           
            using (WebClient wc = new WebClient())
            {  
                Stream stream = wc.OpenRead(link);
                StreamReader sr = new StreamReader(stream);                
                while ((dataLine = sr.ReadLine()) != null) {
                    if (count >= 14 && count <= 23) Console.WriteLine(dataLine);
                    count +=1;
                }                        
                stream.Close();             
            }                
        }
    }
}


( Читать дальше )

....все тэги
UPDONW
Новый дизайн