Новые возможности
set_krecord_list
для создания временного объекта Stock при использовании других источников данных и получения данных K-линийУстранение ошибок
Новые возможности
Другие улучшения и изменения
SpendTimer теперь выводит информацию на std::cout для удобства захвата вывода Jupyter.
<https://gitee.com/fasiondog/hikyuu_hub>
_hosts.py
в папке пользователя для удобства изменения связанных настроек сервера pytdxОбщее улучшение и оптимизация
importdata
и обновление информации о блоках через tools/update_block_info.py
.Расширенные возможности
get_datetime_list
и get_values
to_df
для объекта Performance в Pythonticks
для получения количества микросекунд с минимальной датойИсправление ошибок
Другие изменения
Оптимизация производительности
#125 <https://github.com/fasiondog/hikyuu/pull/125>
_ Оптимизация объединения показателей, скорость вычислений увеличилась в 8–10 раз.
Улучшение функциональности
Исправление других ошибок
Устойчивость и совместимость
setup.py
была исправлена, что обеспечивает корректное применение параллельной компиляции.Оптимизация алгоритмов
break
в формуле weave
, чтобы избежать аварийного завершения при печати.discard
в функции SUM
.m_discard
при использовании setDiscard
когда discard < size
.Расширение функциональности
Другие исправления и улучшения
getFinanceInfo
и getHistoryFinanceInfo
, которые действуют только для типа акций STOCKTYPE_A.IndicatorImp::setContext
для правильного изменения контекста во время прохода.split
, а также добавлены новые функции преобразования байтов в строки byteToHexStr
.m_broker_last_datetime
при использовании нескольких брокеровQuery.HOUR2
Stock
с добавлением второй защитыdelta
при условии start_time < phase1_start
requests.get
через проксиdelta.total_seconds()
возвращает отрицательное значениеexecutor.map
flatbuffers
fmt
"zsbk_sz = blockbj"
на "zsbk_bj = blockbj"
Устранённый MySQL движок может импортировать данные, но фактически не может быть использован.
pip install hikyuu
возможна в Linux.bokeh_draw.py
.Поддержка динамических параметров в индикаторах
В торговых платформах, таких как каналы цен и программы отслеживания финансовых рынков, параметры окон технических индикаторов обычно поддерживают целочисленные значения и могут использовать другие индикаторы:
T1 := HHVBARS(H, 120); {Количество дней до сегодняшнего дня с максимальной ценой за последние 120 дней}
L120 := LLV(L, T1 + 1); {Минимальная цена за период между текущей датой и днем максимальной цены}
Теперь в Hikyuu также можно использовать индикаторы в качестве параметров:
T1 = HHVBARS(H, 120)
L120 = LLV(L, T1 + 1)
L120.set_context(k)
L120.plot()
Обратите внимание
Из-за невозможности отличить, является ли ind параметром индикатора или вычисленным значением, если требуется использовать ind как параметр, следует явно указать это через IndParam, например: EMA(IndParam(ind)).
Лучший способ — это использование имени параметра для четкого указания того, что используется как параметр:
x = EMA(c) # Использует закрытую цену как входные данные для расчета
y = EMA(IndParam(c)) # Использует закрытую цену как параметр n
z = EMA(n=c) # Использует закрытую цену как параметр n
Улучшение PF, AF, SE
Теперь можно полноценно использовать портфели активов:
# Создание системы стратегий
my_mm = MM_FixedCount(100)
my_sg = SG_Flex(EMA(n=5), slow_n=10)
my_sys = SYS_Simple(sg=my_sg, mm=my_mm)
# Создание алгоритма выбора, используемого для ежедневного выбора торговой системы
# Здесь используется фиксированный выборник, то есть каждый день выбирается один и тот же набор систем
my_se = SE_Fixed([s for s in blocka if s.valid], my_sys)
# Создание распределителя активов, который определяет, как распределяются средства между выбранными системами
# Здесь создается равномерный распределитель активов, то есть средства распределяются пропорционально между всеми выбранными системами
my_af = AF_EqualWeight()
# Создание портфеля активов
# Создание счета, начальный баланс которого составляет 2 млн рублей, начиная с января 2001 года. Поскольку используется равномерный распределитель, средства будут распределены равномерно между всеми выбранными системами,
# Если начальный баланс слишком мал, каждая система может не иметь достаточно средств для выполнения сделок.
my_tm = crtTM(Datetime(200101010000), 2000000)
my_pf = PF_Simple(tm=my_tm, af=my_af, se=my_se)
# Запуск портфеля активов
q = Query(-500)
%time my_pf.run(Query(-500))
x = my_tm.get_funds_curve(sm.get_trading_calendar(q))
PRICELIST(x).plot()
Исправление ошибки компиляции при сборке Fedora 34, предупреждение warning
Исправление ошибок в скриптах обновления MySQL
Исправление неверного расчета чистой прибыли после корректировки данных, а также вывод предупреждения при использовании этих данных для обратного тестирования (передняя коррекция данных относится к будущим функциям)
to_df
при преобразовании данных по барам и временным интервалам.Исправлено: