pmus

Простейший скрипт - покупка актива в указанное время

Простейший скрипт - покупка актива в указанное время

Продолжаю рассказывать о простейших скриптах. Если вы читали предыдущий пост, то без проблем разберетесь и в этом коде.

На прошлой неделе мне задали такой вопрос:

Т.е. простой смертный берет питон пишет код. Типа там если сегодня среда 10-00, то купить 1 акцию. Прикрепляет блок, данные идут, условие срабатывает, покупка, лог… и т.п.


Спрашивали — отвечаю.

# -*- coding: utf-8 -*-#

plugin_name = '1200'
global api

class Trader():
    def __init__(self):
        self.buy_time = 120000

В TSLab кубик «Время» отдает числовое значение вида ЧЧММСС, то есть 12 часов дня будет равняться 120000.

Будучи под этим нехорошим влиянием, я поступил так же. Исправлюсь.
Чтобы узнать текущее время, наш скрипт спросит у API функцию numeric_time()  — чуть ниже.

        self.mkt = api.stock
        self.run = True
        self.stock = self.mkt.get_current_contract('Si')  # -> SiH7

Функция API get_current_contract(буквы) возвращает код ближнего контракта, например до 15 марта 2017 года это будет SiH7. Если конечно, часы на компьютере не сбиты.

        self.qty = 0                                          # Защита от дурака - купит ведь!

    def wait_for_time(self):
        while self.run:
            api.sleep(1)
            ap = self.mkt.get_forts_position(self.stock)

Функция API get_forts_position(бумага) возвращает позицию по указанному инструменту. get_forts_position('SiH7') покажет, сколько у нас SiH7 (при шорте это будет отрицательное значение).

            if ap:
                api.pprint('Already in position')            # Уже в позиции
                self.run = False
            else:
                if api.numeric_time() > self.buy_time:
                    _res = self.mkt.buy_market(self.stock, self.qty)

Функция API buy_market(бумага, количество) купит по рынку указанную бумагу в указанном количестве. Осторожно, так можно и «ногу себе отстрелить».

                    self.run = False
                    if _res:
                        api.pprint('All ok, I stop now')
trader = Trader()

def init():
    api.pprint('Loaded')

def trade():
    trader.wait_for_time()
    api.pprint('Started', 'red')

Остальной код идентичен предыдущему примеру.
Возможно, я длинно описываю, но на самом деле получается коротенько:
Простейший скрипт - покупка актива в указанное время


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

А теперь хотелось бы задать вопрос вам: интересно ли вам развитие этой платформы? У меня сейчас совсем немного свободного времени, чтобы тратить его на искусство ради искусства. Была мысль отдать проект в opensource, но мне кажется не очень справедливым просто дарить свою работу. С другой стороны, если это никому неинтересно, то я отложу его до появления свободного времени.

★16

Идея — бомба! Автор продолжай, спасибо за проект.
avatar

Scorpio

Люди и руками плохо торгуют. Алготрейдеров здесь такой же процент, как и геев в обществе, он очень мал. Но несколько единиц найти можно.
avatar

Пропан-Бутан

Genosh, да если бы я руками торговал хорошо, зачем бы мне понадобилась программа.
avatar

pmus

pmus, тогда исходя из чего вы пишете год, если не понимаете, как это сделать руками, где купить или продать, закрыть сделку (исключая торговлю в спреде и арбитраж, требующие скорость исполнения)? Не совсем понятно.
Genosh, вы меня действительно не до конца поняли. Попробуйте найти здесь трейдера, который скажет, что он хорошо торгует. Каждый недоволен чем-то в своей торговле. Я на рынке с 2005 года и недоволен своей торговлей. Например, я торгую хуже робота, потому что не умею так быстро считать и так быстро выставлять заявки. Кроме того, у меня еще есть человеческая психика и нервы, которые тоже мешают торговать. Но если вы действительно думаете, что я не понимаю, как торговать, можете убедиться в обратном здесь https://youtu.be/WY45HJGHHBI
avatar

pmus

pmus, я не об этом. Я хотел понять мышление алготрейдеров, тех, кто не скальпирует, а осуществляет сделки внутри дня или ведет среднесрочную торговлю, где скорость ненужна и все можно сделать руками. Это и легче и надежнее. Такие тоже существуют. Конечно, ручной скальпинг выматывает нервы и затягивает, как рулетка.
Genosh, вангую, что многим позиционщикам может быть полезен автохедж, автостоп, расчет рисков по позиции + мани-менеджмент. Захочется Вам выставлять позу по полу-Келли например. Не на калькуляторе же считать? Про опционы вообще молчу. Быстро посчитать кучу греков не каждый кандидат наук сможет. В общем, это прогресс. Раньше вообще торговали с телеграфной ленты, но технологии не стоят на месте.
avatar

pmus

Где взять информацию по API?
Пока пользоваться той, что в постах и в скриптах plugins?
avatar

Scorpio

Scorpio, не было времени документировать, т.к. не думал, что людям это нужно.

 Навскидку, что быстро нашел из записей (у нас 3 часа ночи все-таки):

Функции api:
============
numeric_time()
numeric_date()
pprint()
sleep()

Функции api.stock:
====================
get_secid(seccode) - получает secid из seccode, например:
get_secid('LKOH') возвращает 0002

get_board(seccode) - получает board из seccode, например
get_secid('LKOH') возвращает 1

subcsribe(seccode) - подписка на данные по инструменту.
subscribe('SiH7') - подпишется на quotations и quotes

get_client() - получает id клиента

buy_market(seccode, lots) - покупка по рынку бумаги с кодом seccode лотов количеством lots
buy_market('SiH7', 1) - купит 1 контракт.
возвращает True если покупка удалась, иначе False
    
sell_market - см. выше

get_current_contract(prefix='RI') - вернет RIH7, то есть текущий контракт

self.positions - вернет таблицу класса Table
self.positions() - вернет список словарей:

get_forts_all_money() - все средства
get_forts_free_money() - свободные средства

get_varmargin(seccode) - вариационная маржа, считается медленно
avatar

pmus

pmus, Что делать, если мне понадобятся регулярные выражения?
avatar

Scorpio

Scorpio, ну наверное, как обычно: import re и погнали!
avatar

pmus

pmus, Отлично!
avatar

Scorpio

господи, если бы с указанной прибылью, то можно было бы почитать…
Сергей Гаврилов, вам всего лишь нужна кнопка «отменить последнюю сделку». ;-)
avatar

pmus

Случилось чудо! На смартлабе пост по теме ресурса!
avatar

Маркиз Лафайет


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
Регистрация
UPDONW