Як вибрати мову програмування для свого робота?

Anonim

Не знаю, чи замислювався хто-небудь із вас про створення власного "чудо-робота" для торгівлі, а у мене така ідея виникала неодноразово. Єдине, що зупиняло - незнання основних принципів створення алгоритму, та й з програмуванням якось не дуже склалося. Але якщо мета поставлена ​​- її необхідно реалізувати. Ми знаємо, що сьогодні є кілька варіантів створення робота для торгівлі - на базі торгових майданчиків (деякі з них дозволяють розробляти свої алгоритми торгівлі), на базі добре відомого Excel, за допомогою спеціального ПО начебто WealthLab або MetaStock і, звичайно, написання програми на одному з мов програмування. Вибір тут дійсно широкий - C ++, Delphi, Java, VB, C # та інші. Але яка мова найбільше підійде для створення якісного робота? Насправді, питання вже поставлений неправильно. Ідеального мови програмування для написання програми алгоритмічної торгівлі не існує. Дуже важливо при створенні своєї системи орієнтуватися на цілу групу факторів, про який піде мова нижче. Тільки шляхом глибокого аналізу можна підібрати для себе найбільш підходящий інструмент. У даній статті ми коротко пройдемося по ряду основних тонкощів створення радника.

Що повинен робити ваш робот? Перед створенням алгоритму ви повинні чітко розуміти функції майбутнього робота. Визначтеся, які завдання будуть покладені на систему: чи необхідний облік ризику менеджменту, знадобиться модуль конструктора портфоліо, чи буде передбачено тестування і так далі. Тільки після складання повного переліку завдань можна переходити до подальшого кроку.

Види стратегій Врахуйте, що стратегії діляться на два основних види - ті, що генерують сигнали, і стратегії дослідницького характеру. У першому випадку алгоритм програми повинен чітко знати, коли купувати, продаж, посилати накази і так далі. Для такої стратегії може знадобитися високий рівень продуктивності, хороша ширина каналу, відсутність різних затримок. У випадку з дослідним алгоритмом основний упор необхідно робити на історичних даних. Такий метод часто називається бектестінга. При формуванні даного модуля необхідно враховувати дві складові - алгоритмічну складність програми і обсяг інформації. У деяких випадках ефективність дослідницької стратегії залежить від числа ядер процесора і його продуктивності.

Тип стратегії Визначтеся, на якому ринку ви будете працювати, чи буде потрібно підключення зовнішніх постачальників, який буде частота операцій і їх обсяги. Наприклад, для роботи з акціями низьку ліквідність на американському ринку необхідно використовувати зовсім інші принципи, ніж у випадку з високочастотним алгоритмом при роботі на ринку ф'ючерсів. Проаналізуйте доступність підключення до системи постачальника, швидкісний режим передачі даних, структуру АРI, можливості збереження важливої ​​інформації і так далі. Якщо організувати доступ до декількох систем одночасно, то це тільки плюс. Врахуйте, що для якісної обробки великого обсягу даних знадобиться надійний торговий "двигун" і бектестер. У цьому випадку ідеальним варіантом буде С ++, а в деяких випадках і зовсім можна скористатися наявними можливостями доступного Assembler.

Створюємо дослідницьку систему Створення такої системи - досить трудомісткий процес і тут без IDE на зразок R Studio або MathLab буде складно обійтися. Важливо вибрати мову, який дозволить проводити повноцінне тестування коду і дасть необхідну швидкодію. В цьому відношенні є два гідних мови - С # і С ++. Їх перевага - наявність достатнього обсягу інструментів для повноцінної налагодження готового алгоритму. Є також варіант з використанням MathLab або R Studio, створеного на базі мови R. Якщо кількість параметрів при бектестінга дуже велике, то добре себе проявляє С ++. Можливий варіант з використанням Python, але в цьому випадку необхідно використовувати бібліотеки NumPy/pandas.

Конструктор портфоліо При створенні своєї системи не варто забувати про важливість конструктора портфоліо, який дозволяє виділити найбільш важливі угоди і здійснювати тільки ті з них, які приносять максимальний прибуток. Щоб цього домогтися, алгоритм повинен враховувати цілий ряд нюансів - клас активу, тип компанії, особливо акцій, волатильність і так далі. Тут найзручніше застосовувати бібліотеки для С ++ - LAPACK, uBLAS і NAG.

Торговий движок При виборі мови програмування з урахуванням особливостей майбутнього движка необхідно виходити з основних завдань - отримання "чистих" торгових сигналів, ризик-менеджменту, конструктора потфоліо і так далі. Найчастіше необхідно АРI або робота через протокол FIX. Отже, при виборі необхідно провести хоча б невеличкий аналіз якості АРI - продуктивності, обсягу документації, необхідність застосування додаткового софта і так далі. Багато брокерські АРI працюють на Java або С ++. Але навіть при роботі на цих мовах систему бажано тестувати перед застосуванням. У разі якщо є помилки в реалізації системи, можуть виникнути проблеми з продуктивністю, що у випадку з даним видом торгівлі дуже критично. Таким чином, при написанні торгового движка кращим варіантом буде застосування Java або С ++.

Продуктивність Ключовим аспектом для будь-якої торгової системи є її продуктивність, під якою розуміється цілий ряд факторів - швидкість виконання, якість каналу зв'язку, наявність мережевої затримки, масштабування і так далі. В цьому відношенні відмінний варіант застосування таких мов, як MatLab, Python, C ++, Java і R. Їхня перевага - наявність високопродуктивних бібліотек. При створенні якісного робота необхідно відразу вирішити проблему затримок, які можуть мати місце при зверненні до бази даних, генерації торговельних сигналів, проставлення наказів і так далі. Щоб виключити неприємні моменти, бажано провести оптимізацію на рівні ядра. Не можна забувати про важливість кешування і динамічного виділення пам'яті (на Java і С # з цим проблем не виникає).

Налагодження Ще один важливий момент - можливість повноцінної налагодження вже готової програми. Тут виділяються дві мови - Java і С ++. У них питання налагодження і тестування розкриті найкраще.

Висновки Таким чином, вибір мови програмування для торгової системи - це трудомісткий процес, де не існує жодного на 100% ідеального варіанту. Тут найважливіше з розумом підійти до вибору, врахувати поставлені завдань, побудувати якісну систему і, звичайно, вивчити мову (якщо це необхідно). Хай щастить.