pmus

Простые плагины для RTS-Robot с Гитлером и без

    • 24 января 2017, 06:32
    • |
    • pmus
  • Еще
Простые плагины для RTS-Robot с Гитлером и без
Под катом рассматриваем структуру самого простого плагина.

Сегодня я расскажу, как устроены плагины в моей торговой платформе. Плагин — это программа на Python, записанная в файл с любым именем в подпапке /plugins основной программы. Плагин — это не обязательно торговая система, т.к. он может выполнять любые функции (планировщик соединений, доставщик новостей, sms-оповещатель) — всё, что может пригодиться в работе. Начну с описания самого простого плагина, который традиционно будет 'Hello, world'.

Для начала поясню, чего мне хотелось избежать в своих программах, и почему я выбрал именно Python.
Обычный скрипт для TSLab API выглядит приблизительно так:

using System.Collections.Generic;                                                                          
using TSLab.Script;                                                                             
using TSLab.Script.Handlers;                                                                            
using TSLab.Script.Optimization;                                                                                
using TSLab.Script.Helpers;                                                                             
using TSLab.Script.Realtime;                                                                            
                                                                                
namespace TSLab.Samples                                                                         
{                                                                               
        public class Final : IExternalScript                                                                    
        {                                                                       
                public …
                public virtual void Execute(IContext ctx, ISecurity sec)                                                                
                {                                                               
                        var …                                            
                        IList …
                        {                       
                                int barsCount = sec.Bars.Count;
                                for (int i = 50; (i < barsCount); i++)
                                        
                                {                                                       
                                        if …                                             
                                        else …
                                        {                                               
                                                BT = …;                                  
                                                ST = …;
                                        }
        
                                }
                        }

Как говорится, ехал Гитлер через Гитлер… или это был Public через Public?

Я действительно люблю C-подобные языки за скорость и широту возможностей их применения, но как программиста меня просто тошнит от долгого хождения вокруг да около, перед тем, как будет написана первая строчка нужного кода.

Структура плагина максимально проста: в нем обязательны ровно две вещи.
  1. название: plugin_name
  2. функция init()

Если плагину необходимо получить управление в момент успешной установки соединения, то нужно добавить ещё одну функцию: trade()

Итак, простейший плагин hello_world по строчкам:

# -*- coding: utf-8 -*-#
plugin_name = 'Hello world!'

 Указываем, что файл сохранен в кодировке UTF-8 и называется он 'Hello world'

global api

Указываем, что будем использовать встроенный API — он нам понадобится для вывода текста в окно программы

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

class HelloWorld():

    def __init__(self):
        pass

    def sayhello(self):
        api.pprint('<strong>Hello!</strong>', 'magenta')

    def trade(self):
        api.pprint('<strong>Trade!</strong>', 'blue')

hello = HelloWorld()

И наконец, обязательные функции

def init():
    hello.sayhello()


def trade():
    hello.trade()

При успешной загрузке плагина выполнится init(), которая вызовет метод hello.sayhello(), а тот, в свою очередь, вызовет функцию api под названием pprint. А функция api.pprint(текст, цвет) по умолчанию выводит текст нужного цвета в закладку 'Консоль'.
Простые плагины для RTS-Robot с Гитлером и без
Сразу после установки соединения будет вызвана (при наличии ее в плагине) функция trade(). У нас она просто сообщает, что успешно запустилась.
Простые плагины для RTS-Robot с Гитлером и без
Вот и весь hello_world.

Приведу ещё раз полный текст плагина:

# -*- coding: utf-8 -*-#
plugin_name = 'Hello'
global api

class HelloWorld():
    def __init__(self):
        pass

    def sayhello(self):
        api.pprint('<strong>Hello!</strong>', 'magenta')

    def trade(self):
        api.pprint('<strong>Trade!</strong>', 'blue')

hello = HelloWorld()

def init():
    hello.sayhello()

def trade():
    hello.trade()

Как видите, получается компактный и читаемый код безо всяких Гитлеров. А если упростить, убрав класс,  то вообще семь строк:

# -*- coding: utf-8 -*-#
plugin_name = 'Hello'
global api

def init():
    api.pprint('<strong>Hello!</strong>', 'magenta')

def trade():
    api.pprint('<strong>Trade!</strong>', 'blue')


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

Буду рад вашим комментариям!


Демка платформы лежит здесь: http://rts-robot.ru

p.s. Самые внимательные разглядят на скриншотах путь C:\Yukon. Это рабочее название проекта, но раз уж сайт называется rts-robot, то и программу я решил называть так же.

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
1.5К | ★5
2 комментария
предлагаю выпустить книжку по программированию «Моя борьба»
avatar
Alexey Kulikov, уже есть такая. Называется PEP20, или 'The Zen of Python'.
avatar

Читайте на SMART-LAB:
Фото
Апри выходит в Петербург!
Апри выходит в Петербург! Долгожданный момент, мы получили разрешение на строительство первого этапа «Апри Нева» ! Это наш...
🎓 Снова за парту: чему российский бизнес учится в 2026 году?
Первая неделя сентября — хороший повод поговорить о корпоративном образовании. Технологии развиваются все быстрее, а вместе с ними меняются и...
Фото
Инвестиции без спешки: торгуем в выходные
Алексей Девятов Клиенты Альфа-Инвестиций могут совершать сделки в выходные . Торги в эти дни не отличаются волатильностью, но если всё-таки...
Фото
Портфель "купил и забыл" (года на два). Две новые позиции в портфеле. Третью нарастил. Что продал, чтобы купить?
Доброго вечера, дорогие друзья. Возвращаюсь спустя месяц с новостями по портфелю. Обычно я пишу оперативно о своих действиях, но в...

теги блога pmus

....все тэги



UPDONW
Новый дизайн