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.4К | ★5
2 комментария
предлагаю выпустить книжку по программированию «Моя борьба»
avatar
Alexey Kulikov, уже есть такая. Называется PEP20, или 'The Zen of Python'.
avatar

Читайте на SMART-LAB:
🔔 Завтра — результаты Займера за I квартал
Напоминаем, что вебинар по финансовым результатам Займера за I квартал 2026 года состоится уже завтра в 11:00 МСК. Генеральный директор компании...
Фото
Инфляция снова меняет правила игры для ФРС
Индекс доллара торгуется в плюсе четвертый день подряд находясь на максимуме двух недель. Сообщения о том, что встреча Трампа и Си прошла...
💰 Российский бизнес откладывает инвестпроекты
Высокая ключевая ставка и охлаждение экономики вынуждают российские компании пересматривать инвестиционные планы. Об этом заявил глава Российского...
Фото
Хэдхантер. Отчет МСФО за Q1 2026г. Всё будет непросто…но…есть надежда.
Вышли финансовые результаты по МСФО за Q1 2026г. от компании Хэдхантер: 👉Выручка — 9,49 млрд руб. (-1,5% г/г) 👉Операционные расходы —...

теги блога pmus

....все тэги



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