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 = …; } } }
Если плагину необходимо получить управление в момент успешной установки соединения, то нужно добавить ещё одну функцию: 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(текст, цвет) по умолчанию выводит текст нужного цвета в закладку 'Консоль'.
Сразу после установки соединения будет вызвана (при наличии ее в плагине) функция trade(). У нас она просто сообщает, что успешно запустилась.
Вот и весь 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, то и программу я решил называть так же.