Как рассчитать Heiken Chaiken Osc с помощью pandas python

Я рассчитываю данные индикатора для фондового рынка, и мне трудно рассчитать Heiken Chaiken Osc из-за переменной под названием «Accdist». Согласно Google, она рассчитывается следующим образом.

Формула выглядит следующим образом:

  1. Множитель денежного потока = [(Закрытие - Низкий) - (Высокий - Закрытие)] / (Высокий - Низкий)

  2. Объем денежного потока = Мультипликатор денежного потока x Объем за период

  3. ADL = Предыдущий ADL + Объем денежного потока за текущий период

Код Python (с использованием Talib + Numpy + Pandas)

data["cmf"] = (((data["close"] - data["low"]) - (data["high"] - data["close"])) / (data["high"] - data["low"]))

data["cmfv"] = data["cmf"] * data["volume"]

data["accdist"] = data["accdist"].shift(periods=1) + data["cmfv"]

Также попробовал это в скрипте сосны, но и там не повезло. Любая помощь будет оценена по достоинству.

Money_multiplier = ((close-low) - (high - close)) / (high - low)
Money_volume = Money_multiplier * volume
ADL = ADL[1] + Money_volume

Вот код pinescript, который я пытаюсь эмулировать, поскольку у меня работает индикатор, но его нужно перевести на python (probelem — это переменная accdist)

osc = ema(accdist, 3) - ema(accdist, 10)

person Jason Maynard    schedule 29.09.2020    source источник


Ответы (1)


Я столкнулся с этим же вопросом, и вот что я закончил с использованием python, numpy и pandas.

Я использовал формулу: Множитель денежного потока = ((Значение закрытия – Минимальное значение) – (Высокое значение – Значение закрытия)) / (Высокое значение – Минимальное значение)

Объем денежного потока = множитель денежного потока x объем за период

CMF = 21-дневный средний дневной денежный поток / 21-дневный средний объем

Здесь мы читаем в базовом файле валютных или биржевых данных:

import numpy as np
import pandas as pd

names = ['Date','Time','Open','High','Low','Close','Volume']
ask_series = pd.read_csv(ask_file,index_col=False,header=None,names=names))

ask_series["cmfm"] = (((ask_series["close"] - ask_series["low"]) - (ask_series["high"] - ask_series["close"])) / (ask_series["high"] - ask_series["low"]))
ask_series["cmfv"] = ask_series["cmfm"] * ask_series["volume"]
ask_series["cmf"] = ask_series['cmfv'].rolling(window=21).mean() / ask_series['volume'].rolling(window=21).mean() 

ask_series.tail()
person Cliff Robbins    schedule 28.05.2021