И вот все таки появилась свободная минутка и я решил использовать ее для того чтобы постараться объяснить на простейшем примере как выглядит написание торгового робота для MTS с помощью программы FinLab.MTS.
Некоторые с ухмылкой спросят:
- А зачем он нам? У нас и так неплохо получается!
Я отвечу:
- Это Очень хорошо! Значит Вы хороший трейдер и нашли свою стратегию, которая работает на Вас и приносит Вам прибыль.
Но МТС или же механические торговые системы, именуемые в народе торговыми роботами, позволяют:
Во-первых "Роботы не потеют!"
Наверное это самое важное, что робот может делать.
- Робот не умеет волноваться. Он не будет сидеть в позиции, ждать и надеяться на то, что рынок вернется и удастся закрыть позицию в плюс.
- Он не будет закрывать прибыльную позицию в разрез стратегии, боясь что рынок развернется и действовать по принципу "Лучше синица в руке, чем журавль в небе".
- Робот всегда будет торговать СТРОГО так, как будет заложено в программе и никак иначе.
Вот как раз здесь и возникает иногда недопонимние:
- Как так?! Робот и торгует в минус!
Этому человеку я бы порекомендовал проверить свою стратегию на прибыльность и правильность исполнения робота.
Еще раз повторюсь:
- РОБОТ ДЕЛАЕТ ТОЛЬКО ТО, ЧТО ЕМУ СКАЗАЛИ!
Во-вторых, робот может проводить сотни, тысячи вычислений.
Если этого требует стратегия, торговый робот непрерывно анализирует информацию, поступающую с рынка. Естествено, этого не может сделать ни один человек. Человеку это будет как минимум тяжело, а то и вообще не под силу.
В третьих, робот может сидеть и следить за рынком всю торговую сессию.
Я конечно встречал людей которые могут просидеть всю торговую сессию у монитора, но считаю это неграмотным управлением своим временем. Ведь это время можно потратить на разработку новой стратегии или доработку старой. В конце концов все мы живём не для того, чтобы постоянно работать. Нужно найти время чтобы просо жить.
Многие до сих пор поражены результатами торговых роботов на конкурсе "Лучший частный инвестор", который ежегодно проводит биржа РТС. Результативность в 5000% годовых с помощью одних лишь рук достичь просто невозможно! Однко с помощью головы и сделанного этой головой торгового робота - возможно всё!
Теперь у Вас есть все шансы самостоятельно добиться этих результатов!
Сейчас я расскажу как сделать торгового робота своими руками, используя программу FinLab.MTS. Описание этой программы, её философии начато в одном из постов нашего блога.
Вот мой личный опыт:
Я использую Microsoft Visual Studio 2010 (далее VS), при этом, если вы обратите внимание во всех сборках устанавливаю версию 3.5.NET.
А, да! Чуть не забыл. Пишу я на языке C#.
Давайте же наконец начнем! Итак, поехали!
1. Запускаю VS и нажимаю кнопку создать проект "New Project"
2. Выбираю Библиотеку класса "Class Library", выбираю .NET Framework 3.5. и нажимаю OK.
3. Далее я добавляю, те библиотеки, с которыми мы будем работать, т.е.
- FinLab.MTS.Infinity.dll
- FinLab.TradeBase.dll
Добавить библиотеки в проект можно нажав правой кнопкой мыши на папке References->Add, в Solution Explorer, на рисунке это окно находится справа.
4. Теперь необходимо прописать пространства имен к этим библиотекам, и пронаследовать основной класс который мы будем использовать. Основным классом является класс Alghoritm.
5. Теперь необходимо переопределить абстрактные поля и методы наследуемые от Alghoritm.
Вот что получилось:
6. Возможно вы будете удивлены когда нажмете F6 и проект у вас не скомпилируется, появится сообщение об ошибке.
Ошибка заключается в том, что не обходимо еще создать UserControl, т.е. холст на котором и будут располагаться все наши поля ввода, кнопочки и т.д. Так создадим же его.
Для этого необходимо нажать правой кнопкой мыши на ClassLibrary1, т.е на самом проекте (так как мы хотим добавить контрол в наш проект)
7. Выбираем User Control и нажимаем OK
8. Теперь мы можем видеть наш контрол, наш холст на котором мы будем ваять своего робота.
Код программы:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using FinLab.MTS.Infinity; using FinLab.TradeBase; using System.Drawing; using System.Windows.Forms; namespace ClassLibrary1 { public class Class1:Algorithm { public Class1() { } public override AddCommand CheckBuyDirection(IStakan futures, IStakan spot) { } public override AddCommand CheckSellDirection(IStakan futures, IStakan spot) { } public override bool DeleteOrderBuy(AddCommand addCommand, IStakan futures, IStakan spot) { } public override bool DeleteOrderSell(AddCommand addCommand, IStakan futures, IStakan spot) { } public override bool Initialize() { return true;} public override void Dispose() { } public override ObjectAssociatedControl CreateControl() { } public override double TargetPriceBuy { get { return 0;} } public override double TargetPriceSell { get { return 0;} } public override double AveragePrice { get { return 0; } } public override int CurrentLotSizeBuy { get { return 0; } } public override int CurrentLotSizeSell { get { return 0; } } public override void OnTrade(Trade trade) { } } public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } } partial class UserControl1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name=”disposing”>true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// <summary> /// Required method for Designer support – do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; } #endregion } }
На этом я наверное закончу на сегодня, свободная минутка пробежала быстро.
Те, кто хочет на практике ваять торгового робота - открывайте брокерский счёт (напомню, наша программа работает сейчас с терминалами брокеров, которых мы рекомендуем) и ждите дальнейшего описания.
Далее я расскажу о том, чем же заполнять эти абстрактные методы, наследуемые от класса Alghoritm и как это делается.
Чтобы не пропустить следующие части – не забывайте подписываться на новые статьи по RSS… (кто не знает, что такое RSS – можете посмотреть здесь>>) .
До встречи!
Также прошу поддержать наш блог в рейтинге лучших финансовых блогов. Заодно посмотрите, о чём пишут другие трейдеры (наверняка, там много роботорговцев).
Продолжение статьи:
Скажите, а где брать библиотеки FinLab.MTS.Infinity.dll и FinLab.TradeBase.dll ?
Привет, gars.
Они лежат в корне программы. C:\ProgramFiles\FinancialLaboratory\FinLabTrade\
Вот ссылка там тоже делают робота ( http://mts-trader.ru/2010/12/02/54/ ). Там очень доступно описан процесс – думаю кому то это поможет тоже.