es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizando el valor de una columna basándose en valores anteriores

Estoy trabajando con un DataFrame de instrumentos financieros. En primer lugar, utilicé el siguiente código para verificar todas las ocasiones en las que el precio de cierre fue mayor que el máximo previo de n períodos, y cuando el precio de cierre fue menor que el mínimo previo de n períodos. Luego asigné los valores relevantes a la nueva columna “posición”.

entry = [self.data['close'] > self.data['open_buy_high'], self.data['close'] < self.data['open_sell_low']]
self.data['position'] = np.select(entry, [1, -1], 0)

Esto funcionó bien y devolvió los valores. El siguiente paso es que necesito que la columna “posición” permanezca igual a 1 o -1 hasta que el precio de cierre supere el máximo o mínimo de un período más corto. Entonces probé el siguiente código:

exit = [(self.data['position'] == 1) & (self.data['close'] > self.data['close_buy_low']),
            (self.data['position'] == -1) & (self.data['close'] < self.data['close_sell_high'])]
self.data['position'] = np.select(exit, [1, -1], 0)

Después de ejecutar esto, obtuve exactamente el mismo DataFrame de vuelta y me di cuenta de que las condiciones que utilicé significan que donde la posición es igual a cero, permanecerá igual a cero. Debido a que el segundo bloque de código solo devolverá verdadero cuando la posición sea 1 o -1. Por lo tanto, obviamente obtendré el mismo resultado que si simplemente ejecutara el primer bloque.

Mi problema ahora es que no tengo idea de cómo actualizar los valores 0 de la columna de posición para que permanezcan igual a 1 (en lugar de 0) hasta que el precio de cierre caiga por debajo de ‘close_buy_low’ o -1 (en lugar de 0) hasta que el precio de cierre supere ‘close_sell_high’.

¿Alguna sugerencia sobre qué puedo hacer/usar para lograr esto?

DataFrame: aquí

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar los valores de 0 de la columna posición y que se mantengan iguales a 1 (en lugar de 0) hasta que el precio de cierre caiga por debajo de ‘close_buy_low’, o -1 (en lugar de 0) hasta que el precio de cierre suba por encima de ‘close_sell_high’, puede modificar las condiciones de salida de la siguiente manera:

    “exit = [(self.data[‘position’] == 1) & (self.data[‘close’] > self.data[‘close_buy_low’]),
    (self.data[‘position’] == -1) & (self.data[‘close’] < self.data[‘close_sell_high’]),
    (self.data[‘position’] == 0) & (self.data[‘close’] < self.data[‘close_buy_low’]),
    (self.data[‘position’] == 0) & (self.data[‘close’] > self.data[‘close_sell_high’])]
    self.data[‘position’] = np.select(exit, [1, -1, 1, -1], 0)”

    Esto establecerá la posición en 1 si la posición actual es 0 y el precio de cierre cae por debajo de ‘close_buy_low’, y en -1 si la posición actual es 0 y el precio de cierre sube por encima de ‘close_sell_high’.

Comments are closed.