pmus

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

    • 02 февраля 2017, 00:35
    • |
    • 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
15 комментариев
Идея — бомба! Автор продолжай, спасибо за проект.
avatar
Люди и руками плохо торгуют. Алготрейдеров здесь такой же процент, как и геев в обществе, он очень мал. Но несколько единиц найти можно.
avatar
Genosh, да если бы я руками торговал хорошо, зачем бы мне понадобилась программа.
avatar
pmus, тогда исходя из чего вы пишете год, если не понимаете, как это сделать руками, где купить или продать, закрыть сделку (исключая торговлю в спреде и арбитраж, требующие скорость исполнения)? Не совсем понятно.
avatar
Genosh, вы меня действительно не до конца поняли. Попробуйте найти здесь трейдера, который скажет, что он хорошо торгует. Каждый недоволен чем-то в своей торговле. Я на рынке с 2005 года и недоволен своей торговлей. Например, я торгую хуже робота, потому что не умею так быстро считать и так быстро выставлять заявки. Кроме того, у меня еще есть человеческая психика и нервы, которые тоже мешают торговать. Но если вы действительно думаете, что я не понимаю, как торговать, можете убедиться в обратном здесь https://youtu.be/WY45HJGHHBI
avatar
pmus, я не об этом. Я хотел понять мышление алготрейдеров, тех, кто не скальпирует, а осуществляет сделки внутри дня или ведет среднесрочную торговлю, где скорость ненужна и все можно сделать руками. Это и легче и надежнее. Такие тоже существуют. Конечно, ручной скальпинг выматывает нервы и затягивает, как рулетка.
avatar
Genosh, вангую, что многим позиционщикам может быть полезен автохедж, автостоп, расчет рисков по позиции + мани-менеджмент. Захочется Вам выставлять позу по полу-Келли например. Не на калькуляторе же считать? Про опционы вообще молчу. Быстро посчитать кучу греков не каждый кандидат наук сможет. В общем, это прогресс. Раньше вообще торговали с телеграфной ленты, но технологии не стоят на месте.
avatar
Где взять информацию по API?
Пока пользоваться той, что в постах и в скриптах plugins?
avatar

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, Что делать, если мне понадобятся регулярные выражения?
avatar
Scorpio, ну наверное, как обычно: import re и погнали!
avatar
pmus, Отлично!
avatar
господи, если бы с указанной прибылью, то можно было бы почитать…
Сергей Гаврилов, вам всего лишь нужна кнопка «отменить последнюю сделку». ;-)
avatar
Случилось чудо! На смартлабе пост по теме ресурса!
avatar

теги блога pmus

....все тэги



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