Как проверить, находится ли свеча внутри зоны спроса или предложения?

[сначала проверьте изображение] https://i.stack.imgur.com/LEHZr.jpg

Я хочу проверить, находится ли отмеченная свеча на 60% внутри зоны (больше). У меня есть значения OHLC свечи и верхнего и нижнего уровня зоны.

open = 868.72 
high = 871 
low = 868.72
close = 870.74      

upper_level = 870 
lower_level = 868

Как это сделать . Я просто не знаю, как начать?

Это не похоже на вопрос, связанный с программированием. Ваш вопрос больше связан с решением проблем.

Nikhil Devadiga 18.03.2022 05:53

Для тестирования массивами numpy предоставьте воспроизводимый пример с результатами, которые должен получить код.

Ali_Sh 18.03.2022 11:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вопрос написан недостаточно хорошо, чтобы на него можно было ответить полностью. Он должен содержать небольшие примеры, которые будут воспроизведены предлагаемыми кодами для проверки и оценки. Тем не менее, я создаю образец и надеюсь быть репрезентативным. Мы можем работать с нужными парами, т.е. открытым и Закрыть (тела свечей) или низкий и высоко (тени свечей); Используя первую пару (при условии, что вы ищете тела свечей):

open = np.array([70, 30, 100, 100, 30, 10], dtype=np.float64)
close = np.array([100, 10, 50, 150, 100, 200], dtype=np.float64)

upper_level = np.array([90], dtype=np.float64)
lower_level = np.array([40], dtype=np.float64)

desired_percent = 0.6              # desired body containing related percentage

Эту проблему можно решить циклами python на всех свечах и проверкой условий; Но, как я думаю, эти проблемы должны решаться массивами (из-за больших объемов ввода) с точки зрения производительности и эффективности, поэтому я предлагаю следующее NumPy вспомогательное решение.

  • Сначала мы должны определить, какие из элементов (поэлементно) в открытым и Закрыть больше или меньше.
  • Также создается булев массив с False заполненным значением, которое будет заполняться Trues, если свечи удовлетворяют заданному условию.
  • Из-за большого объема данных нам необходимо убрать лишние свечи (выходящие за лимитную зону (ситуация 1)).

Для этой задачи я рассматриваю 5 различных ситуаций:

  1. свечи полностью вне лимитной зоны
  2. свечи полностью внутри лимитной зоны
  3. свечи, содержащие лимитную зону (лимитная зона является частью тела свечи)
  4. свечи, только вершина которых находится в лимитной зоне
  5. свечи, только дно которых находится в лимитной зоне
resulted_masked_array = np.full(shape=open.shape, fill_value=False, dtype=bool)
top = np.maximum(open, close)                           # top of the candles
bottom = np.minimum(open, close)                        # bottom of the candles
level_height = upper_level - lower_level

# reducing the arrays by removing candles outside the limit zone
btm_upper_up = np.greater_equal(bottom, upper_level)                   # if candle is upper the limit zone
top_lower_down = np.less_equal(top, lower_level)                       # if candle is under the limit zone
candle_complete_outside = np.logical_or(btm_upper_up, top_lower_down)
candle_not_complete_outside = np.invert(candle_complete_outside)
top = top[candle_not_complete_outside]
bottom = bottom[candle_not_complete_outside]
candles_height = top - bottom

# if limit zone length be a part of candle body --> needs to check if the zone height >= the desired percentage of the candles' body
btm_lower_down = np.less_equal(bottom, lower_level)
top_upper_up = np.greater_equal(top, upper_level)
percentage_check = (level_height / candles_height) >= desired_percent

# if just candle bottom be in the limit zone
btm_upper_down = np.greater_equal(bottom, lower_level)
btm_lower_up = np.less_equal(bottom, upper_level)
up_to_btm = upper_level - bottom
percentage_check_utb = (up_to_btm / candles_height) >= desired_percent

# if just candle top be in the limit zone
top_upper_down = np.greater_equal(top, lower_level)
top_lower_up = np.less_equal(top, upper_level)
top_to_down = top - lower_level
percentage_check_ttd = (top_to_down / candles_height) >= desired_percent

candle_complete_inside = np.logical_and(btm_upper_down, top_lower_up)
body_contain_limits = np.logical_and.reduce((btm_lower_down, top_upper_up, percentage_check))
btm_contained_limits = np.logical_and.reduce((btm_upper_down, btm_lower_up, percentage_check_utb))
top_contained_limits = np.logical_and.reduce((top_upper_down, top_lower_up, percentage_check_ttd))

result = np.logical_or.reduce((candle_complete_inside, body_contain_limits, btm_contained_limits, top_contained_limits))

# filling the main False filled Boolean array by Trues (for satisfied conditions)
resulted_masked_array[candle_not_complete_outside] = result

# resulted_masked_array --> [ True False  True False  True  False]

Результаты должны быть проверены реальными входными данными; Здесь я проверил их на небольшом созданном примере.

Другие вопросы по теме