Блог им. MihailMihalev |Танцуем Numba

Пишешь код на python, а он тормозит и хочется взять и переписать на C++?
Не надо так! Современный С++ компилятор имеет под капотом LLVM, но современный python настолько мощный, что можно использовать тот же самый LLVM, чтобы получить скорость сопоставимую с C++. Вот типичный пример того, что на голом python будет работать мучительно долго: 

import time
import numba
import numpy as np

@numba.jit(nopython=True)
def calculate_max_drawdown(initial_cash: float, cashes: np.ndarray) -> float:
    """Расчет максимальной просадки"""
    peak = initial_cash
    max_dd = 0.0

    for cash in cashes:
        if cash > peak:
            peak = cash
        dd = (peak - cash) / peak
        if dd > max_dd:
            max_dd = dd

    return max_dd

# Вариант без Numba для сравнения
def calculate_max_drawdown_pure(initial_cash: float, cashes: np.ndarray) -> float:
    peak = initial_cash
    max_dd = 0.0

    for cash in cashes:
        if cash > peak:
            peak = cash
        dd = (peak - cash) / peak
        if dd > max_dd:
            max_dd = dd

    return max_dd

def test_calculate_max_drawdown():
    n = 1_000_000  # 1 миллион точек
    returns = np.


( Читать дальше )

Блог им. MihailMihalev |Я самый ленивый трейдер, часть 2

Ранее я писал о своёй поделке — надстройка над терминалом quik на python для торговли.
С тех пор сделал ещё пачку полезных фич, индюшатню, сигналы, исправил ошибки, прошёл стресс-тест в условиях повышенной торговой активности(после снижения ключевой ставки). Вчера доделал офлайн голосового помощника. Можно торговать, не вставая с дивана и не отрываясь от телефона:)

Команды, которые понимает помощник:
«Кеша, включи голосовые уведомления» или «Кеша, включи голос»
«Кеша, выключи голосовые уведомления» или «Кеша, выключи голос»
«Кеша парковка» — паркует все свободные деньги в фонд ликвидности
«Кеша купи/продай газпром(яндекс, т техно, и ещё ряд тикеров)» — покупает или продаёт указанный инструмент на определенный в настройках объём.
«Кеша как дела» или «Кеша рынок» — докладывает о состоянии рынка.

Архитектура очень простая — распознавание голоса крутится отдельным процессом, а торговый терминал на python коннектится к нему и получает готовые команды в виде json. Распознаватель сделан на упрощенной руcскоязычной модели с помощью KaldiRecognizer. Расширенная грамматика и преобразование в json сделано на Lark. Процесс распознавания голоса использует cpu на 0.4-0.5%.

( Читать дальше )

....все тэги
UPDONW
Новый дизайн