Слияние кода завершено, страница обновится автоматически
Поддержка динамических параметров в индикаторах
В торговых платформах, таких как каналы цен и программы отслеживания финансовых рынков, параметры окон технических индикаторов обычно поддерживают целочисленные значения и могут использовать другие индикаторы:
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
при преобразовании данных по барам и временным интервалам.Исправлено: