...

четверг, 4 июня 2015 г.

Как программисту заработать на фондовом рынке, думая только о коде

В нашем блоге мы уже публиковали истории о том, как программисты зарабатывали на фондовом рынке, применяя свои знания новых технологий (например, машинного обучения). В комментариях к подобным материалам некоторые пользователи Хабра говорили о том, что их смущает необходимость рисковать при работе на бирже своими собственными деньгами.

Сегодня мы подробнее расскажем о том, как можно заработать на фондовом рынке, занимаясь только программированием, и не вкладывая собственных средств. Сделать это можно участвуя в специальном конкурсе разработчиков от проекта StockSharp и ITinvest.

Что нужно делать


StockSharp — это open source-платформа для онлайн-трейдинга. Команда проекта совместно с ITinvest приглашают профессиональных разработчиков этим летом посоревноваться друг с другом, разрабатывая новые функции и дополнения к этому продукту.

Условия предельно просты: за каждое изменение (pull request), примененное в репозиторий StockSharp на GitHub, его автору будет выплачиваться денежное вознаграждение. Изменение может являться новой «фичей» для платформы (например, индикаторы технического анализа, стратегии торговли, новый вид графиков и т.д.) или обновление уже имеющейся функции (да-да, тот самый рефакторинг).

Все изменения будут проходить code review от участников проекта StockSharp и, после успешного прохождения проверки применены к основной ветке.

Используется единый стиль кодирования, совместимый с Microsoft C#, который является основным языком платформы (кстати, в блоге ITInvest было интересное интервью о том, почему C# и C++ популярны на фондовом рынке).

В качестве примера стиля можно использовать код одного из индикаторов технического анализа (Highest):

namespace StockSharp.Algo.Indicators
{
        using System.ComponentModel;
        using System.Linq;
        using System;

        using StockSharp.Localization;

        /// <summary>
        /// Максимальное значение за период.
        /// </summary>
        [DisplayName("Highest")]
        [DescriptionLoc(LocalizedStrings.Str733Key)]
        public class Highest : LengthIndicator<decimal>
        {
                /// <summary>
                /// Создать <see cref="Highest"/>.
                /// </summary>
                public Highest()
                {
                        Length = 5;
                }

                /// <summary>
                /// Обработать входное значение.
                /// </summary>
                /// <param name="input">Входное значение.</param>
                /// <returns>Результирующее значение.</returns>
                protected override IIndicatorValue OnProcess(IIndicatorValue input)
                {
                        var newValue = input.GetValue<decimal>();

                        var lastValue = Buffer.Count == 0 ? newValue : this.GetCurrentValue();

                        // добавляем новое начало
                        if (input.IsFinal)
                                Buffer.Add(newValue);

                        if (newValue > lastValue)
                        {
                                // Новое значение и есть экстремум 
                                lastValue = newValue;
                        }

                        if (Buffer.Count > Length)
                        {
                                var first = Buffer[0];

                                // удаляем хвостовое значение
                                if (input.IsFinal)
                                        Buffer.RemoveAt(0);

                                // удаляется экстремум, для поиска нового значения необходим проход по всему буфферу
                                if (first == lastValue && lastValue != newValue)
                                {
                                        // ищем новый экстремум
                                        lastValue = Buffer.Aggregate(newValue, (current, t) => Math.Max(t, current));
                                }
                        }

                        return new DecimalIndicatorValue(this, lastValue);
                }
        }
}


Также можно изучить код коннектора для работы с биткоинами. Дополнительно мы рекомендуем использовать продукт под названием ReSharper, который помогает контролировать качество создаваемого кода.

Прежде чем приступать непосредственно к написанию кода, рекомендуем написать в чат StockSharp сообщение с пометкой «Конкурс» или в раздел фич и почти-фич на GitHub — это позволит обсудить детали планируемого изменения с разработчиками проекта, что повысит шансы на его успешное применение.

Какова награда


За каждое примененное изменение автор будет получать 9 тысяч рублей. Но это еще не все: конкурс продлится до самого конца лета (он закончится 31 августа). После его завершения посредством голосования в группе «ВКонтакте» подписчики сообщества выберут автора лучшего изменения. Этот разработчик дополнительно получит 50 тысяч рублей.

Disclaimer: Изменения, авторами которых являются члены команды StockSharp, не участвуют в конкурсе.

Ссылки в помощь

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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий